CentOSのパッケージとセキュリティ
CentOSのパッケージのバージョンとセキュリティの関係について、いままであまりちゃんと調べてなかったので確認してそこそこまとめました。CentOS6で、CentOS公式のbaseレポジトリからphpをインストールするとphpのバージョン5.3がインストールされます。php5.3はPHPの開発元では2014年の8月14日にEOLを迎えています。
この情報のみでは、CentOS6では開発が終わっているバージョンのphpを配布しているようにみえてセキュリティ的に心配になりますが、CentOSのクローン元であるRedHatは、セキュリティの修正に対してバックポートポリシーを採用しています。
Security Backporting Practice - Red Hat Customer Portal
これはどういうことかというと、セキュリティの脆弱性が発見された際、ソフトウェアのバージョンを上げて修正するのではなくて、セキュリティの修正箇所を既存のバージョンにインポートさせるという運用のようです。こうすることで、バージョンが上がることで生じる互換性の問題を可能な限りなくしてセキュリティの穴を塞ぐことが出来ます。ということで、CentOS6のPHP5.3にもセキュリティパッチが提供されています。phpパッケージの変更履歴を見ると、php5.3がEOLを迎えた2014年8月14日以降もセキュリティの修正パッチが提供され続けていることが分かります。RedhatのRemi Colletさんが、頑張ってphpの修正パッチを当てられていることが分かります。
[vagrant@localhost ~]$ rpm -q --changelog php | head -n 20 * Mon Nov 07 2016 Remi Collet <rcollet@redhat.com> - 5.3.3-49 - fix php-soap fails to connect to HTTPS web service sporadically as stream_socket_enable_crypto() uses NONBLOCK #1283153 * Mon Jul 25 2016 Remi Collet <rcollet@redhat.com> - 5.3.3-48 - don't set environmental variable based on user supplied Proxy request header CVE-2016-5385 * Wed Dec 09 2015 Remi Collet <rcollet@redhat.com> - 5.3.3-47 - fix wrong warning in openssl_encrypt() for missing IV when IV is not required #1260315 - fix segfault's when you try and allocate an SplFixedArray with size >= 9999 #1071344 - segfault in php_pgsql_meta_data CVE-2015-4644 #1234434 - add options to enable TLS in curl #1255920 - fix segfault in gc_collect_cycles #1122681 * Fri Jul 03 2015 Remi Collet <rcollet@redhat.com> - 5.3.3-46 - fix gzfile accept paths with NUL character #1213407 - fix patch for CVE-2015-4024
Remi ColletさんはRemiパッケージのメンテナーで、remiは最新のphpパッケージなどを提供しているようです。
English : FAQ - Remi's RPM repository - Blog
CentOS6のMaintenace Updatesは、2020年11月30日まで提供されるようなので、東京オリンピックまでには余裕を持ってCentOS7に移行したいですね。
ちなみに、最近出てきた脆弱性スキャナのvulsでは、CentOS6のphpパッケージは脆弱性のあるパッケージとして誤検知されるかどうか確認してみました。vagrantでCentOS6.9の環境にvulsをインストールして自分自身をスキャンさせます。phpは最新のパッケージにしています。
toripiyo.hatenablog.com
[vagrant@localhost ~]$ rpm -qa | grep php php-common-5.3.3-49.el6.x86_64 php-5.3.3-49.el6.x86_64 php-cli-5.3.3-49.el6.x86_64 [vagrant@localhost ~]$ vuls report --ovaldb-path /home/vagrant/go/src/github.com/kotakanbe/goval-dictionary/oval.sqlite3 | head -n 20 [Jun 14 14:35:18] INFO [localhost] Validating config... [Jun 14 14:35:18] INFO [localhost] cve-dictionary: /home/vagrant/cve.sqlite3 [Jun 14 14:35:18] INFO [localhost] oval-dictionary: /home/vagrant/go/src/github.com/kotakanbe/goval-dictionary/oval.sqlite3 [Jun 14 14:35:18] INFO [localhost] Loaded: /home/vagrant/results/2018-06-13T13:01:02Z localhost (centos6.9) ===================== Total: 75 (High:24 Medium:51 Low:0 ?:0) 393 installed, 45 updatable CVE-2017-11176 10.0 HIGH (nvd) The mq_notify function in the Linux kernel through 4.11.9 does not set the sock pointer to NULL upon entry into the retry logic. During a user-space close of a Netlink socket, it allows attackers to cause a denial of service (use-after-free) or possibly have unspecified other impact. --- https://nvd.nist.gov/vuln/detail/CVE-2017-11176 https://access.redhat.com/security/cve/CVE-2017-11176 (RHEL-CVE) 10.0/AV:N/AC:L/Au:N/C:C/I:C/A:C (nvd) https://nvd.nist.gov/vuln-metrics/cvss/v2-calculator?name=CVE-2017-11176 7.8/CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (redhat) https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?name=CVE-2017-11176 Confidence: 100 / OvalMatch CVE-2017-18017 10.0 HIGH (nvd) The tcpmss_mangle_packet function in net/netfilter/xt_TCPMSS.c in the Linux [vagrant@localhost ~]$ vuls report --ovaldb-path /home/vagrant/go/src/github.com/kotakanbe/goval-dictionary/oval.sqlite3 2>&1 | grep -i php [vagrant@localhost ~]$
vulsではphpのパッケージは脆弱性のあるものとして誤検知されませんでした。ただ、脆弱性スキャナの中には、php-5.3.3-49.el6.x86_64のパッケージ名のphp-5.3.3の箇所のみを見て脆弱性があると判定するものもあるそうなので注意が必要です。