ログイン



CVE-2011-4885:ハッシュ衝突を悪用できる脆弱性

日曜日, 2月 5th, 2012 by

PHP5.3.9では、脆弱性CVE-2011-4885が修正された。この脆弱性を悪用すると、サーバに過度の負荷を掛け、サービスを提供できない状態にできます。この不具合はPHP5.0系、PHP5.1系、PHP5.2系にも含まれていますが、PHP5.3系以外の修正版は提供されていません。

セキュリティーホールの概要
 GETやPOSTで渡された変数はハッシュ構造に格納される。変数名に細工を加えることでハッシュの衝突が生じる。全ての変数のハッシュが衝突した場合、N個の変数の格納には、O(n2)の時間がかかるため、CPUに大きな負荷が発生する。

セキュリティーホールの修正
設定項目にmax_input_vars(デフォルト値1000)が追加された。計算量はO(n2)なので、1000個ぐらいの変数が衝突しても、現代のサーバなら問題ない。

バージョンアップせずに対応する方法
PHP5.3系を使っていれば、PHP5.3.10へのアップデートには大きなリスクはないが(とはいうものの、動作検証は必要)、PHP5.2系以前から、PHP5.3系への移行は一大事。DeprecatedやNoticeが大量に発生するだけならまだ良いが、関数名の衝突などが発生すると、アプリケーションのソースコードに手を加えざるを得ない。post_max_sizeに小さめの値(100kBなど)を設定すれば攻撃に対するリスクは軽減できる、ファイルのアップロードができなくなるなど、新たな問題が発生する可能性がある。現実的な対策としては、php.iniのpost_max_sizeを小さく設定し、ファイルのアップロードなどが必要な部分だけ、.htaccessを使って、post_max_sizeを適切な値に書き換えるのがよさそう。この対処をしても、ファイルのアップロード部分を攻撃されるとCPU負荷は上がるが、何も対処せずに、自動攻撃ツールの餌食になるよりはマシ。

とは言うもののバージョンアップしましょう
 上記の方法で、セキュリティーホールの穴を多少なりとも小さくできるが、設定変更や、その後の動作検証など、煩わしい作業が発生してしまう。古いバージョンのPHP(に限らずあらゆるソフトウェア)には、既知の脆弱性が含まれいる。攻撃の餌食になる前に、計画的にアップデートできるよう、きっちりした運用体制を構築しておくことが重要。

Leave a Reply