2012年5月7日月曜日

CGI版PHPにリモートからスクリプト実行を許す脆弱性(CVE-2012-1823)

CGI環境でPHPを動作させているサイトには、リモートからスクリプト実行を許してしまう脆弱性があります。php.netから提供されている修正リリース(PHP 5.3.12 / PHP 5.4.2)は不完全なため、該当するサイトは至急回避策を導入することを推奨します。

概要

CGIの仕様として、クエリ文字列に等号を含めない場合は、クエリ文字列がCGIスクリプトのコマンドライン引数として指定されます。
例えば、http://example.jp/test.cgi?foo+bar+bazという呼び出しに対しては、test.cgiは以下のコマンドラインで呼び出されます。
test.cgi foo bar baz
この仕様を悪用して、CGI版のPHPにコマンドライン引数としてPHPのオプションを指定できます。例えば、http://example.jp/test.php?-s というリクエストは、-sオプション(スクリプトソースを表示)と解釈され、PHPスクリプトを実行する代わりに、ソースを表示します(下図)。


これはPHPの脆弱性CVE-2012-1823と識別されています。

実証例

CVE-2012-1823の影響はスクリプトソースの表示だけではありません。PHPのオプションを組み合わせることにより、外部から任意のスクリプト実行が可能となります。具体的には、-dオプションを用いて、php.iniのディレクティブを外部から指定できます。metasploitminute.comで紹介されていたExploitを元に、攻撃例を紹介します。以下の2つのphp.iniディレクティブを指定します。
allow_url_include=On
auto_prepend_file=php://input
最初のディレクティブは、includeするファイルをURL指定でリモートから読み出すことを許可するものです。2番目のディレクティブは、PHP実行に先立ち、スクリプトをincludeしておくものですが、ファイル名としてphp://inputを指定しているため、POSTパラメータとして送信した内容をPHPスクリプトとして実行します。両者の組み合わせにより、外部から指定したスクリプトを実行することができます。
BurpSuiteのrepeater機能を用いて上記Exploitを実行した例を以下に示します。


readfile('/etc/passwd');により、/etc/passwdファイルが表示されています。また、X-Powered-Byヘッダから分かるように、上記はPHP5.4.2で実行されており、改修が不完全であることが分かります。

影響

外部からスクリプト実行が可能であることから、機密性・完全性・可用性の全てで大きな影響があります。影響を受けるサイト(下記)は至急の対策を推奨します。

影響を受けるサイト

当脆弱性の影響は、PHPをCGIとして実行しているサイトに限られます。
ApacheモジュールやFastCGIとしてPHPを実行しているサイトには影響ありません。

回避策

当脆弱性の対策としては、ApacheモジュールまたはFastCGIへの移行を推奨します。

どうしてもCGIのままにしなければならない場合は、php-cgiを呼び出すラッパー(/cgi-bin/php-wrapper)を以下のように記述します。実行権限を付与してください。php-cgiにはコマンドライン引数を渡さないところがポイントです。
#!/bin/sh
exec /usr/local/bin/php-cgi
PHPの設定を以下のように変更します。/cgi-bin/ディレクトリにphp-cgi(CGI版PHP)がコピーしてある場合は削除してください。
AddHandler application/x-httpd-php5 .php
Action application/x-httpd-php5 /cgi-bin/php-wrapper
すると、php-cgiにパラメータが渡されなくなることから、CVE-2012-1823の影響を回避することができます。php-cgiにコマンドライン引数を渡さなくてもPHPの実行に支障ありません。

参考


注記

当脆弱性は極めて影響が大きい反面、影響を受けるサイトは限られます。
当脆弱性が判明した時期が、日本の連休中にあたっていたため、対策に必要な最低限の情報のみ提供しておりましたが、海外では攻撃のための情報が流通し始めており、かつ日本での連休が明けたことから、詳細情報を公開しました。

[PR]HASHコンサルティングが提供するセキュリティ情報メールマガジン(無料)

0 件のコメント:

コメントを投稿

フォロワー