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

第3回 未修正の脆弱性(1)

この記事を読むのに必要な時間:およそ 3 分

今回から未修正の脆弱性とパッチを適用しない場合の対処を順次紹介します。脆弱性の危険度の順ではなく,パッチファイル名の順番に紹介します。紹介する脆弱性情報は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の解説が必要な方はそちらをご覧ください。

fprint整数オーバーフロー

適用
必須
対象
PHPコア
バージョン: 5.1.6/4.3.9/4.4.9
CVE情報
CVE-2007-0909
CVSS Severity (version 2.0):
CVSS v2 Base Score:7.5 (HIGH) (AV:N/AC:L/Au:N/C:P/I:P/A:P) (legend)
Impact Subscore: 6.4
Exploitability Subscore: 10.0
CVSS Version 2 Metrics:
Access Vector: Network exploitable
Access Complexity: Low
Authentication: Not required to exploit
Impact Type:Provides unauthorized access, Allows partial confidentiality, integrity, and availability violation; Allows unauthorized disclosure of information; Allows disruption of service
種別
セキュリティ
解説
64ビットアーキテクチャの場合,ワードサイズの違いにより正数オーバーフローが発生します。
互換性
互換性問題はありません。
攻撃が成功した場合影響
任意コード実行の可能性があります。

printfのフォーマット文字列の添字数,幅,精度が内部的にはint型と宣言されいました。このため,64bitアーキテクチャの場合は整数オーバーフローが発生して必要なバッファ用のメモリが確保できない場合がありました。この問題は64bit環境でのみ発生します。

パッチではオーバーフローする変数をlong型(64bit)に拡張することにより脆弱性を修正しています。PHP 5.2以降では別の方法で修正され,32bit整数がオーバーフローした場合は無効にとなるように修正されています。

回避策

printf関数などのフォーマット文字列にユーザ入力を利用しない。利用する場合は範囲,形式などを合理的なものに制限(バリデーション)する。

リスク

CVSSのインパクトスコア 6.4,攻撃容易性 10.0(最高)と評価されています。非常に高いリスクのように思えますが,スクリプトが信頼できる環境であれば,つまり攻撃用スクリプトが簡単に設置できるような環境でなければCVSSのスコアと関係なくリスクはそれほど大きくありません。ただし,これらのレガシーPHPはファイルインクルードバグに対しても脆弱なので,不特定多数がスクリプトを設置できる環境ではないからといって安心できるものでもありません。

fnmatchバッファーオーバーフロー

適用
必須
対象
PHPコア
バージョン: 5.1.6/4.3.11/4.4.9
CVE情報
CVE-2007-4782
CVSS Severity (version 2.0):
CVSS v2 Base Score:5.0 (MEDIUM) (AV:N/AC:L/Au:N/C:N/I:N/A:P) (legend)
Impact Subscore: 2.9
Exploitability Subscore: 10.0
CVSS Version 2 Metrics:
Access Vector: Network exploitable
Access Complexity: Low
Authentication: Not required to exploit
Impact Type:Allows disruption of serviceUnknown
種別
セキュリティ
解説
不正に長いファイル名の場合,バッファオーバーフローが発生する。
互換性
互換性問題はありません。
攻撃が成功した場合影響
不正な改ざん・サービス妨害の可能性があります。

fnmatch関数のファイル名にシステムがサポートする以上の長いファイル名を渡した場合,バッファーオーバーフローが発生します。システムのfnmatch関数に渡すファイルの長さをチェックしていないことが原因です。

回避策

fnmatch関数に渡すファイル名,パターンにユーザから送信された値を利用しない。利用する場合はファイル名,パターンが合理的な長さかバリデーションする。

リスク

一般のアプリケーションでfnmatch関数にユーザから送られてきた値を利用することはあまり無いと思われます。ただし,利用している場合は必ずバリデーション処理をした値を利用しないと攻撃されるリスクがあります。

著者プロフィール

大垣靖男(おおがきやすお)

University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。
オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。

URLhttp://blog.ohgaki.net/

著書

コメント

コメントの記入