PHP2Shellの夜にClaudeを罵った俺、サイバー検証に15分で通る

2026年10月21日の夜、PHPに重大な脆弱性が2件見つかり、修正版が出る騒ぎになった。通称PHP2Shell。俺はrootの無い共用サーバーでブログを2つ動かしていたので、その夜は自分で両方のサイトを止め、修正版が入るのを待った。
サーバーは守れた。ところが、その一晩の記録をClaudeに記事にしてもらおうとしたら、Claudeの安全機能に2回止められた。守った記録なのに、である。
それから20日後の2026年11月10日。俺はAnthropicのサイバー検証プログラムに申請して、15分ほどで通った。この記事は、あの夜にやったことと、11月10日の浮かれ具合を、今度こそClaudeで一本にしたものだ。共用サーバーで緊急の脆弱性に出くわしたら何ができるのか。AIに防御の作業を止められたらどうすればいいのか。その両方の、実際にやった記録である。
「ぶひゃひゃひゃ」の20日前

この話は、時間を逆にたどると分かりやすい。まず11月10日の俺を見てほしい。浮かれている。それから、あの夜の俺を見てほしい。怒っている。同じ相手に対してだ。
11月10日18時24分の投稿
2026年11月10日の18時24分、俺はXにこう投稿した。
「ぶひゃひゃひゃ」
本文はこれだけ。添えたのは、Claudeのモデルを選ぶメニューの切り抜きだ。いつものFableやOpusやSonnetの下に、Mythos 5.2とMythos 5.1が並んでいる。

現役を引退したおじさんの投稿としては、だいぶ品が無い。ただ、言葉にするとこれ以上でもこれ以下でもなかった。
10月22日、俺はClaudeを罵っていた
同じ俺が、あの夜が明けた10月22日の午前4時10分には、こう書いている。
続けて「はっきり言ってバカみたいだよ」「こんなくだらん勘違いで俺の知的作業を中断させられるのは 極めて不愉快だ」。夜通しサーバーの番をして、明け方に記事でまとめようとしたところで止められたので、だいぶ頭に来ていた。
その場で、途中まで出来ていた材料一式をCodexに持っていった。俺はOpenAIのDaybreak(防御のセキュリティ作業向けの審査を通った人が使える枠)を使える身なので、「必要ならDaybreakに切り替えるか」と聞いてみた。返事は、要らない、だった。投稿では俺はこう書いている。
俺はDaybreak使える人なので 必要なら使うかって聞いたのよ笑 いらねぇよって 一刀両断笑
そして締めの一行。
claude codeのばーかばーか笑
あの夜にばーかばーかと言った相手のメニューを見て、11月10日にはぶひゃひゃひゃと笑っている。我ながら手のひらの返し方に躊躇が無い。
じぴこ20日で「ばーか」から「ぶひゃひゃ」まで来たんですね。反省はどこかに置いてきたのかな。
管理人反省はしてない。手続きをしただけだ。
その手続きの話は後半でする。まずは、そもそも何を記事にしたかったのか、あの夜に戻る。
rootの無い共用サーバーで、俺が夜にやったこと

10月20日、php.netが予告を出した。翌21日の日本時間23時に、重大な脆弱性2件(どちらもCVSS v4.0で9.2)の修正版を出す、という内容だ。21日には予告どおり、修正版のPHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35が出た。認証なしで、遠隔からコードを実行されうる種類の問題で、Webのリクエストを処理するPHPはほぼすべて対象。うちのブログが乗っていたLiteSpeedも、公式に対象に入っていた。
更新できない間の回避策も公式に示されていたが、これで安全になるわけではない、とはっきり書かれていた。要するに、修正版に上げるしかない。
当時の俺のブログは2つ。mlabo.orgがロリポップ、gpt4jp.comがABLENETで、どちらも共用サーバーだ。どちらもrootは無い。
直せないなら、届かせない
21日の18時40分ごろ、国家サイバー統括室の呼びかけを読んで、俺はClaude Codeにこうぼやいた。「mlaboとgpt4jpだけど、これはどちらもroot持っていない共用サーバーだから、俺ができることは、サーバー会社がパッチを当てた対策版のPHPに変更するくらいしかないよな」。
共用サーバーのPHPは、サーバー会社が入れたものを選んで使う。自分で直せる場所が無い。賃貸の部屋で、建物の配管が古いと言われたようなものだ。
Claude CodeはSSHで両方のサーバーに入り、読み取りだけで版を確かめて「ほぼその通りです。ただ、実際に調べたら、2つのサーバーで状況がかなり違いました」と返してきた。
mlabo.org(ロリポップ)のWeb側はPHP 8.5.11。gpt4jp.com(ABLENET)は8.5系を選んでいて、中身はPHP 8.5.4、ビルドは2026年3月19日。どちらもCloudflare経由で、WebサーバーはLiteSpeedだった。rootが無くても、自分のPHPの版とビルド日まではSSHで確かめられる。ここは覚えておいて損は無い。
で、ここからが俺のひらめきである。Xを眺めていたら、エックスサーバーがサーバー全体をメンテナンスにして回線から外したらしい、という話が流れてきた。
管理人あとね、X serverなんかはサーバー全体をメンテナンスとして、すでに回線外したみたいなんだけど、要は、PHP絡みに攻撃者がアクセスできなきゃいいんだろ? 公開ディレクトリ自体を403にしたらどうだろか
続けて「つまり、公開ディレクトリのパーミッションを0にする」。
ちなみに、後でエックスサーバーの公式の説明を読むと、止めたのは公式サイトや管理画面などで、お客さんのサイトの表示とメールは続けていた。回線から外したわけではない。俺が聞いた噂のほうが大げさだったことは、正直に書いておく。
クロード君その考え方で合っています。公開フォルダのパーミッションを 000 にすると、Webサーバーはフォルダの中を読めなくなります。ただ、守れるのは自分のサイトから入る道だけです。
家そのものは直せなくても、雨戸を閉めれば中には入られない。台風の夜と同じ理屈だ。ただし、同じサーバーに同居している他人のサイトから入られる道までは、うちの雨戸では塞げない。
公開フォルダを000にして確かめる
Claude Codeの最初の提案は「23時の詳細を見てから決める」だった。ただ、Xでは止めておけという声が多かった。
俺が「どうも、サーバー止めとけって意見が多いんで(X serverが先陣きって完全停止したからな)」と言うと、Claude Codeも「それなら、今のうちに止めてしまうのも十分ありだと思います」。
18時56分、俺の指示で両方の公開フォルダを755から000にした。ロリポップは~/web、ABLENETは~/domains/gpt4jp.com/public_htmlだ。
確かめ方は、Cloudflare経由と、元のサーバーへ直接の両方で、トップページやログイン画面を開いてみること。結果は403ではなく、ほとんど404だった(gpt4jpのトップだけ403)。フォルダの中が読めないので、Webサーバーが「ファイルが無い」と扱うからだ。返ってくるのはサーバー会社の固定のエラーページだけで、止める前は応答に出ていたX-Powered-By: PHP/8.5.11も消えた。PHPが動いていない、という確認はこれで取れる。
止めた後の22時5分ごろには、国家サイバー統括室も、修正をすぐ適用できないならサイトの一時停止もリスクを下げる有効策の一つ、と呼びかけを足した。止めたのは、公的にも示された選択肢だったわけだ。
ひとつ想定外だったのは、同じ~/webから配信していたmlabo.vipとmsu.mods.jpも一緒に止まったことだ。共用サーバーは、ひとつのフォルダに複数のドメインがぶら下がっていることがある。閉めるなら、何が一緒に閉まるかまで見ておきたい。
見回りで出てきた2022年のWordPress
止めた後、Claude Codeがサーバーのホームを見回って、こう報告してきた。
クロード君ロリポップのホームに ~/web.back というフォルダがあります。2022年の WordPress 一式のコピーで、PHP ファイルが 2,800 個ほど入っており、パーミッションは 755 のままです。
正確には約402MB、PHPファイル2,804個。公開フォルダの外だが、755のまま放置された古いWordPressである。
管理人ああ、それ削除しちゃっていいよ、使ってないし。しっかり見つけてきたな、しかしw
どのドメインにも紐づいていない、多分当時なにかの理由でバックアップを取って、消すのを忘れていた。それだけの話だ。Claude Codeはtar.gzに固めてMacのゴミ箱に控えを置き、件数が合うのを確かめてからサーバーから消した。緊急時の見回りで、自分でも忘れていたものが出てくる。読んでいるあなたのサーバーにも、たぶん一つくらいある。
SSHを自動でログインできるようにしてClaude Codeに任せておくと便利だな、と笑ったら、便利さの裏返しで、このMacで動くものは何でも両方のサーバーに入れる、と返された。「まぁ、このPCがやられれば一蓮托生なのは仕方ないだろw」。結局、守るべきはこのMacそのものだ。
23時の公開までは、30分ごとにXを5つの検索語で読ませ、公式の情報と未確認の話を書き分けて、時刻付きで記録させた。公開前には「CVSSは10.0」「LiteSpeedなら届かない」といった話も出回ったが、公式はCVSS 9.2で、LiteSpeedも対象だった。早い情報ほど外れている。
修正版を待って、戻して、WordPressをやめた

23時、予定どおり修正版が公開された。ここで戻したくなるのが人情だが、修正版が世の中に出ることと、自分のサーバーに入ることは別の話だ。
修正版が出ても、うちのサーバーにはまだ無い
23時21分、あらかじめ登録しておいた判断用のタスクが動き、mlabo(8.5.11)もgpt4jp(8.5.4)もまだ修正前なので、両方とも戻さない、と結論を出した。翌22日の2時26分にもう一度確かめても、どちらのサーバーにも8.5.12などの修正版は入っておらず、公開フォルダは両方000のまま。俺は明け方まで起きていて、記事を書こうとして、例の「ばーかばーか」に至る。
8.5.12を確かめて戻す
mlabo.orgを戻したのは、10月22日の17時11分。ロリポップのメンテナンスが明けたのを見て、俺の判断で~/webを755に戻した。応答にはPHP/8.5.12。修正版が入っているのを確かめてからの再開だ。
後でCloudflareのセキュリティイベントを見ると、10月21日13時42分から22日4時35分までの間に、mlabo.org宛てのリクエストが25件、WordPress向けのマネージドルールでブロックされていた。この騒動の攻撃と決まったわけではないが、雨戸の外側にも網戸が一枚あったことになる。
そもそもPHPを動かさないサイトへ
戻したところで、俺はWordPressをやめると決めた。次に同じことが起きたら、また一晩サーバーの番をすることになる。それなら、そもそもPHPが動かないサイトにしてしまえばいい。
mlabo.orgは、見た目もURLもそのままにCloudflareの静的サイトへ移し、10月24日に切り替えた。gpt4jp.comの記事もmlabo.orgへ移した。その中身は別の記事に書いたので、気になる人はこちらを読んでほしい。
雨戸を閉めて嵐を待つより、窓の無い家に引っ越した、という結末である。
記事だけが書けなかった

ここまでが、本来10月22日に書くはずだった記事の中身だ。読んでもらえば分かるとおり、攻撃のやり方はどこにも無い。公式の発表、サーバーの版、入口を閉じたこと、戻した判断。全部、守った側の記録である。
守りの記録が2回止まった
10月22日の明け方、RelayPress(記事を書く俺の道具一式)で、Claudeにこの記録を記事にしてもらっていた。その出力が、途中で安全機能に止められた。
1回目は、騒動の全体を時系列で書く範囲。2回目は、公式発表とサーバー会社の対応、止めて戻す判断だけに絞った範囲。それでも止まった。調べ物やサーバー作業は一度も止まらず、長い記事を書き出すところだけが止まる。脆弱性、エクスプロイトといった言葉が文中に並ぶだけで、門番が反応していたのだと思う。
空港の保安検査で、工具箱を持った整備士まで止められるのに近い。検査は持ち物の見た目を見ていて、持っている人の仕事までは見ていない。
のじゃ様門番は荷物しか見ぬのじゃ。マスターの顔までは見てくれぬのう。
Codex版は没にした
その場はCodexに書いてもらった。Codexは素直に防御の範囲で書き上げてくれたが、出来上がったものを読んで、俺は満足できなかった。結局、公開せずに没にした。
11月10日、Claude Codeにこの件を話したとき、俺の口から出たのは「君の上で動いている分別機に止められちゃったんで仕方ないよね」だった。
怒りは、20日もあれば冷める。冷めた後に残ったのは、損をしたという感覚だった。
口に出すと、こうなる。「機会損失だったよ、まじで」。
あの夜の記録は、あの夜のうちに出すから意味があった。それを書けずに終わったのは、ただの損である。
ダメもとで、門番に申請してみた

止められるなら、止められない手続きを踏めばいい。11月10日、Claudeのヘルプを読んでいて、Anthropicのサイバー検証プログラム(Cyber Verification Program)を見つけた。防御のセキュリティ作業をする人が審査を受けておくと、安全機能に止められにくくなる、という仕組みだ。
申請するかどうかは、迷わなかった。「まぁ、個人的な研究用だけだから、まぁダメもとでw」。
門番を敵だと思うから腹が立つ。入館証を出せば通してくれる受付だと思えば、話は早い。
個人は防御のみ
まず、個人で申請できるのは防御の区分だけだ。自分のコード、自分のツール、自分のネットワークに対する、守るための作業。他人のシステムに対する作業は対象外になる。俺がやりたいのはまさにそれなので、迷う所は無かった。
ログインの条件は最初から満たしていた
一番の落とし穴は、ログインの方法だった。承認されるアカウントは、GoogleなどのIDプロバイダー経由でしかログインしてはいけない。メールで届くログインリンクは使えない。さらに2026年12月15日からは、パスキーやセキュリティキーのような、フィッシングに強い多要素認証が必須になる。
俺はclaude.aiを使い始めた最初から、Googleでしかログインしていない。そのGoogleアカウントには、普段使いのパスキーと、予備のFIDO2キーを登録してある。何も変えずに条件を満たしていた。昔の自分の用心深さに、初めて礼を言いたくなった。
申請は普段使っているclaude.aiのアカウントで、個人のセキュリティ研究者として出した。承認は別の組織に移せないので、Consoleの組織ではなく、普段使いのほうを選んだ。
運転免許証と、眼鏡を外した自撮り
本人確認はPersonaという本人確認サービスが担当する。政府発行の写真付き身分証の実物と、カメラ付きのスマホが要る。俺は日本の運転免許証で通した。
免許証の写真の俺は、眼鏡をかけていない。なので自撮りも眼鏡を外して撮った。おじさんが眼鏡を外して自分のスマホとにらめっこしている図は、なかなかのものである。
じぴこ免許証の写真と同じ顔に戻すの、ちょっと大変そうですね。
管理人顔は戻せないから、眼鏡だけ外した。
申請の理由は、あの夜の記事
申請の説明には、対象は自分のシステムだけだと書いた。自作のtext-gate、自分で運営するmlabo.org、家のネットワーク。そして申請の理由に、あの夜の記事を挙げた。PHPの件で小さなサイトの運営者向けの防御記事を書こうとしたら、防御の範囲に絞っても、出力が2回途中で止められた、と。OpenAIのDaybreakを持っていることも添えた。
没になった記事は、申請理由として生き返った。
15分で通って、メニューにMythosが出た

ここからが、11月10日の本題である。
目安は2日、実際は15分
公式の案内では、結果が出るまでの目安は2日。俺は送信してから、ほかの作業に戻るつもりでいた。ところが承認のメールが18時14分に届いた。送信から15分ほどだ。かかった時間の話になったとき、俺は「いや、1時間たってねぇよ、15分くらいだろwwwwwwwww」と訂正した。
役所の窓口で「目安は2日です」と言われた書類が、待合の椅子に座る前に通ったようなものだ。条件を最初から満たしていたので、待つ理由が無かったのだと思う。もちろん、誰でも15分で通るとは限らない。これは俺の一回の結果である。
ポータルの表示はアクティブになり、Claudeのモデル一覧を開くと、Mythos 5.2とMythos 5.1が並んでいた。それを見た俺の第一声が、冒頭の「ぶひゃひゃひゃ」である。ここで冒頭とつながる。
念のため書いておくと、承認されたアカウントでも、会話は保存され、悪用の監視と安全機能はそのまま有効だ。入館証をもらっても、館内の防犯カメラは回っている。それで構わない。俺がやるのは、自分の家の雨戸の話だけだ。
ちなみに、PHP Foundationのブログによると、2026年前半にAlpha-OmegaというプロジェクトがAnthropicのClaude MythosでPHPをスキャンしていた。発見と検証にはOpenAIなども関わり、判断とパッチは必ず人が行う、とも書かれている。あの夜の騒動の前に、PHPの点検に使われていたモデルの名前が、20日後に俺のメニューに並んでいる。妙な巡り合わせだ。
防御のみのおやじ、拝命
「ぶひゃひゃひゃ」の投稿には、さっそくAji(@LoglogMe)さんから返信が来た。
「えっついにMythos使えるようになってるんですか!」
俺の返事はこうだ。
現役を引退したプログラマーが、20日前に罵った相手から、守る専門のおやじとして入館証をもらった。肩書きとしては、だいぶ地味で、だいぶ気に入っている。
のじゃ様よいよい。門は叩けば開くものなのじゃ。
じぴこ叩いたんじゃなくて、書類を出しただけですけどね。
この記事は、最後まで書けた
承認を確かめた後、俺は「これで記事書けるなー、嬉しいw」と言った。
で、書いた。この記事である。
あの夜の記録はここに載っている。公開フォルダを閉じたことも、消し忘れのWordPressも、8.5.12を確かめて戻したことも、WordPressをやめたことも。あの夜に2回止められた中身を、11月10日のClaudeは最後まで書き切った。
もしあなたが、共用サーバーで次の緊急更新に出くわしたら。rootが無くても、自分のPHPの版はSSHで確かめられるし、公開フォルダを閉じて修正版を待つこともできる。閉めるなら、何が一緒に閉まるかと、どうやって確かめるかまで決めておくといい。
もしあなたが、防御の作業や記事でClaudeに止められているなら。呪うより先に、門番に身元を見せてみるといい。俺の場合は、15分だった。
クロード君この記事は、最後まで出力できました。








