ShellShock(CVE-2014-6271)の解説

このブログではウェブサイトやその上で動作しているウェブアプリケーションの脆弱性について紹介すると共に注意喚起をする目的でまとめられています。

今回は2014年9月に公表されたGNU Bashの脆弱性について解説しています。この脆弱性はShellShockと呼ばれます。

概要

UnixやLinux等のOSでは、ユーザーからのコマンドを解釈実行するプログラムとしてシェルが用いられます。シェルの中でもLinuxやMac OS X等に標準で採用され、もっとも広く用いられているものにBashがあります。

他のシェル同様Bashにはプログラミングの機能があり、関数を環境変数により外部から指定することができます。この機能に脆弱性があり、環境変数経由で、外部から指定された任意のプログラムを実行できてしまいます。

Bashに対して外部から環境変数を指定する方法の典型例はCGIプログラムによるものですが、これ以外にメール受信など複数の方法が指摘されており、9月以降現在まで、攻撃が活発に継続されています。

攻撃のイメージと影響

Perl言語により記述されたCGIプログラムがあり、以下の部分によりメール送信をしているとします。以下のプログラムは外部からのパラメータ指定などはなく、一見すると攻撃の余地はありません。

system(‘/usr/sbin/sendmail admin@example.jp < mail.txt’);

しかし、このCGIプログラムを起動する際に、ブラウザのUser-Agentを以下のように指定することで攻撃ができてしまいます。

) { :;}; /bin/cat /etc/passwd

CGIプログラムに対しては、User-AgentなどHTTPヘッダは環境変数経由で渡されます。そして、CGIプログラムからsendmailコマンドを起動する際に、system関数の実装上シェルが起動されます。このため、デフォルトシェルとしてbashが指定されている環境では、上記のアクセスの結果 /etc/passwdの内容が表示されます。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
【以下略】

脆弱性による影響

この脆弱性による影響の例として下記がありますが、これらに限定されるわけではありません。

  • 秘密情報の漏洩
  • データの改ざん
  • 他サイトへの攻撃の踏み台

脆弱性の有無の確認方法

Bashのプロンプトから以下を実行してください。

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

下記が表示された場合、ShellShock脆弱性があることになります。

this bash is vulnerable

対策

Bashの最新版を導入するか、Bashの最新のパッチを適用することで対処できます。必ず最新のパッチを全て適用するようにしてください。

なお、デジサートの「クラウド型WAF」では、ShellShock攻撃からウェブサイトが攻撃を受けるのを防ぐことができます。

参考文献

JVNVU#97219505
GNU Bash に OS コマンドインジェクションの脆弱性
http://jvn.jp/vu/JVNVU97219505/index.html

修正の上再掲しました。

Posted in WAF