【ITニュース解説】The PHP2Shell Postmortem: What CVE-2026-109618 and CVE-2026-109619 Actually Tell Us
2026年11月05日に「Dev.to」が公開したITニュース「The PHP2Shell Postmortem: What CVE-2026-109618 and CVE-2026-109619 Actually Tell Us」について初心者にもわかりやすく解説しています。
ITニュース概要
PHPに認証不要な深刻な脆弱性が見つかった。多くのWebサイトが影響を受け、パッチ公開前に攻撃が始まっていた。古いPHPバージョンには修正が提供されず、システム全体の更新が必須。同様のメモリ関連バグは長年繰り返されており、根本的な対策が課題となっている。
ITニュース解説
PHPのウェブサイトを動かす基盤となるプログラムに、今回「PHP2Shell」と呼ばれる非常に深刻な二つの脆弱性(CVE-2026-109618とCVE-2026-109619)が発見された。この脆弱性は、「プレ認証リモートコード実行」(Pre-auth Remote Code Execution)と呼ばれる種類のものであり、その性質上、システムエンジニアを目指す皆さんにとって、特に注目すべき事例と言える。
プレ認証リモートコード実行とは、攻撃者がウェブサイトにログインしていなくても、特定のHTTPリクエストを送るだけで、そのサーバー上で任意のコードを実行できてしまうという非常に危険な状態を指す。通常、多くの脆弱性は、ユーザーがログインした後や、何らかの認証を通過した後でなければ悪用できない場合が多い。しかし、PHP2Shellのようなプレ認証の脆弱性は、そのような防御策を一切すり抜けてしまうため、ウェブサイト全体が外部からの攻撃に対して無防備な状態に置かれる。攻撃者は、ユーザー名やパスワードを盗む必要もなく、特定のウェブページにアクセスするだけでも、サーバーの制御を奪うことが可能となるのだ。サーバーが乗っ取られれば、ウェブサイトの改ざん、データの盗難、さらにはそのサーバーを踏み台にした他のシステムへの攻撃など、深刻な被害に繋がりかねない。
この脆弱性は、PHPの内部処理における「Use-After-Free」というメモリ管理のバグに起因している。プログラムがメモリを確保し、その使用が終わると解放する、という一連の処理の中で、本来解放済みのメモリ領域を再び参照してしまい、その結果、予期せぬ動作を引き起こす現象だ。攻撃者はこの脆弱性を巧みに利用し、プログラムの実行フローを乗っ取り、任意のコードを実行する。通常、PHPはウェブサーバー上で「www-data」といったユーザー権限で動作するため、攻撃者はこの権限でサーバー上で活動を始めることになる。
影響範囲は非常に広く、インターネット上の多くのウェブサイトがPHPで構築されているため、大きな脅威となった。特に、WordPress、Drupal、Joomlaといった、世界中で広く利用されている主要なコンテンツ管理システム(CMS)もPHPを基盤としている。これらのCMSサイトだけで、PHPで動くウェブサイト全体の約70%を占めるとも言われているため、今回の脆弱性の影響は計り知れない。
さらに深刻なのは、PHPのサポートが終了している古いバージョン(PHP 5.xから8.1まで)を使用しているシステムだ。今回の脆弱性に対する修正パッチは、現在サポートされている最新の四つのPHPバージョン(8.5.12 / 8.4.27 / 8.3.36 / 8.2.35)に対してのみ提供された。つまり、もしあなたが古いPHPバージョンを本番環境で運用している場合、この脆弱性に対する修正プログラムは一切提供されない。これは、もはや「脆弱性を軽減する」というレベルの話ではなく、「システムの根本的なアップグレード計画を今すぐ実行しなければならない」という喫緊の課題を意味する。サポート切れのソフトウェアは、今後発見されるいかなる脆弱性に対しても修正が行われないため、非常に高いリスクを抱えることになる点を理解しておくべきだ。
この脆弱性の発覚経緯と攻撃者の行動パターンも、今回の事例から学ぶべき重要な点を示している。AWSのセキュリティチームが運用する「MadPot」というハニーポット(攻撃者を誘い込むための仮想的なおとりシステム)が、パッチ公開の4日前の10月17日に、この脆弱性を悪用する異常なHTTPリクエストを検知した。このリクエストは、認証なしでいきなり脆弱なパスをピンポイントで突いており、一般的な攻撃手法に見られるような、大量の試行錯誤やスキャン活動の痕跡は一切なかった。この「的確な一撃」は、攻撃者が脆弱性の詳細なトリガーパターンやメモリの内部構造を事前に完全に把握していたことを強く示唆している。つまり、パッチが公開されるよりはるか以前から、少なくとも一人の、あるいは一つの組織の攻撃者が、この脆弱性を悪用する準備ができており、実際に攻撃を開始していた可能性が高いということだ。
そのため、もしあなたがシステムの管理者として攻撃の痕跡を調査する場合、パッチが公開された10月21日以降のログだけを見るのではなく、AWSが攻撃を検知した10月17日以降のログまで遡って確認する必要がある。パッチ公開後のログは、広く出回った攻撃コードを使ってスキャンしている「一般的な攻撃者」の活動が多くなるが、パッチ公開前のログには、脆弱性の詳細をいち早く掴んでいた「洗練された攻撃者」の重要な痕跡が隠されているかもしれないからだ。
情報公開のプロセスにおける問題も浮上した。本来、セキュリティ脆弱性の情報は、「協調的開示」(Coordinated Disclosure)というプロセスを経て公開される。これは、脆弱性を発見した側が、開発元や関係者と協力し、パッチの準備が整うまで情報の公開を制限する「エンバーゴ」期間を設け、パッチが提供されたタイミングで一斉に情報を公開することで、ユーザーが安全にシステムを更新できるようにする仕組みだ。しかし、今回のPHP2Shellに関するCVE番号は、パッチ公開予定時刻の約22時間前に、Hacker Newsというウェブサイトのスレッドに漏洩してしまった。この情報漏洩は、本来であれば厳重に管理されるべき情報が、エンバーゴ期間中に特定の経路から外部に出てしまったことを意味する。協調的開示の成否は、情報を共有する関係者の「人数」に大きく依存するという教訓を、今回の事例は私たちに突きつけている。関わる人間が増えれば増えるほど、情報が漏れるリスクは高まるのだ。
さらに深い洞察として、PHPの保守担当者たちが今回のバグを「構造的な失敗」と表現した点も注目に値する。これは、単なる個別のバグではなく、PHPのメモリ管理の設計そのものに根深い問題があることを示唆している。具体的には、「マーク・アンド・フリー・レース」と呼ばれる、確保と解放のタイミングに関する競合状態に起因するUse-After-Freeバグのクラスが、2000年代半ばから20年以上にわたって繰り返し出現しているという。特定の脆弱性(今回のCVE)自体は修正されたが、その根本原因である設計上の問題が解決されていない限り、将来的にも同様の種類のバグが再び現れる可能性が高いということだ。PHPのような、インターネット上で広範に使われている基盤技術において、このような根本的な「構造的欠陥」を修正することは非常に困難で、時間と労力がかかる大掛かりなプロジェクトとなる。しかし、PHPを大規模に利用する企業や開発チームは、この事実を重く受け止め、長期的な視点での対策やアーキテクチャの見直しを検討する必要があるだろう。
システムエンジニアを目指す初心者として、今回の事例から学ぶべき具体的な行動指針は次の通りだ。まず、あなたがもしPHPアプリケーションを開発・運用しているのであれば、必ずサポート対象である最新のPHPバージョン(8.5.12 / 8.4.27 / 8.3.36 / 8.2.35など)への迅速なパッチ適用を最優先で行うべきだ。次に、既に攻撃コードが公開されているため、WAF(Web Application Firewall)を導入し、今回の脆弱性を悪用する既知の攻撃パターンをネットワークの入り口でブロックすることも有効な防御策となる。これは、パッチ適用後も、念のための二重のセキュリティ対策として機能する。そして、システムのセキュリティ監査や攻撃の痕跡調査を行う際は、今回の事例が示すように、脆弱性に関する情報が公開された日だけでなく、それ以前(具体的には10月17日以降)のログまで詳細に確認する習慣をつけることが重要だ。最後に、もしあなたのシステムがサポート終了(EOL)となっているPHPバージョン(5.xから8.1)で稼働している場合は、直ちに最新バージョンへのアップグレード計画を立て、実行に移す必要がある。これは一時的な対策ではなく、システムの長期的な健全性とセキュリティを確保するための、最重要課題だと認識すべきである。
今回のPHP2Shellの事例は、脆弱性の深刻さ、攻撃者の高度な技術、情報公開の難しさ、そしてソフトウェアに潜む根深い構造的問題といった、現代のサイバーセキュリティが直面する多岐にわたる課題を浮き彫りにした。システムエンジニアを目指す皆さんにとって、これらの教訓は将来のキャリアにおいて非常に貴重な指針となるだろう。