PHP 5.3.10 緊急リリース: hashDoS対策でエンバグ

Suhosinなどで有名なStefan Esser氏からの指摘で、PHP 5.3.9でhashDoS対策として導入された設定オプションmax_input_vars関連の処理に不備により、リモートから任意のコードを実行される可能性がある深刻なバグが発生していることが明らかになりました。昨日、この問題を修正した PHP 5.3.10が緊急リリースされています。

問題の場所は、max_input_varsによるリクエスト変数の最大値を超える変数が入力された時に、その変数が配列(例: foo[] )であると、ポインタが初期化されない状態となってしまうというもので、比較的シンプルなバグです。

詳細な解説はTheXploit | Critical PHP Remote Vulnerability Introduced in Fix for PHP Hashtable Collision DOSにあります。POCも公開されています(phpkill.js · GitHub)。

基本的な修正箇所は(その後、変数の開放処理が追加されていますが、)以下の部分です。

http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3/main/php_variables.c?r1=321634&r2=323007



問題は、このシンプルなバグがレビューをすり抜けてしまったことです。上の記事にもありますが、セキュリティfixがより重大なセキュリティ上の脆弱性を生み出すとは皮肉な話です。