
RHEL、CentOS、Oracle Linux 7 / 6 のサポート終了済み PHP 5.4 / 5.3 パッケージに対する CVE-2026-109618 / CVE-2026-109619(php2shell)の非公式修正
CVE-2026-109618 および CVE-2026-109619(「php2shell」)に対する非公式の修正です。対象は Enterprise Linux 6 および 7 のサポート終了済み PHP パッケージ、すなわち php-5.3.3(RHEL / CentOS / Oracle Linux 6)と php-5.4.16(RHEL / CentOS / Oracle Linux / Scientific Linux 7)です。
PHP は 2026年10月21日に 8.2.35、8.3.36、8.4.27、8.5.12 で両方の脆弱性を修正し、7.4、8.0、8.1 向けのソースバックポートを公開しました。PHP 5 向けには何もリリースされておらず、EL6 / EL7 のベンダーも修正を提供していません。このようなシステムを稼働させ続けなければならない場合に、このプロジェクトは公式の最小修正を移植した再ビルド済みベンダーパッケージを提供します。
これは PHP、Red Hat、Oracle による公式の修正ではありません。 サポート対象の PHP バージョンへ移行できるまでのリスクを軽減するものです。できるだけ早く移行してください。 EL8 / EL9 / EL10 では、代わりにベンダーの更新をインストールしてください(例: ELSA/RHSA-2026:87080、87151、87079)。
php-5.4.16 / php-5.3.3 リリース tarball には適用できません。これらの tarball には、同じコードに対するベンダー後期のセキュリティ修正(例えば multipart ヘッダ解析における CVE-2015-4024)が含まれていないためです。| ディストリビューション | ベンダーパッケージ | このプロジェクトによる修正済みパッケージ |
|---|---|---|
| RHEL / CentOS / Oracle Linux / Scientific Linux 7 | php-5.4.16-48.el7 | php-5.4.16-48.el7.php2shell.1 |
| RHEL / CentOS / Oracle Linux 6 | php-5.3.3-50.el6_10 | php-5.3.3-50.el6_10.php2shell.1 |
リリースサフィックスはベンダーパッケージより上位にソートされ、将来のベンダーエラータ(例えば 48.el7_9.1)より下位になります。そのため、公式修正が登場した場合は通常の更新によってこのパッケージが置き換えられます。
おそらく PHP 7 や 8 ほどではないものの、まだ明確な答えはありません:
php パッケージを CVE-2026-109619 の影響を受けない(「脆弱なコードが存在しない」)と評価しており、CVE-2026-109618 は調査中としています(CSAF VEX)。このプロジェクトは、いずれにせよ公式の緩和策を適用します。すなわち、既知の到達経路だけでなく、安全でないエラーパス自体を除去します。
GitHub Pages 上の署名済み yum リポジトリから:
# EL7
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el7.repo
# EL6
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el6.repo
yum update 'php*' # confirm the signing key: fingerprint under "Signing key" below
service httpd restart # and php-fpm, if you use it
リポジトリにはこのプロジェクトの PHP パッケージのみが含まれており、パッケージとリポジトリの
メタデータの両方が署名されています(gpgcheck=1、repo_gpgcheck=1)。RPM とソース RPM は各
リリースにも署名済みの SHA256SUMS とともに添付されており、
yum localinstall でインストールできます。
./tools/check-patched.sh
インストールされているすべての PHP 5 パッケージを FIXED または VULNERABLE として一覧表示し、PHP CLI が修正済みコードを実行していることを確認し、httpd または php-fpm が更新前に起動されて古いコードを実行し続けている場合は警告します。
この修正は公式の最小限のバックポートに従っており、優雅なエラー処理よりも安全性を優先しています:
memory_limit を超えた場合(またはアロケーションサイズが
オーバーフローした場合)、PHP は Fatal error: ... を stderr(Web サーバーのエラーログ)に出力し、プロセスは即座に終了します。
Apache / php-fpm は新しいワーカーを起動します。シャットダウン関数は実行されず、そのリクエスト内のアップロードの一時ファイルは
削除されません — tmpwatch(EL6)と systemd-tmpfiles(EL7)が時間をかけて /tmp からクリーンアップします。Content-Disposition および Content-Type ヘッダーのみが保持され
(PHP が使用するのはこれらだけです)、新しい php.ini ディレクティブ max_multipart_body_parts がパート数を
制限します(デフォルトは -1 = max_input_vars + max_file_uploads)。zend_mm_safe_error_ex)、既存の API や ABI は変更しないため、
ベンダーパッケージ用にビルドされた拡張機能は引き続き動作します。これは公開された攻撃経路に対する最小限の緩和策であり、PHP 5 の完全なセキュリティアップデートではありません。
ベンダーのソース RPM からビルドされています(SHA-256 は build/build.sh に固定)。spec の変更は 8 行です
(spec/*/php.spec.diff)。
PHP テストスイート(make test、RPM ビルド中に実行)を、同じベンダーパッケージを未修正で再ビルドしたものと比較しました。
新たに発生した失敗は想定どおりのものだけです:
セッションアップロード進捗のテスト(機能無効化)と tests/lang/bug45392.phpt(公式 7.4 パッチと同様に、
致命的エラーメッセージが空行で始まるようになったため)。
| テスト数 | 失敗: ベンダー | 失敗: パッチ適用後 | |
|---|---|---|---|
| EL7, PHP 5.4.16 | 12373 | 14 | 23(アップロード進捗 8 件 + bug45392) |
| EL6, PHP 5.3.3 | 11213 | 55 | 56(bug45392) |
正確な件数はビルド環境によって多少変動します:GitHub ランナーでは SPL のファイルオーナーテスト 2 件
(DirectoryIterator_getOwner/getGroup_basic)も失敗し、time_sleep_until_basic はタイミングに敏感です。
いずれもパッチで変更されたコードには触れていません。
PHP 5.4 パッチは、Amazon Linux 2 の php-5.4.16 向けに同じ修正を独立して移植したものと比較しました:
コアの変更は同一です。相違点は docs/ALTERNATIVES.md に記載されています。
エクスプロイトコードは作成も使用もしていません。パッチはご自身でアップストリームのコミットと照らし合わせてレビューしてください。
ベンダーの状況、プロジェクトの一覧、比較については docs/ALTERNATIVES.md を参照してください。
Docker と、ビルドごとに約 3 GB の空きディスク容量が必要です。
build/build.sh el7 # results in _build/el7/RPMS
build/build.sh el6 # results in _build/el6/RPMS
スクリプトはベンダーのソース RPM をダウンロードし、その SHA-256 を検証したうえで、このリポジトリの spec ファイルとパッチを用いて、固定された Oracle Linux コンテナ内で再ビルドします。
パッケージとリリースタグは次の鍵で署名されています:
pub rsa4096/80797C97A561BC94 2026-10-22 [SC] [expires: 2029-10-21]
2757 B60F D23D ED25 021B BE37 8079 7C97 A561 BC94
uid Oleksii Molchanov (php2shell-eol-backport signing key) <[email protected]>
鍵はこのリポジトリ(RPM-GPG-KEY-php2shell-eol-backport)と keyserver.ubuntu.com にあります。
patches/el7, patches/el6 the fix, as a patch against the vendor source tree
spec/el7, spec/el6 vendor spec files with the patch added, and their diffs
build/ reproducible container build
tools/check-patched.sh check an installed system
docs/ALTERNATIVES.md vendor status, other projects, comparison
SECURITY.md how to report a security problem
バグについては issue を作成してください。パッチ自体のセキュリティ問題については、SECURITY.md を参照してください。
LICENSE.PHP)。ビルドスクリプトとツール: MIT(LICENSE)。Spec ファイルは Red Hat / Fedora のパッケージング(MIT)に由来します。