セキュリティーニュース

PHPのアップロード機能で、セキュリティーホールが見つかったらしい。
安全なディレクトリーに、ファイルをアップロードさせるようにしないといけないと。

http://d.hatena.ne.jp/ockeghem/20110620

PHPにおけるファイルアップロードの脆弱性CVE-2011-2202

 PHPの現行バーション(PHP5.3.6以前)には、ファイルアップロード時のファイル名がルート直下の場合、先頭のスラッシュを除去しないでファイル名が渡される問題があります。CVE-2011-2202として報告されています。

 次バージョンPHP5.3.7のRC1で修正されていることを確認しましたので、PHP5.3.7正式版が公開され次第、できるだけ早期に導入することを推奨します。

概要

 PHPにはファイルアップロードの機能が提供されています。アップロード時のリクエストに付与される元ファイル名は、PHPスクリプトでは、$_FILES[]['name']で受け取れますが、この際にはファイルのディレクトリ名やドライブレター(C:のような)は除去され、ファイル名と拡張子だけがアプリケーションに渡される仕様です。

 しかし、「/upload.png」のようにルート直下のファイル名を指定した場合は、先頭のスラッシュ「/」は除去されず、フルパスでファイル名が渡されます。これがCVE-2011-2202脆弱性です。

この脆弱性の影響

 $_FILES[]['name']が絶対パス名を返した場合、このファイル名の使い方次第では問題になる可能性があります。

 影響がでるPHPスクリプトは以下の条件の両方を満たすものであると考えられます。

 前者は、具体的には以下のようなスクリプトです。

#code(php){{
move_uploaded_file($_FILES["imgfile"]["tmp_name"], $_FILES["imgfile"]["name"]);
}}

対策

 上記の二条件に当てはまるPHPスクリプトは至急対策が必要ですが、CVE-2011-2202以前にWebアプリケーションの脆弱性であるからです。以下の対処を推奨します。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-06-22 (水) 15:36:04