先日、CVE-2023-6551 として PHP のファイルアップロードライブラリ「class.upload.php」のクロスサイトスクリプティング脆弱性が発表されたので、使用しているプログラムを今一度確認しました。
幸い、外部ユーザーがアップロードする箇所では使用していなかったし、ちゃんと検証していたので、特に問題はありませんでした。
この脆弱性は、MIME タイプを評価するクラスが適正に機能しないことがあるというものです。
例えば、
$handle = new Upload($file, 'ja_JP');
$handle->allowed = array('image/gif');
と設定していても、中には悪意のあるファイルが通過してしまうことがあります。
.html などがアップロードされてしまうと、開いたときに中に書いてあるスクリプトが実行されてしまう可能性があります。
※ プログラムはまだ読んでいません(おい)
対処法
まだ詳細は調査中とのことですが、とりあえず記載されていた対策をまとめておきます。
レスポンスに想定される MIME タイプを指定する
「.html」で保存されたファイルは通常 HTML ファイルとしてレスポンスされますが、システム側で Content-Type ヘッダーで「image/png」を送っておけば、ブラウザではスクリプトが実行されずに済みます。
アップロードできる拡張子を限定する(軽減策)
$handle->allowed = array('png');
と直接拡張子を指定すると、それ以外の拡張子では保存されなくなります。