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

**RHEL6/CentOS6 のサポート期限は、2020年11月30日までです。早めに OS リプレイスの計画を立てましょう**

*この記事は [RHEL/CentOS 7のPHP5.4.16 は安全か？](http://qiita.com/nanasess/items/029d96cf6360be867ac8) の RHEL/CentOS 6 版です。*

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

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

って言われます。

確かに、PHP5.3.3 は[2010年にリリースされた](http://php.net/ChangeLog-5.php#5.3.3)とても古いバージョンですし、5.3 系は[2014年8月14日にリリースされた 5.3.29](http://www.jpcert.or.jp/tips/2014/wr143201.html)を最後に公式のサポートを終了しています。

でも、 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 では、パッケージがアップデートされると、メーリングリストに[このような](https://lists.centos.org/pipermail/centos-announce/2015-July/021237.html) メールが流れます。

まず、 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](https://cve.mitre.org/cgi-bin/cvename.cgi?name=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 ディストリビューションの長期サポートとも上手くおつきあいするのも、プログラマーの大切なスキルの一つだと思います。