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

第1回 レガシーPHPのセキュリティ状態

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

PHP 5.2の状態

PHP 5.2は昨年8までサポートされていたPHPリリースであったので,現在でも多くの方が利用していると思われます。PHP 5.2は一応セキュリティフィックスはリリースされることになっています。サポート状態は悪くないと考えられますが,十分とは言えない状態です。

PHP 5.2と5.3の両方がサポートされていた頃は,PHP 5.2のほうにセキュリティフィックスがリリースされてしばらく経ってから同じ脆弱性に対応した5.3がリリースされる状態が続いていました。この状態はPHP 5.2のサポートが終了するまで続いていたので,PHP 5.3より5.2を利用していたほうがより安全と考えていた方も多いでしょう。先にセキュリティフィックスがリリースされるリリースを使ったほうがより安全であることは説明するまでもないでしょう。筆者も5.2のほうがより安全だと考えていた一人です。

5.2のサポートが終了してすぐにこの状況は逆転しました。PHP 5.3.6で対応した5つの脆弱性

  • Fixed bug #54247 (format-string vulnerability on Phar). (CVE-2011-1153)
  • Fixed bug #54193 (Integer overflow in shmop_read()). (CVE-2011-1092)
  • Fixed bug #54055 (buffer overrun with high values for precision ini setting).
  • Fixed bug #54002 (crash on crafted tag in exif). (CVE-2011-0708)
  • Fixed bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive). (CVE-2011-0421)

のうち,

  • Fixed bug #54247 (format-string vulnerability on Phar). (CVE-2011-1153)

はpharモジュールが無いためPHP 5.2には影響ありません。しかし,以下の4つの脆弱性

  • Fixed bug #54193 (Integer overflow in shmop_read()). (CVE-2011-1092)
  • Fixed bug #54055 (buffer overrun with high values for precision ini setting).
  • Fixed bug #54002 (crash on crafted tag in exif). (CVE-2011-0708)
  • Fixed bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive). (CVE-2011-0421)

はPHP 5.2.17に影響があるセキュリティフィックスです。これら4つともメモリエラーのバグであり,不正なメモリ参照(不正なメモリ参照は場合によってはSSLの秘密鍵も盗まれる)バッファオーバーフロー(場合によっては不正なコードを実行される)問題です。PHP 5.3.6は2011年3月17日にリリースされ,執筆時点で1か月を過ぎましたがこれらの脆弱性に対応したPHP 5.2.18はリリースされていません。

PHP 5.2のSVNリポジトリ(リリースされる場合,PHP 5.2.18となるHEAD)を確認すると

対応済み
  • Fixed bug #54193 (Integer overflow in shmop_read()). (CVE-2011-1092)
未対応
  • Fixed bug #54055 (buffer overrun with high values for precision ini setting).
  • Fixed bug #54002 (crash on crafted tag in exif). (CVE-2011-0708)
  • Fixed bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive). (CVE-2011-0421)

という状況になっています。この現状からPHPプロジェクトとしてはPHP 5.2系の脆弱性には余程のことがない限り対応するつもりが無いと言えるでしょう。

レガシー版であるPHP 5.2を提供しているディストリビューターが対応するかどうかはCVEの説明文を見れば分かります。

Fixed bug #54193 (Integer overflow in shmop_read()). (CVE-2011-1092)
← PHP 5.3.5以下に影響と記載
Fixed bug #54055 (buffer overrun with high values for precision ini setting).
← CVE-2011-1464,PHP 5.3.5以下に影響と記載
Fixed bug #54002 (crash on crafted tag in exif). (CVE-2011-0708)
← PHP 5.3.5以下に影響と記載
Fixed bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive). (CVE-2011-0421)
← PHP 5.3.5以下に影響と記載

すべてPHP 5.3.5以下に影響と記載されています。このため,多くのディストリビューターはPHP 5.2以下のPHPの修正版をリリースすることはないでしょう。

参考:各脆弱性のセキュリティへの影響

Bug #54193 Integer overflow in shmop_read(). (CVE-2011-1092)
整数オーバーフローにより不正なメモリ参照が可能となる。攻撃には攻撃用PHPスクリプトの実行が必要であり,攻撃が成功した場合はさらなる攻撃に必要なメモリ情報(カナリア値やメモリレイアウト情報など)やメモリ内の機密情報(パスワードや証明書など)を盗まれる可能性がある。
Bug #54055 Buffer overrun with high values for precision ini setting. (CVE-2011-1464)
php.ini設定に異常に大きな浮動小数点の精度設定を行うとバッファーオーバーフローが発生する。php.iniファイルや.htaccessファイル,PHPスクリプトから設定変更が可能。任意コードの実行が可能とは思えないが,DoS攻撃に用いられる可能性がある。
Bug #54002 Crash on crafted tag in exif. (CVE-2011-0708)
Exif情報(JPEGファイルなどに保存されているGPSがタグ情報など)に細工したデータを注入することによりPHPがクラッシュする。詳細は不明だが画像処理関連コード内のクラッシュするメモリ問題はリモートからの任意コード実行に利用される場合も多い。
Bug #53885 ZipArchive segfault with FL_UNCHANGED on empty archive. (CVE-2011-0421)
アーカイブ内に不正なファイル名を挿入することによりPHPがクラッシュする。詳細は不明だが圧縮関連コード内のクラッシュするメモリ問題はリモートからの任意コード実行に利用される場合も多い。ただし,この脆弱性を任意コード実行に利用することは非常に難しいと思われる。

まとめ

既にPHP 5.2でも十分なセキュリティパッチが提供されることを期待することは難しいことがお分かり頂けたと思います。PHPプロジェクトとしては今後PHP 5.2用にセキュリティパッチをリリースする予定はありません。PHP 5.3未満をご利用中の方はできるだけ早くPHP 5.3に移行する必要があります。

セキュリティ確保にはまず正しい情報を知ることが必要です。本連載では少しでも安全にPHPを利用したWebサイトを運用できるよう,レガシー版のPHPのセキュリティ状態の概要をセキュリティパッチの解説を取り上げて紹介します。

著者プロフィール

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

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

URLhttp://blog.ohgaki.net/

著書

コメント

コメントの記入