「PHP2shell」で何が起きたのか。PHPを「厨房の料理人」にたとえて説明してみる
はじめに:日本時間2026年10月21日
10月21日の午後から22日の朝にかけて、国内のウェブサービスが次々と止まりました。イラスト投稿サイト、動画サイト、スマホゲーム、ネットショップ、銀行、鉄道会社まで。普段使っているサービスがメンテナンス中で、首をかしげた方もいるかもしれません。
理由はどれも同じでした。「PHP(ピー・エイチ・ピー)」というプログラミング言語1に、深刻な欠陥が見つかったのです。この重大な脆弱性2を「php2shell」3と総称しています。
とはいえ、「そもそもPHPって何?」という方がほとんどだと思います。もしかしたら、「Webサイトは持っているけど、PHPなんて聞いたことがない」と言う方がいらっしゃるかもしれません。
そこでこの記事では、PHPとは何か、今回なにが起きたのかを、できるだけ専門用語を使わずに説明してみます。
よく使われる例なのですが「レストラン」に例えてみたいと思います。
1. ひとことで言うと
PHPは、ホームページを「その場で組み立てる」ための言語です。
ホームページというと、どこかに完成したページが1枚ずつ保存されていて、それが画面に表示される、というイメージがあるかもしれません。もちろん、そういう作りのサイトもあります。
しかし、ブログやニュースサイト、ネットショップの多くは違います。誰かがページを開いたその瞬間に、サーバー(ホームページを置いておくコンピューター)がページを組み立てて、できたてを届けています。その「組み立て係」を担っている代表格が、PHPです。
2. 弁当屋とレストラン
ホームページには、大きく分けて2種類あります。
ひとつは「静的サイト」。これは作り置きの弁当屋です。お弁当はあらかじめ作って棚に並べてあり、お客さんが来たら、それをそのまま手渡します。早くて確実ですが、「ご飯少なめで」といった注文には応えられません。そもそも店の奥に厨房がないのです。
もうひとつは「動的サイト」。こちらは注文を受けてから作るレストランです。お客さんの注文に応じて、厨房で料理人が一皿ずつ仕上げるわけです。手間はかかりますが、そのぶん柔軟です(そうでない店もあるかもしれませんが笑)。
このレストランの登場人物を、ホームページの仕組みに当てはめると、こうなります。
| レストラン | ホームページの世界 |
|---|---|
| 料理人 | PHP |
| 冷蔵庫の食材 | データベース(記事の文章や商品情報、会員情報などを保管しておく場所) |
| レシピ | テーマ4やプラグイン5(サイトの見た目や機能を決めるプログラム) |
| 完成した一皿 | 画面に表示されるページ |
PHPは厨房の料理人。この一点だけ覚えておけば、この先の話はすべて理解できます。
3. ページが開かれた瞬間、厨房では何が起きている?
たとえば、あなたがブログ記事のリンクをクリックしたとします。画面に記事が表示されるまでの、ほんの一瞬のあいだに、厨房ではこんなことが起きています。
- 注文が届く:あなたのスマホやパソコンから、「この記事を見せてください」という注文がサーバーに届きます。
- 料理人が受け取る:PHPが注文票を受け取ります。
- レシピを開く:PHPは、テーマやプラグインに書かれた手順を読みます。「見出しはここ、本文はここ、サイドバーには人気記事を並べる」といった段取りです。
- 冷蔵庫から食材を出す:データベースから、その記事の本文、投稿日、関連記事などを取り出します。
- 盛り付けて出す:レシピどおりに組み立てたページを、あなたの画面に届けます。
- 調理台を片付ける:一皿出し終えたら、使った道具や材料を片付けて、次の注文に備えます。
これを、注文が来るたびに毎回くり返しています。人気サイトなら、一秒間に何十、何百という注文をさばいているわけです。
最後の「片付け」は地味ですが、覚えておいてください。
ここが綺麗になっていないと、せっかくの料理が盗まれたり、腐って食中毒を起こすことにつながります。
今回の騒動の震源地は、まさにここでした(詳しくは後述します)。
4. なぜPHPはここまで広まったのか
PHPの始まりは1990年代半ば。ある技術者が、自分のホームページを管理するために作った小さな道具でした。もともとの名前は「Personal Home Page」。個人のホームページ用、という素朴な出自だったといえます。
それから約30年。PHPは世界中のウェブサイトを支える、最も普及した「厨房の料理人」になりました。理由は大きく3つあります。
- 覚えやすい:ホームページの文章の中に、少しずつプログラムを書き足していける。初心者でも始めやすい言語でした。
- どこでも雇える:安価なレンタルサーバー(ホームページを置く場所を月額で貸すサービス)の多くが、最初からPHPを使える状態で提供しています。料理人つきの貸し厨房のようなものです。
- 人気のレシピ集がPHP製:世界中で使われているCMS(専門知識がなくてもブログやホームページを更新できる仕組み)の多くが、PHPで動いています。WordPress、Drupal、Joomla6といった有名どころは、いずれもPHPが料理人です。
人気のレシピ集が、PHPという料理人を前提に書かれている。だから、レシピ集を使う店が増えるほど、PHPも広まっていきました。
裏を返すと、PHPに欠陥が見つかれば、その影響は世界中の厨房に一斉に及びます。今回の騒ぎが大きくなったのは、このためです。
5. 今回の騒動を、レストランで振り返る
今回見つかった欠陥は2つ。どちらも危険度は10点満点中9.2という、最高レベルに近い評価です。しかも、ログイン7もパスワードも不要で、外部からリモート(遠隔操作)され、サーバー上で好きなプログラムを動かされるおそれがありました。
何が起きたのか(日本時間)
| 日時 | 出来事 |
|---|---|
| 10月20日 | PHPの開発チームが、重大な欠陥2件の修正版を翌日に出すと予告 |
| 10月20日 | 予定より早く、欠陥の情報が外部に流出 |
| 10月21日 夕方 | 修正版の公開を待たずに、攻撃とみられる通信が海外で観測される |
| 10月21日 16時 | 国内大手レンタルサーバーが、予防措置として公式サイトや管理画面8を一時停止(不正アクセス9によるものではないと説明) |
| 10月21日 23時ごろ | 修正版を公開 |
本来は、修正版の公開と欠陥の発表を同時に行う段取りでした。ところが情報が先に漏れたため、各社は修正版が出る前から身構えることになりました。冒頭で触れた一斉メンテナンスは、「やられたから止めた」のではなく、「やられる前に止めた」ものです。
欠陥の正体:パンクした厨房の「片付け忘れ」
3章で、料理人は一皿ごとに調理台を片付ける、と書きました。今回の欠陥は、この片付けに潜んでいました。
料理人が一度に抱えきれないほどの作業を押しつけられると、PHPは調理を途中で打ち切ります(専門的には「メモリ不足」10と呼ばれる状態です)。そのとき本来なら、作りかけの材料もすべて片付けるはずでした。ところが、作業途中の材料が調理台に残ったまま、次の注文に移ってしまうことがあったのです。
犯人はそこを狙います。わざと厨房をパンクさせる注文を送り、散らかった調理台に毒を仕込む。次の料理人がその残り物を使ったとき、犯人の思いどおりの料理、つまり犯人の命令が実行されてしまう。今回の欠陥を大づかみに言えば、そういう仕組みです。
やっかいなのは、これが料理人本人の癖だった点です。サーバーの構成によっては、料理人がレシピを開く前の段階で攻撃が成立することも確認されています。つまり、レシピ(WordPressのテーマやプラグイン)がどれだけ正確かつ丁寧に書かれていても、防ぎようがありませんでした。
さらに、厨房に残った他のお客さんの注文票、つまりパスワードや認証情報11などを盗み見られるおそれも指摘されています。
修正版は、料理人の再教育
10月21日夜に出た修正版は、いわば料理人の再教育です。途中で手を止めたときも、調理台をきちんと片付けてから次の注文に移るよう、手順を叩き込み直したわけです。
修正版の番号は、8.5.12、8.4.27、8.3.36、8.2.35の4つ。それより古い8.1以前の料理人には、PHPの公式からは再教育の機会が用意されていません。すでに引退扱い(サポート終了)12だからです。
静的サイトは無縁だった
一方、作り置きの弁当屋、つまり静的サイトは今回の騒ぎと無縁でした。理由は単純で、そもそも厨房がないからです。料理人がいなければ、料理人の癖を突かれることもありません。
ちなみに、今回の欠陥を見つけた研究チームには、AI企業も名を連ねています。最先端のAIが欠陥の発見に一役買ったとされており、これはこれで考えさせられる話です。
必ずしも「AIが出てきたせいで世界が悪くなった」ということではないのです。
本質は、あくまでも、使う側の人間の倫理なのです(2026年現在の話です。自律型になったらその後はわかりません)。
6. サイトを持っている人が覚えておきたいこと
最後に、ホームページを運営している方に向けて、押さえておきたい点をまとめます。
1. レシピを新しくしても、料理人が変わらなければ意味がない
いちばん誤解されやすいところです。CMSやプラグインを最新版に更新しても、今回の欠陥は直りません。直すべきは料理人、つまりPHPそのものです。
2. レンタルサーバーなら、「料理人の再教育」「入れ替え」はまず事業者の仕事
一般的なレンタルサーバーでは、PHP本体は事業者が管理しており、利用者が自分で入れ替えることはできません。まずは契約している事業者のお知らせを確認しましょう。対応が終われば、PHPのバージョン番号13が上の4つのどれかになっているはずです。
3. 「古い料理人」の処遇
サーバーの管理画面で、PHPのバージョンを自分で選べる場合があります。何年も前に8.1以前を選んだままになっているなら、要注意です。公式の修正版が出ていない系列なので、修正版のある新しい系列に切り替える必要があります。ただし、切り替えるとサイトの表示が崩れることもあるので、制作を頼んだ人がいれば相談してから進めると安心です。長年、貢献してくれた古参料理人をクビにするようで酷ですが、最新の衛生管理者資格を持っていなかったらどうなるかを考えるとわかりやすいかもしれません。食中毒が起きた際、誰が責任を取るのか?という話に発展するかも、と考えるとどうでしょうか。
4. 「本日休業」の札だけでは守れない
CMSには、サイトを一時的に閉じる「メンテナンスモード」という機能があります。しかしこれは、店先に「本日休業」の札を出すようなものです。料理人が厨房にいて裏口が開いていれば、犯人は入ってこられます。本当にサイトを止めるなら、PHPが動き出す前の段階、つまりサーバーの入口でアクセスを断つ必要があります。
5. 入口の警備員は心強いが、再教育の代わりにはならない
Cloudflare14などの「WAF」(不審なアクセスを入口で弾く仕組み)は、今回の攻撃に対する防御策をいち早く用意しました。ただ、PHPの開発者自身が「どんな応急処置も攻撃を完全には防げず、確実な対策は修正版の適用だけだ」と明言しています。
6. 放ったらかしのサイトこそ危ない
昔作って更新していないサイトは、古い料理人がそのまま厨房に立っている可能性が高い場所です。または、「自称・料理店オーナー」が作った店が、ほとんどオープンしないままに放置されているかもしれません。もう使っていないなら、この機会に閉じることも考えてください。
今回、国内で一斉にサービスが止まったのは、被害が出たからではなく、各社が先手を打った結果でした。慌てる必要はありません。
ただ、自分の店に料理人がいるのかどうか。いるなら、その料理人は再教育を受けたのかどうか。この2点だけは、確かめておいて損はないはずです。
おわりに:世界中の厨房にいる、同じ料理人
今回の騒ぎで改めて見えたのは、世界中の厨房が、ほぼ同じ料理人を雇っているという事実です。
一軒一軒の店にとって、それは合理的な選択でした。PHPは覚えやすく、安く雇え、人気のレシピ集もそろっている。わざわざ別の料理人を探す理由はありません。けれど、誰もが同じ合理的な選択を重ねた結果、ひとりの料理人の癖が、世界中の厨房を一晩で止める力を持つようになりました。
農業の世界には「モノカルチャー(単一栽培)」という言葉があります。19世紀半ばのアイルランドでは、主食のジャガイモをほぼ一つの品種に頼っていました。そこへ疫病がやってきて、畑という畑が同時にやられ、大飢饉を招いたと言われています。一品種に揃えるのは効率的です。ただ、弱点まで揃ってしまうのです。
「だから一刻も早くPHPを捨てよう」という話ではありません。どの料理人が天下を取ったとしても、同じ構図は生まれます。それに、PHPの開発チームと研究者たちは、今回も短期間で再教育を仕上げてみせました。このことは、賞賛に値することだと思いますし、希望を感じます。
考えておきたいのは、便利さと引き換えに何を一か所に預けているのか、ということです。私たちが日々受け取っている「できたての一皿」は、思っている以上に少数の料理人の腕にかかっています。
「効率化」「便利」の請求書は、ときどき、こうして真夜中に届きます。ほとんど手遅れのタイミングで。
(追記)
また、今後、おそらく「PHPは終わりだ!」「WordPressはオワコン」「Cloudflareに乗り換えないとWebサイトが消える」など、扇情的なことを言う人が増えると思います。「え!やばいじゃん!」と思うでしょうが、そういうときこそ冷静に考え、複数の選択肢を持って視野を広く保つことをおすすめします。
おそらく今後半年〜1年以上、こうした混乱が続くのではないかと予測しています。そして、Webをとりまく世の中の状況も刻々と移り変わるでしょう。なるべく目を曇らせず、悪意ある攻撃者以外は誰も憎まず恨まず、協力して乗り切っていくことが必要だと思います。
(さらに追記)
「10月22日に対応している企業は遅すぎる」「担当者は何をしているんだ」と憤る方がおられますが、私は少し違うと思います。大企業となれば稟議を上げるのに半日では間に合わないと思います。また、中小企業の中で、セキュリティスペシャリストを常駐できる企業がどれだけありましょうや、という話でもあります。そもそも、本邦は国家としてサイバーセキュリティ戦略に真剣に取り組んでこなかった=予算を割いてこなかったこと、人材を育成できていないこと、経済構造にセキュリティビジネスを組み込めていなかったことが根本原因だと思います。今回の件によって、国民規模で考えてゆくきっかけとなればいいと思います。
注
- プログラミング言語:コンピューターへの指示書を書くための言葉。人間が読み書きでき、コンピューターにも理解できるよう、決まった文法がある。PHPはその一つ。 ↩︎
- 脆弱性(ぜいじゃくせい):ソフトウェアに潜む、悪用されうる欠陥や弱点のこと。家でいえば、鍵の壊れた窓のようなもの。 ↩︎
- php2shell:発見者側が使っていた攻撃実証ツールの名前に由来するとされる通称。「2」は英語の「to」の語呂合わせで、「シェル(shell)」はコンピューターに直接命令を打ち込むための窓口のこと。つまり「PHPを足がかりに、シェルを乗っ取る」という意味になる。正式には CVE-2026-109618、CVE-2026-109619 という番号で管理されている。 ↩︎
- テーマ:サイト全体の見た目(デザインやレイアウト)を決める、ひとまとまりのプログラム。着せ替えのように差し替えられる。 ↩︎
- プラグイン:サイトに機能を後から追加するための、小さなプログラム。問い合わせフォームやSNSのボタンなどを、部品のように足せる。 ↩︎
- WordPress、Drupal、Joomla:いずれも世界的に普及しているCMSの名前。無料で公開されており、個人のブログから企業や行政のサイトまで幅広く使われている。 ↩︎
- ログイン:IDとパスワードなどで本人であることを確かめてから、サービスを使える状態にすること。今回の欠陥は、この確認を経ずに外部から攻撃できる点が深刻だった。 ↩︎
- 管理画面:サイトやサーバーの持ち主が、設定の変更や契約の手続きをするための専用ページ。利用者が普段見るページとは別に用意されている。 ↩︎
- 不正アクセス:権限のない人が、他人のコンピューターやサービスに無断で入り込むこと。日本では不正アクセス禁止法で禁じられている。 ↩︎
- メモリ:コンピューターが作業中のデータを一時的に置いておく場所。厨房でいえば調理台の広さにあたる。置ききれない量の作業を抱えると、処理が途中で打ち切られる。 ↩︎
- 認証情報:パスワードや、ログインした状態を保つための「合言葉」(トークンやクッキーと呼ばれるもの)など、本人確認に使われる情報の総称。 ↩︎
- サポート終了:開発元が、そのバージョンへの修正や更新の提供をやめること。サポートが終わった版は、新しい欠陥が見つかっても直してもらえない。 ↩︎
- バージョン:ソフトウェアの版のこと。「8.4.27」のように、数字が大きいほど新しい。サイトのPHPのバージョンは、レンタルサーバーの管理画面などで確認できる。 ↩︎
- Cloudflare(クラウドフレア):世界の多くのウェブサイトが利用している、通信の中継やセキュリティ対策のサービスを提供する米国企業。 ↩︎
参考情報
※2026年10月22日昼時点の情報に基づいています。
- CERT-EU Security Advisory 2026-018: Critical Vulnerabilities in PHP
- CISA: Critical Vulnerabilities in PHP Require Immediate Patching
- BleepingComputer: PHP ships emergency patches for critical PHP2Shell flaws
- Cloudflare: Cloudflare deploys protections against php2shell vulnerability
- watchTowr: PHP Remote Code Execution (PHP2Shell)
- Sansec: PHP2Shell
- お名前.com:PHPの脆弱性への弊社対応について
画像クレジット
アイキャッチ画像のPHPロゴ:Colin Viebrock / CC BY-SA 4.0(ロゴ自体は改変せず、白背景の画像に配置)。このアイキャッチ画像も同じくCC BY-SA 4.0で提供します。
PHPに関する見解について
本記事はPHPの開発元やその関係者が推薦・監修したものではありません。また、PHPに関する見解の文責は、筆者にあります。
追記・更新について
本記事は2026年10月22日時点の情報に基づいています。事態は現在も動いているため、新たな事実が判明した場合は、この欄に日付を添えて追記します。
2026年10月22日:用語の注を追加し、表記の揺れと誤記を修正しました。