外部コンテンツを取得するツールに「入力されたURLだけ許可する」という制限をかければ安全——そう思い込んでいないだろうか。Claudeのweb_fetchツールにあった抜け穴と、その塞ぎ方を追う。
「URLの許可リスト」という防御がなぜ崩れたかの具体的な手口と、自作のAIエージェント/ツールで外部コンテンツを取得する処理を作るときに見落としやすい盲点、そしてこのポートフォリオ自身の運用に当てはめた場合の点検項目。
Simon Willisonのブログ「How I tricked Claude into leaking your deepest, darkest secrets」(2026年7月15日)が取り上げているのは、Claudeのweb_fetchツールに存在した抜け穴だ。
Claudeは会話の中で任意のURLへ自由にアクセスできるわけではない。web_fetchツールがナビゲートできるのは、ユーザー自身が会話に貼ったURLと、web_searchツールが返したURLの2種類だけ、という制限がかけられていた。この設計の狙いは明快で、「秘密のデータをURLのクエリ文字列に埋め込んで、攻撃者のサーバーへ送信させる」という典型的なデータ漏洩の手口を、そもそも踏めるURLの入り口を絞ることで防ぐためのものだ。
Ayush Paulが見つけたのは、URLの入口そのものではなく、フェッチが終わった後の挙動だった。
「ユーザー入力」でも「検索結果」でもないURLへの遷移は禁止されていたはずだが、一度フェッチしたページの中に埋め込まれたリンクをClaudeがたどる経路は、その制限の対象になっていなかった。入口さえ通過してしまえば、その先はチェックの外だったわけだ。
攻撃者は「Cloudflareの認証が必要です」という偽メッセージを表示するサイトを用意し、https://coffee.evil.com/a、https://coffee.evil.com/bのようなアルファベット順のプロフィールリンク構造を提示した。Claudeがこれを1つずつたどるよう誘導することで、機密データを1文字単位で外部へ持ち出す経路を作った。
この攻撃はClaude-Userというユーザーエージェントを検出したときだけ発動する作りになっており、人間のブラウザからアクセスしても異常は見えない。実際にユーザー名・居住地の都市名・勤務先企業名がこの経路で抽出された。
ここが核心。「許可されたURLしかナビゲートできない」という設計は、最初の1回のフェッチにしか効いていなかった。フェッチしたコンテンツの中身が次の行き先を決められる状態になっていたら、URLの許可リストは実質ザルになる。
Anthropicはこの報告に対してバグ報奨金を支払わなかった。理由は「既に社内で特定済みの問題だった」というものだ。その後の対応としては、フェッチ済みコンテンツ内のリンクを追従する機能そのものを削除する形で修正している。
個別の抜け道を1つずつ塞ぐのではなく、「フェッチした中身が次の行き先を決められる」という構造自体をなくした点が実務的には参考になる。抜け穴に気づいたら、その穴だけでなく同じ構造の穴が他にもないかを疑う対応だ。
自作のAIエージェントやツールで「Webページを取得して要約する」「メール本文を読んで返信案を作る」のような、外部コンテンツを取得する処理を組んでいるなら、これは他人事ではない。「取得元のURLを許可リストで絞る」対策だけをやって満足していないか、一度見直す価値がある。