
10月21日、依存関係をめぐって対照的な出来事が2つ重なりました。PHP の重大な脆弱性 PHP2Shell では、すぐに修正版へ更新する必要がありました。一方、同じ日に PyPI で公開された LiteLLM 1.107.0 は改ざんされており、取り込まないことが一番の防御でした。
PHP は、2件の重大な脆弱性(CVE-2026-109618、CVE-2026-109619)を修正したリリースを公開しました。PHP2Shell と呼ばれるこれらの脆弱性は、どちらも CVSS v4.0 のスコアが 9.2 で、認証なしでリモートからコードを実行される恐れがあります。
CVE-2026-109618 は、メモリ不足が起きると、内部のリクエストデータの初期化が終わらないうちに PHP の処理が中断されてしまう問題です。CVE-2026-109619 は、リクエストの内部状態がメモリの解放後も参照できるまま残ってしまう問題で、同じワーカーが後から処理するリクエストに古い状態が使われる恐れがあります。
PHP の公式告知も「完全な緩和策はない。更新せよ」と、いつになく単刀直入でした。
修正版は PHP 8.2.35、8.3.36、8.4.27、8.5.12 です。ソースからビルドしているユーザや、LTS ベンダーのサポートを受けていないユーザ向けには、7.4、8.0、8.1 への最小限のバックポートもソースで公開されています。Debian も同日の日本時間23時ごろには、両方の CVE を修正した php8.2 8.2.35-1~deb12u1 を bookworm-security に取り込んでいます。
StableBuild は、Debian、Ubuntu、Alpine のパッケージリポジトリのスナップショットを毎日保存しています。修正版が出る前の日付に固定したビルドは、当然ながら修正前の php8.2 を使い続けます。
修正版の 8.2.35-1~deb12u1 は、固定日時 2026-10-22T08:40:01Z のスナップショットに含まれています。固定日時をここまで進めて再ビルドし、テストします。問題がなければ、以降はこのスナップショットを基準に同じビルドを再現できます。PHP2Shell のような脆弱性では、こうして依存関係を意識的に新しくしていく必要があります。
LiteLLM のインシデントレポートによると、PyPI に公開された 1.107.0 は7つの wheel ファイルすべてが改ざんされており、認証情報を盗むマルウェアと、リモートからコードを実行するための仕組みが仕込まれていました。
wheel がアップロードされたのは日本時間の20時39分から20時40分にかけてで、22時23分までには PyPI から削除されています。公開されていたのは、わずか103分ほどでした。
LiteLLM の説明では、攻撃者は不正に入手した開発者の GitHub 認証情報を使ってリリースパイプラインを書き換え、悪意のあるリリースを承認していました。GitHub 上の公式 v1.107.0 タグに問題はなく、PyPI に上がったファイルは、攻撃者が管理するリポジトリからビルドされたものでした。
StableBuild の PyPI スナップショットを10月20日に固定していれば、ビルドから 1.107.0 はそもそも見えません。依存関係は、固定した日付時点の PyPI の状態をもとに解決されるからです。
依存関係のクールダウンも、まさにこうした事態に備える機能です。新しく公開されたパッケージは、設定した時間が経つまでビルドで使えないようにしておけます。クールダウンを2時間にしていれば、1.107.0 は待機中のまま削除され、ビルドに入ることはありませんでした。
StableBuild Enterprise では、SBOM のエクスポート、セキュリティスキャン、依存関係のクールダウンを利用できます。SBOM でビルドに含まれる依存関係を一覧にし、セキュリティスキャンでその一覧に脆弱性情報を加え、クールダウンで新しいバージョンがビルドに入るまでの時間を調整します。
更新すべきか、待つべきか。対応は正反対ですが、どちらの場合も再現可能なビルドがあれば出発点ははっきりしています。今のビルドがどの依存関係でできているかを確かめたうえで、意図したとおりに依存関係を変え、変えた後の状態もそのまま再現できます。
ビルドに入る依存関係をもっと細かく管理したい場合は、StableBuild Enterprise について support@stablebuild.com までお気軽にご相談ください。