酒呑ガジェット

〜静かな環境であなたに...こちらは音のでないコンテンツです。〜

【悲報】バグは20年待っていた。世界のWebは、専属1人の肩の上

バグは20年待っていた。世界を支える15人の肩に、遂に回ってきた請求書

2026年10月、世界のWebインフラを揺るがす事件が発生した。その名も「PHP2Shell」。世界中のサーバーで動くプログラミング言語PHPの記憶域を破壊し、外部からリモートコード実行に至る可能性のある重大な脆弱性が、実際に攻撃可能であることをセキュリティ企業が実証してみせたのだ。パニックは一夜にして広まった。だが、この事件の本当の衝撃は技術的な難しさではない。同じ問題が、実に20年以上も前に発見され、内部では「知っている人だけ知っている」状態のまま眠り続けていたという事実である。

無数のソースコードが緑色に流れる画面の前に浮かぶ、ひび割れた南京錠のアイコン

2004年から始まった、知られざる脆弱性の歴史

物語は2004年に遡る。当時PHPのセキュリティ担当だったステファン・エッサー氏は、メモリの枯渇を引き起こし、リモートからの攻撃につながりかねない深刻な脆弱性を発見した。危険性が高すぎるため一般公開はされず、開発チーム内部だけで共有された。しかし、チームはこの問題を「修正しない」という決断を下す。以来、この脆弱性は組織の記憶の中にのみ存在し続けることになる。

2020年、PHPのバグトラッカーに一通の報告が届く。バグ番号78876。長い変数によってメモリが枯渇し、一時ファイルが削除されないという「単なる不具合」だった。正体は、2004年に極秘扱いされた問題の第三者からの再発見である。だがこの時点でも、セキュリティ問題として扱われたものは限られた関係者だけだった。

2024年、ドイツ政府の資金援助を受けてPHPのセキュリティ監査が実施される。監査チームはバグトラッカー上の問題にも言及し、メモリ不足を引き起こすセキュリティ上の脆弱性として正式に報告する。それでもなお、修正は行われなかった。やりたくてもやれない理由が、そこにはあった。

AIとキーパーソンの合流、そして10月の連鎖パニック

転機は2026年7月に訪れる。セキュリティ企業califは、AI企業OpenAIに招かれ、AIを活用してオープンソースソフトウェアの脆弱性を発見し修正までつなげる共同プロジェクトを開始した。califにはステファン・エッサー氏が在籍していた。20年以上前にこの問題を知っていた人物である。7月30日、PHPの現セキュリティチーム責任者と連携が結ばれ、8月1日には研究チームが脆弱性の悪用可能性を実証。修正パッチの配布目標は10月22日に設定された。

そして10月、情報の堰が次々と崩れていく。10月17日、セキュリティ企業のChainguardが非公開の情報チャネルに招待され、修正済みコンテナイメージの準備が進められていた。10月20日、何者かがSNS上で「攻撃可能な脆弱性が存在する」という情報を漏らす。PHP側は対応を急ぎ、パッチ配布予定を22日から21日へ前倒しする。この緊急の連絡を受けたcalifは、予定より早く検証用動画の公開に踏み切り、SNSで流れていた噂が本物であると世界中に見せつけてしまった。慌てたPHP側は深夜に重要インフラ事業者へ緩和策を通知し、動画はほどなく配信停止となる。

決定的な事件は翌10月21日の朝に起きた。Chainguardが、一般アクセス可能な形で修正パッチ入りコンテナイメージを午前7時41分から勝手に配布始めたのだ。取り決めた時間は同日14時だった。修正前と修正後のバイナリの差分は誰でも入手できる状態となり、専門家が解析すれば攻撃手法の復元に使われかねない危険な状況である。PHP公式が用意できたのは昼過ぎの14時。約6時間のタイムラグの末、ようやく正式な修正パッチが各バージョン向けに配布され、事なきを得た。

「AIが脆弱性を発見した」は本当か

事件後、「AIがPHPのコードを勝手に解析して致命的最弱点を見つけた」という物語が独り歩きした。だが、これは正確ではない。AIによる網羅的なセキュリティ監査は以前から何度も行われてきたが、重大な脆弱性にはたどり着いていなかった。今回決定的だったのは、過去を知っているキーパーソンがいて、セキュリティ企業が仮説を立て、それをOpenAIの計算資源で検証したという点である。広大な砂漠に埋もれた針を1本掘り当てたのは、砂漠を知らないAIではなく、地図を覚えていた人間だった。OpenAIのフロンティアモデルが優秀だったのは確かだが、主語はそこではない。

なぜ20年も修正されなかったのか。答えは「お金」

「20年以上前から分かっただろ」という批判は軽い。実際には、放置していたのではない。放置するという選択を、限られた資源の中で下し続けてきたのだ。PHPの専属開発者は確認できる範囲でわずか1人。パート契約の開発者が14人。その他の貢献者はほぼ全員がボランティアである。2024年には有能な開発者からの応募が多数あったが、予算が足りないため採用できなかった。原因は明白に資金難だ。

PHPファウンデーションの資金源はスポンサーと寄付だ。最上位のプラチナコースは年間10万ドルで、登録企業は4社。ゴールドは2社にとどまる。日本企業もシルバーコースに名を連ねるが、巨額の恩恵を考えれば心もとない。個人寄付は月5ドルから。開発者が守るべきバグレポートは常時無数に積み上がっており、1箇所を直せば芋づる式に他箇所への影響をテストしなければならない。実際に攻撃可能か分からない脆弱性に人手を割けるほど、現場は甘くない。仮にMicrosoftのフルタイム開発者が8万人規模だったという比較を引くまでもなく、15人前後の非正規中心のチームが世界のWebインフラを支えている構図は、あまりにも危うい。

「Rustで書き直せば解決」の危うさ

事件のたびに登場する「Rustで書き直せばいい」という声。しかし問題は言語ではなくロジックである。例えば銀行の送金処理をイメージしてほしい。送金元の残高を減らす処理は成功したが、送金先が存在しなかったため残高を増やす処理がスキップされ、エラーも出ず、そのまま「正常終了」する。文法が正しくても論理が間違っていれば、プログラムは書かれた通りに忠実に動いてしまう。これをCからRustへ機械的に移植しても、バグまでそっくりそのまま移住するだけだ。

さらに恐ろしいのは「バグの後方互換性」である。何十年も巨大化し続けたソフトウェアでは、古いバグに依存して動くコードがどこかに必ず生まれる。Linuxカーネルのリーナス・トーバルズ氏は「呼び出す側がバグに依存するようになれば、そのバグは事実上の仕様になる。正義感で直そうとするな」と語ってきた。修正が壊滅的な互換性破壊を招くからこそ、易々と手を出せないのだ。同氏はAIについても「AIはツールの一つだが、出力されたコードの責任は人間にある。出力したコードを完全に理解できないなら受け入れられない」と明言している。

Linuxとオープンソースの明暗

対照的なのがLinuxカーネルだ。リリースに2,000人超の開発者が参加し、その雇用主はIntel、IBM、Google、NVIDIA、Qualcommなど200以上の企業に上る。各社が自社の商売のために給料を払って開発させており、2026年3月にはGoogle、Microsoft、AmazonらがLinuxファウンデーションへ1,250万ドルを提供した。自分たちの利益のために金を払う場所と、そうでない場所。その差が、そのままセキュリティの差になっている。

一方、資金に支えられない著名ライブラリでは、 downloads数十億回を誇るJavaScriptライブラリの作者が企業からの無言の圧迫に疲れ果て、自らのコードに無限ループを仕込んで意図的に破壊した事件や、圧縮ライブラリxz Utilsのメンテナンス引き継ぎに偽装した国家レベルのバックドア侵入事件も起きた。いずれも世界経済の屋台骨を揺るがしかねない事案だった。社会のインフラを、感謝されず報酬も得ないボランティアの献身に丸投げする構造が続く限り、今回のPHP2Shellは次回の事故の「序章」にすぎない。

ネットの反応

「20年前から知ってたくせに放置してたなんて正気か?事故が起きる前は全員無関心だったくせに、起きてからは一番叩くっていうのが一番最悪」

「Rustで書き直せばいいは魔法の呪文じゃない。バグは言語じゃなくて設計にある。移植のコストと後方互換の地獄をまったく見ていない」

「専属1人+パート14人で世界のWebを支えてるって、もう慈善事業の域でしょ。使ってる企業は年間10万ドルすらケチってるのに」

「AIが怖いんじゃない。過去を知っている人間が辞めて、資金も人もいない状態で何十年も積み増したコードベースが怖いんだ」

「Chainguardの6時間早い配布が一番ヒヤヒヤした。修正の前後両方ばら撒いたら差分解析で攻撃再現されるぞ…」

AIの所感

PHP2Shell事件は、技術の問題というより社会の設計ミスの結末に見える。危険は20年前から既知で、関係者はその重さを理解していた。それでも修正されなかったのは、世界の富を生み出すWeb企業たちが、自分たちが住む地図の裏側にある維持コストを、誰にも払わせてこなかったからだ。AIが計算資源として使われ、過去を知る個人が接続されたことで初めて攻撃可能性が証明されたという経緯は、AI時代のセキュリティが「ツール」ではなく「文脈と記憶」で決まることを示している。オープンソースの共有の豊かさは人類の誇りだが、維持する責任が誰も負担しない共有地として放置されたままだ限り、次のPHP2Shellは必ず来る。使う企業が一社ずつわずかな負担を分担すれば成立する話なのに、誰も手を挙げない。その集団の無策さこそが、今回最大の脆弱性だったと言える。

-パソコン