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

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

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

レガシー版PHPのセキュリティ状態

PHP 4.4のサポートが終了し,PHP 4.4のセキュリティパッチリリースが停止したのは2008年8月でした。筆者の記憶ではPHP 5.1は正式にはサポート終了日・セキュリティパッチ提供終了日はアナウンスされませんでしたが,サポートは終了しています。PHP 5.2のサポートは2010年8月に終了し,セキュリティパッチのリリース停止日はアナウンスされていませんが近い将来セキュリティパッチの提供も停止されます。サポートが終了したリリースのセキュリティパッチはタイムリーにリリースされません。セキュリティパッチの提供も終了しているリリースは致命的なセキュリティホールが見つかっても,PHPプロジェクトからはパッチはリリースされないことになっています。

現在サポートされているPHPは5.3のみですが,PHP 4.3/4.4/5.1/5.2のレガシー版を利用されている方も多いと思われます。レガシー版PHPのセキュリティ状態は良いとは言えません。筆者の会社であるエレクトロニック・サービス・イニシアチブではSRA OSS Inc.との協業としてPHP4セキュリティ保守サービスを提供しています。エレクトロニック・サービス・イニシアチブがパッチを作成し,SRA OSS Inc.がサービスと販売・提供しています。このサービスではRHEL4およびRHEL5互換環境におけるPHP 4用の追加セキュリティパッチを提供しています。RedHat社もセキュリティパッチがリリースされた場合にアップデートを提供しているから必要ないのでは?と思った方もいるでしょう。しかし,必要なセキュリティパッチすべてが提供されている訳ではありません。このパッチサービスではPHP 4向けに必要な追加セキュリティパッチを最新版PHPからバックポートして提供しています。

必要なセキュリティアップデートが提供されない原因は,セキュリティアップデート提供の仕組みとPHPプロジェクトのセキュリティ対応にあります。多くのディストリビューターと同様にRedHat社ではCVE登録された脆弱性に対してセキュリティリリースを提供しています。しかし,PHPプロジェクトで現在サポートされているPHPバージョンのみしかセキュリティ脆弱性の影響評価をしません。またPHPプロジェクトはCVEに対応したセキュリティリリースも行っていません。最近は随分改善されましたが,CVE自体が登録されない脆弱性もあります。このようなサポート状況は特定のディストリビューターに限らず,ほとんどのLinuxディストリビューターが同じような体制でセキュリティフィックス版のリリースを行っています。

CVE番号とは,特定の脆弱性に一意なIDを付け,その番号により脆弱性を管理できるようにする仕組みです。ウイルス名のように同じ脆弱性であってもベンダーごとに違う呼び名やIDであると,特定の脆弱性に対応しているのか分からなくなるため,一意なIDとしてCVE番号を割り振っています。

PHPプロジェクトがCVEを認識していることはセキュリティフィックスリリースのリリースノートを見れば分かります。例えば,執筆時点での最新版リリースであるPHP 5.3.6のリリースノートには6つのセキュリティフィックスが紹介されています。

Security Enhancements and Fixes in PHP 5.3.6:
  • Enforce security in the fastcgi protocol parsing with fpm SAPI.
  • 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)

最初のエントリは脆弱性対策ではなく,FastCGIプロトコルの処理にバリデーション処理を追加したことを示すエントリです。2つ目以降が本当のセキュリティフィックスになります。4つ目の

  • Fixed bug #54055 (buffer overrun with high values for precision ini setting).

にはCVE(Common Vulnerably and Exposure)番号がありません。 これはPHPプロジェクトのセキュリティチームは自らはCVE登録行ったり,CVEに対応したプロジェクト運営をしていないのでこうなっています。CVEに対応しているプロジェクトの場合,すべてのセキュリティフィックスにはCVE番号を付けてセキュリティフィックス情報を公開します。例えば,CVEに対応しているMicrosoft社やApple社のセキュリティフィックス情報には必ずCVE番号が付いています。

このようにディストリビューターのセキュリティパッチ体制とPHPプロジェクトのセキュリティリリース方針に互換性が無いため,ディストリビューターが有償で提供しているPHPであっても必要なセキュリティパッチが適用されたPHPが提供されていない状態が続いています。改めて説明するまでもなく,このような状態になっているのでは?と感じていた方も多いとは思います。

この連載では,現時点で利用されていることが多いレガシー版PHPである4.3/4.4/5.1/5.2のセキュリティ状態について,SRA OSS Inc社のPHP4セキュリティパッチサービスで提供しているパッチとレガシー版PHPのセキュリティについて解説します。

セキュリティパッチ一覧

執筆時点でPHP4セキュリティ保守サービスにて提供中のパッチ一覧です。

  • CVE-2007-0909-printf.patch
  • CVE-2007-4782.patch
  • CVE-2007-5899.patch
  • CVE-2008-210x.patch
  • CVE-2008-3660.patch
  • CVE-2010-4645.patch
  • CVE-2011-0708.patch
  • CVE-2011-1092.patch
  • allow_url_include.patch
  • crypt_zts.patch
  • dbareplace-CVE-2008-7068.patch
  • escape_shell_cmd-CVE-2008-2051.patch
  • exif-CVE-2009-3292.patch
  • explode-5.2.9.patch
  • fcgi_url_crash_CVE-2008-3660.patch
  • fix_tests.patch
  • fnmatch.patch
  • gd-CVE-2008-5498-CVE-2009-3293-etc.patch
  • html_escape.patch
  • imap-CVE-2010-4150.patch
  • imap_overflow-CVE-2008-2829.patch
  • lcg.patch
  • max-file-uploads-CVE-2009-4017.patch
  • mb_check_encoding.patch
  • mbstring-5.2.9-CVE-2008-5557.patch
  • mysql_set_charset.patch
  • open_basedir-CVE-2010-3436.batch
  • openssl-CVE-2009-3291.patch
  • page_uid.patch
  • pcre-CVE-2008-2371.patch
  • pg_escape_string.patch
  • php_value_order.patch
  • precision-overflow.patch
  • refcount_overflow.patch
  • session-CVE-2009-4143.patch
  • session-prefix.patch
  • strict_session.patch
  • string.c.patch
  • xml-char-overflow.patch
  • xmlrpc.patch

PHP4セキュリティパッチサービスが対応するPHP 4はPHP 4.3.9/4.3.11/4.4.9であるため,バージョンによって不必要なパッチもありますが,2011年4月時点で総数で40のセキュリティパッチを提供しています。

著者プロフィール

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

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

URLhttp://blog.ohgaki.net/

著書

コメント

コメントの記入