詳細は、修正版が出る前にリークしました。攻撃者は、公式発表の数日前からこのバグを探っていました。
全員に公平な猶予を与えるはずだった協調的な脆弱性開示(コーディネート・ディスクロージャー)は、公の場で崩れました。
PHPプロジェクトとセキュリティベンダーが、誰が何をいつ公開したのかをめぐって責任を押し付け合ったのです。
影響の大きさは、いくら強調してもしすぎることはありません。サーバーサイド言語が判明しているWebサイトのおよそ70%でPHPが使われており、WordPressのブログからDrupal製の政府ポータル、ECサイトまで幅広く動いています。
研究者は、130万台を超えるインターネット公開ホストが脆弱である可能性があると推定しました。Amazonは開示の4日前にエクスプロイトの試行を記録し、Cloudflareは攻撃の兆候を確認しました。英国の国家サイバーセキュリティセンター(NCSC)は、各組織にアップデートするか、PHPをオフラインにするよう呼びかけています。
世界中のセキュリティチームが同じ疑問を抱えていました。自社は影響を受けるのか。パッチはあるのか。そもそも、誰も触りたがらない古いサーバーにインストールできるのか。
この最後の疑問に対する答えは、インターネットの非常に広い範囲で、チェコ共和国で作業する1人のボランティア、Ondřej Surýに懸かっていました。
これは彼の物語であり、PHP2Shellの1週間が実際にどう展開したかの記録です。
20年にわたる地道な仕事
Ondřejは20年以上にわたり、PHPのソースコードをDebianとUbuntu向けのインストール可能なパッケージに仕立て、deb.sury.orgで公開してきました。システム管理者は彼のリポジトリを追加し、apt upgradeを実行するだけで、コンパイルなしに最新で安全なPHPを入手できます。数百台、数千台規模のサーバーを抱える環境では、数分でパッチを当てられるか、数週間かかるかを分ける違いになります。
これは本業ではありません。Ondřejは、BIND 9を開発する非営利組織Internet Systems Consortium(ISC)でDirector of DNS Engineeringを務め、チェコ共和国に住んでいます。PHPプロジェクトに雇用されているわけではありません。公開しているオープンソースのPHPリポジトリはボランティア活動で、その多くは長年かけて自動化されてきました。運営はGitHub Sponsorsを通じた寄付に支えられています。
PHP2Shellの1週間
Calif、OpenAI、Wizの研究者が、PHPコアの2つの脆弱性を発見しました。CVE-2026-109618とCVE-2026-109619で、CVSS v4のスコアは9.2です。2つを組み合わせると、攻撃者は細工したリクエストを送るだけで、サーバー上でコードを実行できます。PHPプロジェクトは協調リリースを計画し、LinuxディストリビューションやパッケージャーにはOndřejも含めて、パッチが事前に共有されました。ところが、その計画は崩れました。
その時点で、130万台を超えるインターネット公開ホストが危険にさらされていると推定されていました。Ondřejは後に、事前に修正を受け取っていたからこそ、作業を現実的な範囲に収められたと語っています。彼は慌てませんでした。解くべき問題として淡々と取り組んだのです。
誰もやらないバージョンにパッチを当てる
公式の修正が対象としたのは、PHP 8.2から8.5までです。7.4から8.1のブランチにはPHPセキュリティチームから最小限のソースバックポートが出ただけで、5.4から7.3には何も提供されませんでした。それでも、脆弱なコードパスはPHP 5.4まで遡り、現役の本番サーバーの多くがいまだにそれらのバージョンで動いています。
Ondřejは、それでも修正を出しました。彼のリポジトリは、サポート対象のリリースと並べて、PHP 8.1、8.0、7.4、7.3、7.2、7.1、5.6のバックポート版ビルドを公開しました。変更履歴には「Backported from 8.2.35」と記されています。ある管理者はXで、反応をこう表現しました。誰も予想しないなか、前触れもなく、ŌndřejがPHP 5.6と7.4にパッチを当て、DebianとUbuntuのサーバーを動かすすべての人を救った、と。
「インターネットの3分の1が、もう永久に壊れたままだ」という主張が出回ったときも、Ondřejは反論しました。古いバージョンにもパッチは当てられる。自分はたった今それをやった、というのが彼の言い分です。
1人にかかる、あまりに大きな重み
この1週間は、居心地の悪い事実をはっきり見せました。Web全体を支えるソフトウェアが、しばしば無報酬の少数の人々に依存しているという事実です。Ondřejは、最も恩恵を受けている企業が、自分たちの依存するメンテナーの報酬を分担する、より公平な仕組みを望んでいると語っています。将来にも目を向けており、PHPLTSプロジェクトのパートナーであるFreexianのRaphaël Hertzogと後継体制について話し合ってきました。何が起きても作業が続けられるようにするためです。
「PHPセキュリティチームが事前に修正をパッケージャーと共有してくれたおかげで、リリース日が動いた後でも、ビルドを準備できていました。古いブランチは手間がかかりましたが、パッチは当てられますし、実際にまだ使っている人がいます。だから当てました。この件から生まれてほしいのは、次の緊急事態が起きてからではなく、起きる前に、頼っているメンテナーを支える企業が増えることです。」
— Ondřej Surý、deb.sury.orgメンテナー
「PHPを動かしている人の大半は、Ondřejの名前を聞いたことがありません。それこそが優れたインフラのあり方です。本当に必要になる瞬間まで、目に見えません。今月がその瞬間で、彼は準備ができていました。オープンソースの世界は彼に感謝すべきですし、感謝以上に、支援すべきです。HeroDevsがオープンソースのメンテナーを支援しているのは、そのためです。私たちのビジネスは彼らの仕事に依存しています。次のインシデントが起きたとき、インターネットはまたOndřejのような人々を頼りにすることになります。」
— Rob Nalen、COO、HeroDevs, Inc.
PHP2Shellは、この種のインシデントの最後にはなりません。Mythos以後の世界では、AIモデルが基盤ソフトウェアに潜む10年前のバグを、かつてない速さで見つけられます。そして探しているのは、防御側だけではありません。開示までの猶予は短くなり、リークはより頻繁に起きるでしょう。そのしわ寄せは、修正を「世界が実際にインストールできるもの」へ変える少数のメンテナーとパッケージャーに、これからも集中し続けます。
だからHeroDevsは、オープンソースの中核にいるコミュニティとメンテナーの支援を誇りに思っています。その支援は、次の危機が起きてから慌てて整えるのではなく、起きる前に用意しておく必要があると考えています。
Open Source Sustainability Fundを通じて、HeroDevsはOndřejのFeatured sponsorになっています。DebianやUbuntu上でPHPを運用している組織は、GitHubで彼をスポンサーすることもできます。
レガシーPHPを運用していて、サポートが必要な組織には、HeroDevsのNever-Ending Support(NES)for PHPがあります。End-of-LifeのPHPバージョン向けに、継続的なセキュリティ修正を提供します。
お問い合わせ
本記事の内容やHeroDevsのソリューション(NES等)について、日本語でのお問い合わせに対応しています。お気軽にHeroDevsお問い合わせページからご連絡ください。