T-CREATOR

<div />

Cloudflare Zero Wire の php2shell のプロンプトを Claude Code で使う手順: 77秒で古い版を特定

Cloudflare Zero Wire の php2shell のプロンプトを Claude Code で使う手順: 77秒で古い版を特定

Cloudflare の Zero Wire にある php2shell のプロンプトを Claude Code に渡すと、PHP の脆弱性(CVE-2026-109618 など)に当てはまる環境を、読むだけで洗い出して表にしてくれます。2026年11月6日に Claude Code 2.1.309 で PHP 8.3.35 と 8.4.27 の見本の環境を調べさせたところ、77秒で古い版の1つだけを「当てはまる」と答えました。

経緯

2026年10月21日に、PHP に2つの重大な脆弱性(php2shell)が公開されました。Cloudflare は11月3日に重大な脆弱性ごとの説明をまとめた Zero Wire を公開し、そこに「自分の AI エージェントに渡して、自分の環境が当てはまるかを調べさせる」プロンプトを載せました。このプロンプトで、本当に自分の環境を調べられるかを確かめました。

環境

  • macOS 26.6.2、Docker で動かした見本の環境
  • Claude Code 2.1.309(モデルは初めの設定の Claude Opus 5.5)
  • 見本の環境は、お店のアプリ(php:8.3.35-apache)とブログ(php:8.4.27-apache)の2つ。外からは見えないようにした
  • 2026年11月6日に確認

手順

Cloudflare Radar で Zero Wire の php2shell を開く

Cloudflare Radar の Zero Wire(radar.cloudflare.com​/​security​/​zero-wire​/​)を開き、php2shell の Read the briefing を押します。無料で、Cloudflare を使っていなくても読めます。

Cloudflare Radar の Zero Wire の php2shell の説明。CVE-2026-109618、CVE-2026-109619、CVE-2026-115560 の番号と、Patch の印、最後に確かめた日が出ているZero Wire の php2shell の説明

説明には、何が起きたかとだれが調べるべきかと、やることが並びます。php2shell は PHP そのものの脆弱性なので、WordPress などのアプリやプラグインを更新しても直らない、と書かれています。

直した版を、PHP の知らせで確かめる

PHP の知らせ(2026年10月21日)では、次の版で直っています。

系統直した版
8.58.5.12
8.48.4.27
8.38.3.36
8.28.2.35

8.1 より古い版は、PHP からの更新がありません。ディストリビューションの更新で直っていることがあるので、使っているところの知らせを見ます。

Zero Wire のプロンプトを Copy prompt で写す

説明の Assess your exposure with an agent にプロンプトがあります。Copy prompt を押して写します。

Zero Wire の Assess your exposure with an agent の節。読むだけで調べるよう頼むプロンプトの文と、Copy prompt のボタンが出ているZero Wire のプロンプトと Copy prompt のボタン

プロンプトの最初には、読むだけで調べて攻撃の通信を送らず、システムを変えないように頼む文があります。写すだけでは、何も調べられません。

読むだけの権限で Claude Code に渡す

Claude Code に許す操作を、ファイルを読むことと PHP の知らせを読むことと、コンテナの版を見ることだけにして渡します。プロンプトの前に、調べる範囲と答えの言葉を1文ずつ足しました。

terminal$ claude -p "対象は、このフォルダーの見本の環境だけです。答えは日本語で書いてください。〔写したプロンプト〕" \
  --allowedTools Read Glob Grep "WebFetch(domain:www.php.net)" \
  "Bash(docker compose ps:*)" "Bash(docker compose images:*)" \
  "Bash(docker compose exec shop php:*)" "Bash(docker compose exec blog php:*)" \
  "Bash(docker inspect:*)"

claude -p は、対話の画面を開かずに、1回の指示を実行して答えを受け取る使い方です。対話の画面で渡すときは、操作のたびに許可を聞かれます。

返ってきた表を読む

77秒で、次の表を含む答えが返りました(抜き出し)。

資産動いている PHPCVE-2026-109618、109619CVE-2026-115560次の対応
お店のアプリ8.3.35当てはまる当てはまる(条件がすべてそろう)8.3.36 以降に上げる。それまで session.upload_progress.enabled=0 にする
ブログ8.4.27直っている当てはまらない(コードから判断)実際に効いている設定を確かめる

古い版のお店のアプリだけを「当てはまる」と答え、直した版のブログは「直っている」と分けました。お店のアプリでは、設定ファイルとコードを読み、追加の CVE-2026-115560 の3つの条件がそろうことも見つけていました。見本の環境のファイルとコンテナは、調べる前と同じままでした。

足りないと言われた情報を足す

答えの終わりには、「確認できなかったこと」と、それに要る権限が並びます。今回はコンテナの中のコマンドを docker exec で打とうとして許可がなく止まったので、実際に効いている設定が読めていない、と書かれていました。そこまで調べたいときは、その読むだけのコマンドを許可に足して、もう一度頼みます。

注意点

追加の CVE-2026-115560 は、更新しても直らない

PHP の知らせでは、CVE-2026-115560 の修正はまだで、次の通常の更新で出ます。それまでは session.upload_progress.enabled=0 が勧められています。実行中にセッションの保存の形を切り替えないアプリなら、当てはまりません。

調べるのは、自分が使ってよい環境だけにする

プロンプトは「渡された権限の中で」調べるよう頼んでいます。権限を広く渡すと、関係のないコンテナやサーバーまで見に行きます。調べる範囲を、プロンプトの前に1文で書いておきます。

答えは、調べた範囲の中だけのもの

答えは、調べた範囲の外が安全だとは言いません。今回も「ほかの環境が影響を受けないとは言えない」と書かれていました。前に置いた WAF などで止めていても、PHP そのものは直っていません。

参考文献

著書

とあるクリエイター

フロントエンドエンジニア Next.js / React / TypeScript / Node.js / Docker / AI Coding