レガシーPHPのセキュリティ対策、大丈夫ですか?

第4回未修正の脆弱性(2)

前回に引き続き、未修正の脆弱性とパッチを適用しない場合の対処を順次紹介します。繰り返しになりますが、脆弱性の危険度の順ではなくパッチファイル名の順番に紹介します。紹介する脆弱性情報はSRA OSS Inc日本支社にてPHP4セキュリティ保守サービスとして提供しているものです。パッチ類は筆者の会社であるエレクトロニック・サービス・イニシアチブが、現状サポートされているPHPからレガシーPHPにバックポートしています。パッチの説明文を引用して脆弱性を解説します。パッチそのものの紹介は含みませんのでご了承ください。

PHP 4.3.9の評価は、PHPプロジェクトが配布しているソースコードではなくRedHat Enterprise Linux 4で提供されているPHPのSRPM(ソースRPM)のソースコードがベースになっています。PHP 5.1.6についてはPHPプロジェクトが配布しているソースコードがベースとなっています。このため、RedHat Enterprise Linux 5で修正されている問題も含まれていることがあります。

CVE/NVDについては第2回目のCVEの読み方で紹介しました。CVE/NVDの解説が必要な方はそちらをご覧ください。

CGIのDoS

適用

オプション

現在のPHPのCGIバイナリはFCGIとしても利用できます。以前はApache Webサーバーばかりだったと思いますが、nginxなどでFCGIを利用する方やWindows+IISでFCGIを利用する方も増えているでしょう。この脆弱性は不正なパスを指定することにより簡単にCGIバイナリをクラッシュしてしまう脆弱性です。

回避策

パッチを適用せずにクラッシュを回避するには、簡易なものでもよいのでWAFを導入します。簡易なWAFとはApacheのmod_rewriteを利用したプロキシをWAFとするなどの方法があります。

リスク

サービス不能攻撃(DoS)を行われる可能性が高くなります。

x86 FPUクラッシュ

適用

必須

Intelのx86系CPUを利用している場合にのみ影響する問題です。特定の浮動小数点の値を送信するとPHPがクラッシュします。

回避策

入力値をバリデーションしてクラッシュを防ぐことが考えられます。

リスク

攻撃可能な場合、非常に簡単にPHPをクラッシュされることができ、サービス不能攻撃(DoS)のリスクが高くなります。

exifのクラッシュ

適用

必須

exifモジュールは画像に埋めこまれた情報を読み取るためのモジュールです。CVSSでは「Victim must voluntarily interact with attack mechanism」⁠被害者は攻撃の仕組みを利用しなければならない⁠⁠、と書かれています。プログラムがイメージファイルのIDFタグを読み取ることを指しているのかも知れませんが不自然です。Webサーバ側でexifのタグを読み取っているならアップロードされたイメージファイルのIDFタグを読み取った時点でクラッシュしたり不正コードを実行される可能性があります。このデータベースを作った方が何か勘違いをしているのかも知れません。

回避策

信頼できない画像のexifでIDFタグを読み取らない。

リスク

クラッシュによりDoSのリスクが高くなる。任意コードが実行できる可能性もあるかも知れないが、この脆弱性単体では難易度は高いと思われる。

shmopの不正メモリ参照

適用

必須

このメモリの不正参照は非常に危険なタイプです。過去の同類の不正参照でさまざまな攻撃と次の攻撃に利用する情報を取得するPoCが作成されました。特にユーザが任意のPHPスクリプトを実行できる環境のリスクは高いです。

回避策

shmopモジュールをロードしない。shmop関数をdisable_functionで指定する。

リスク

メモリ上に機密情報がある場合のリスクは高い。本来PHPスクリプトしか実行できないはずのユーザが任意のコードを実行する可能性がある。

まとめ

レガシーPHPには確実にリスクが潜んでいます。アップグレードが最良ですが、さまざまな理由でできない場合もあるでしょう。少なくとも既知の脆弱性の影響を受けないようこの情報を活用してください。

おすすめ記事

記事・ニュース一覧