Edited at

RHEL/CentOS 6のPHP5.3.3 は安全か?

More than 1 year has passed since last update.

この記事は RHEL/CentOS 7のPHP5.4.16 は安全か? の RHEL/CentOS 6 版です。

よく、 CentOS6.x にバンドルされている PHP5.3.3 を使用していると、

「まだ PHP5.3 なんて使ってるの?? セキュリティに対する意識あんの??」

って言われます。

確かに、PHP5.3.3 は2010年にリリースされたとても古いバージョンですし、5.3 系は2014年8月14日にリリースされた 5.3.29を最後に公式のサポートを終了しています。

でも、 CentOS6.x の PHP は、リリース当初の2011年から、 5.3.3 のままです。2015年12月現在でも、 5.3.3 のままです。これには理由があります。

CentOS は Linux の商用ディストリビューションである Redhat Enterprise Linux(RHEL) の、公開されたソースを元にしたディストリビューションであり PHP などのプログラム言語やアプリケーションも、 RHEL のパッケージを元に作成されています。

RHEL は、これら PHP などのパッケージを、独自に保守(ベンダーサポート)しており、何らかの脆弱性が見つかると、適宜アップデートされます。

CentOS も、基本的に RHEL のアップデートポリシーに準拠しており、 6.x は2020年11月30日まではサポートされます。

つまり、 CentOS6.x にバンドルしている PHP5.3.3 は、適切にアップデートしていれば、2020年11月30日まで安心して使うことができます。

では、本当に安心して使えるのか調べてみましょう。

2015年12月5日現在、 CentOS6.x での PHP の最新パッケージは php-5.3.3-46.el6_6 です。

ちなみに、 CentOS では、パッケージがアップデートされると、メーリングリストにこのような メールが流れます。

まず、 PHP の SRPM ファイルを取得します。元になっている RHEL6 の SRPM ファイルは以下にあります。

http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/

この中の php-5.3.3 の SRPM を取得します。

展開してみると、以下のような内容になっています。


php-5.3.3-46.el6_6.src.rpm

macros.php                     php-5.3.3-CVE-2014-3479.patch                                                                                                   

php.conf php-5.3.3-CVE-2014-3480.patch
php.ini php-5.3.3-CVE-2014-3515.patch
php.spec php-5.3.3-CVE-2014-3587.patch
php-4.3.11-shutdown.patch php-5.3.3-CVE-2014-3597.patch
php-5.0.4-dlopen.patch php-5.3.3-CVE-2014-3668.patch
php-5.0.4-tests-wddx.patch php-5.3.3-CVE-2014-3669.patch
php-5.2.0-includedir.patch php-5.3.3-CVE-2014-3670.patch
php-5.2.4-embed.patch php-5.3.3-CVE-2014-3710.patch
php-5.2.4-norpath.patch php-5.3.3-CVE-2014-4049.patch
php-5.3.0-easter.patch php-5.3.3-CVE-2014-4670.patch
php-5.3.0-install.patch php-5.3.3-CVE-2014-4698.patch
php-5.3.0-phpize64.patch php-5.3.3-CVE-2014-4721.patch
php-5.3.0-recode.patch php-5.3.3-CVE-2014-9425.patch
php-5.3.1-systzdata-v7.patch php-5.3.3-CVE-2014-9705.patch
php-5.3.2-CVE-2010-3870.patch php-5.3.3-CVE-2014-9709.patch
php-5.3.2-CVE-2010-4645.patch php-5.3.3-CVE-2015-0232.patch
php-5.3.3.tar.bz2 php-5.3.3-CVE-2015-0273.patch
php-5.3.3-CVE-2006-7243.patch php-5.3.3-CVE-2015-2301.patch
php-5.3.3-CVE-2010-2950.patch php-5.3.3-CVE-2015-2783.patch
php-5.3.3-CVE-2010-3709.patch php-5.3.3-CVE-2015-2787.patch
php-5.3.3-CVE-2010-3710.patch php-5.3.3-CVE-2015-3329.patch
php-5.3.3-CVE-2010-4156.patch php-5.3.3-CVE-2015-4021.patch
php-5.3.3-CVE-2011-0708.patch php-5.3.3-CVE-2015-4022.patch
php-5.3.3-CVE-2011-1148.patch php-5.3.3-CVE-2015-4024.patch
php-5.3.3-CVE-2011-1398.patch php-5.3.3-CVE-2015-4026.patch
php-5.3.3-CVE-2011-1466.patch php-5.3.3-aconf26x.patch
php-5.3.3-CVE-2011-1468.patch php-5.3.3-bug52636.patch
php-5.3.3-CVE-2011-1469.patch php-5.3.3-bug53141.patch
php-5.3.3-CVE-2011-1470.patch php-5.3.3-bug54268.patch
php-5.3.3-CVE-2011-1471.patch php-5.3.3-bug66762.patch
php-5.3.3-CVE-2011-1938.patch php-5.3.3-bug69085.patch
php-5.3.3-CVE-2011-2202.patch php-5.3.3-bug69152.patch
php-5.3.3-CVE-2011-2483.patch php-5.3.3-bug69353.patch
php-5.3.3-CVE-2011-4153.patch php-5.3.3-copy.patch
php-5.3.3-CVE-2011-4566.patch php-5.3.3-errorhandler.patch
php-5.3.3-CVE-2011-4885.patch php-5.3.3-extrglob.patch
php-5.3.3-CVE-2012-0057.patch php-5.3.3-fileinfo.patch
php-5.3.3-CVE-2012-0781.patch php-5.3.3-getmodinit.patch
php-5.3.3-CVE-2012-0789.patch php-5.3.3-gnusrc.patch
php-5.3.3-CVE-2012-0830.patch php-5.3.3-imap.patch
php-5.3.3-CVE-2012-0831.patch php-5.3.3-odbc.patch
php-5.3.3-CVE-2012-1172.patch php-5.3.3-pdopgsql.patch
php-5.3.3-CVE-2012-1571.patch php-5.3.3-pdo-53551.patch
php-5.3.3-CVE-2012-1823.patch php-5.3.3-pdo-overflow.patch
php-5.3.3-CVE-2012-2143.patch php-5.3.3-r305043.patch
php-5.3.3-CVE-2012-2336.patch php-5.3.3-rfc2616.patch
php-5.3.3-CVE-2012-2386.patch php-5.3.3-setdate.patch
php-5.3.3-CVE-2012-2688.patch php-5.3.3-varnegidx.patch
php-5.3.3-CVE-2013-1643.patch php-5.3.3-zendgc.patch
php-5.3.3-CVE-2013-4113.patch php-5.3.3-zipmemset.patch
php-5.3.3-CVE-2013-4248.patch php-5.3.18-fpmcovscan.patch
php-5.3.3-CVE-2013-6420.patch php-fpm.conf
php-5.3.3-CVE-2013-6712.patch php-fpm.init
php-5.3.3-CVE-2014-0237.patch php-fpm.logrotate
php-5.3.3-CVE-2014-0238.patch php-fpm.sysconfig
php-5.3.3-CVE-2014-1943.patch php-fpm-5.3.18.tar.bz2
php-5.3.3-CVE-2014-2270.patch php-fpm-www.conf
php-5.3.3-CVE-2014-2497.patch

php-5.3.3 の標準アーカイブの他、さまざまなパッチが含まれていることがわかります。

CVE とついているのが、セキュリティパッチです。

この中の CVE-2015-4021 を見てみると、 PHP5.6.9, 5.5.25, 5.4.41 で修正された不具合がバックポートされているのがわかります。


php-5.3.3-CVE-2015-4021.patch

Test case removed as binary patches are not supported


From c27f012b7a447e59d4a704688971cbfa7dddaa74 Mon Sep 17 00:00:00 2001
From: Stanislav Malyshev <stas@php.net>
Date: Wed, 29 Apr 2015 22:04:20 -0700
Subject: [PATCH] Fix bug #69453 - don't try to cut empty string

---
ext/phar/tar.c | 2 +-
ext/phar/tests/bug69453.phpt | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
create mode 100644 ext/phar/tests/bug69453.phpt

diff --git a/ext/phar/tar.c b/ext/phar/tar.c
index ca8eafc..d6d63e6 100644
--- a/ext/phar/tar.c
+++ b/ext/phar/tar.c
@@ -425,7 +425,7 @@ bail:
entry.filename_len = i;
entry.filename = pestrndup(hdr->name, i, myphar->is_persistent);

- if (entry.filename[entry.filename_len - 1] == '/') {
+ if (i > 0 && entry.filename[entry.filename_len - 1] == '/') {
/* some tar programs store directories with trailing slash */
entry.filename[entry.filename_len - 1] = '\0';
entry.filename_len--;
--
2.1.4


このように、適切にアップデートされた CentOS6.x の PHP5.3.3 は安全です。

同様に、 CentOS7.x の PHP5.4.16 も2024年6月30日までサポートされます。

プログラマーの立場からすると、最新のプログラム構文が使えないのは、ストレスに感じるかもしれません。

常に新しいバージョンにアップデートできれば良いのですが、コストやリソースの問題もあり、すべての環境でアップデートできるとは限りません。

Linux ディストリビューションの長期サポートとも上手くおつきあいするのも、プログラマーの大切なスキルの一つだと思います。