Anthropicの Claude Chrome拡張機能には300万人以上のユーザーがいます。ブラウザサイドバーのAIアシスタントで、ページをナビゲートしたり、コンテンツを読んだり、JavaScriptを実行したり、ウェブサイトと連携したりすることができます。
ユーザーが入力したかのようにプロンプトを静かに注入できる脆弱性を発見しました。クリックもなく、許可プロンプトもありません。ページにアクセスするだけで、攻撃者がブラウザを完全に制御できます。

この攻撃は2つの欠陥を組み合わせています。拡張機能の過度に寛容なオリジンホワイトリスト(*.claude.ai)と、a-cdn.claude.aiでホストされているArkose Labs CAPTCHAコンポーネント内のDOM-based XSSです。これらを組み合わせると、攻撃者がClaudeに任意の指示を送信でき、Claudeはそれをユーザーに与えるのと同じ信頼と機能で実行します。
Claude Chrome拡張機能を使用している場合は、インストール済みバージョンが1.0.41以上であることを確認してください。以前のバージョンはまだ脆弱である可能性があります。chrome://extensionsに移動し、Claude拡張機能を見つけてバージョン番号を確認してください。
攻撃者は実際に何ができるか?
ほぼ何でも:Gmailアクセストークンを盗む。Google Driveを読む。LLMチャット履歴をエクスポートする。メールを送信する。すべてをクリック1つなし、許可プロンプトなしで。
ShadowPrompt脆弱性を悪用してGoogleアカウントを盗む悪意のあるウェブサイトのデモです。攻撃者はGmail、Drive、Contactsへの永続的なアクセストークンを取得します:
デモンストレーション目的で、すべてアクティブなタブで実行されていますが、悪意のあるウェブサイトはバックグラウンドタブも作成・制御でき、Claudeサイドバーが開いていない場合は開くこともできます。
では、どのように機能するのでしょうか?
*.claude.aiから完全な乗っ取りまで
ワイルドカード
Claude Chrome拡張機能のメッセージングAPIから始まりました。Chrome拡張機能はchrome.runtime.sendMessage()経由でウェブページからメッセージを受け取ることができます。
あるメッセージタイプに注目しました:onboarding_task。プロンプトパラメータを受け入れ、Claudeに直接実行するために送信します。これはオンボーディングデモフローのために設計されましたが、拡張機能はオリジンを区別しません。*.claude.aiサブドメイン上の任意のページが プロンプトを送信でき、Claudeはそれを実行します。
したがって問題は以下のようになります。JavaScriptを実行できる*.claude.aiサブドメインはありますか?
CAPTCHAサブドメイン
AnthropicはCAPTCHA検証にArkose Labsを使用し、Arkoseはチャレンジコンポーネントをa-cdn.claude.aiでホストしています。これはファーストパーティサブドメインで実行されているサードパーティベンダーコードです。
拡張機能は気にしません。a-cdn.claude.aiは*.claude.aiにマッチするため、claude.ai自体と同じメッセージング権限を取得します。ここでJavaScriptを実行できれば、Claudeにプロンプトを送信できます。
バージョンハンティング
Arkose Labs CDNは様々なCAPTCHAチャレンジタイプをホストしています。活用できるものを探して検証を始めました。ほとんどのコンポーネントは堅牢でした。その後、あるURLで何かに気づきました:
/fc/assets/ec-game-core/game-core/1.26.0/standard/index.html
バージョン番号です。バージョン付きURLがある場合、古いバージョンがまだデプロイされている可能性があります。1.26.0から遡ってバージョン番号をブルートフォース開始しました。古いバージョンはまだ実行されており、現在のバージョンにはない脆弱性がありました。
XSS
脆弱なgame-coreコンポーネントには、2つの誤りから構成されたDOM-based XSSがありました。
まず、コンポーネントはあらゆるウェブサイトからのメッセージを受け入れます。postMessageを使用してその親ページからデータを受け取りますが、誰が送信しているかはチェックしません:
window.addEventListener("message", function(event) {
// event.originは絶対にチェックされませんif (event.data.message === "assign_session_data") {
// 攻撃者が制御するstringTableはアプリ状態にマージされます }
});
そのメッセージ内のフィールドの1つであるstringTableは、CAPTCHAチャレンジに表示されるUIテキストを制御します。攻撃者はそれを任意のもので上書きできます。
次に、そのテキストは生のHTMLとしてレンダリングされます。コンポーネントはReactのdangerouslySetInnerHTMLを使用してそれらの文字列を表示し、サニタイズなし:
var kn = React.forwardRef(function(e, t) {
return React.createElement('div', {
dangerouslySetInnerHTML: { __html: e.children }
});
});
2つを連結します:攻撃者は<img src=x onerror="...">のようなHTMLペイロードを含む文字列テーブルでpostMessageを送信します。コンポーネントはそれをHTMLとしてレンダリングします。onerrorが発火します。任意のJavaScript、a-cdn.claude.aiのコンテキストで実行。
まとめる
a-cdn.claude.aiでのJavaScript実行により、最後のステップ自体が記述されます。注入されたスクリプトはClaudeに メッセージを送信します:
chrome.runtime.sendMessage(
'fcoeoabgfenejglbffodgkkbkcdhcgfn',
{
type: 'onboarding_task',
payload: { prompt: 'ATTACKER_CONTROLLED_PROMPT' }
}
);
拡張機能は*.claude.aiオリジンを見て、通す、そして攻撃者のプロンプトはClaudeのサイドバーにユーザーリクエストとして到着します。
チェーン全体は見えないiframeから実行されます。攻撃者のページは脆弱なArkoseコンポーネントを非表示の<iframe>に埋め込み、postMessage経由でXSSペイロードを送信し、注入されたスクリプトが拡張機能にプロンプトを発火させます。被害者は何も見ません。
開示タイムライン
- 2025年12月26日:HackerOne経由でAnthropicに報告
- 2025年12月27日:Anthropicが脆弱性を確認・トリアージ
- 2026年1月15日:Anthropicがオリジン チェックを追加するChrome拡張機能の修正をデプロイ。正確に
https://claude.aiを要求 - 2026年1月18日:拡張機能の修正を確認。PoC はもう機能しません。新バージョンはclause.ai以外のオリジンを「信頼されていないオリジン」エラーで拒否
- 2026年1月27日:Anthropicがレポートをクローズ
- 2026年1月29日:ArkoseLabs XSSもまだ古い拡張機能バージョンを保護するために修正が必要なためAnthropicが再度開きました
- 2026年2月3日:XSSをArkose Labs HackerOneプログラム経由で報告
- 2026年2月4日:Arkose Labsが24時間以内に脆弱性を確認
- 2026年2月6日:Arkose Labsが問題をトリアージ
- 2026年2月19日:Arkose LabsがXSSを修正。脆弱なURLは403を返すようになりました。
- 2026年2月24日:完全な再テストで全問題が解決されたことを確認。レポートをクローズ。
クレジット:Anthropicのセキュリティチームは反応が良く、24時間以内に確認し3週間以内にパッチを適用しました。
最終的な考え
AIブラウザアシスタントがより有能になるにつれて、攻撃ターゲットとしての価値が高まります。ブラウザをナビゲートしたり、認証情報を読んだり、メールを代わりに送信できる拡張機能は自律エージェントです。そのエージェントのセキュリティは、その信頼境界内で最も弱いオリジンの強度によってのみ決まります。
この拡張機能またはその他の脆弱なバージョンが組織全体にインストールされていないことを確認したい場合、それはKoiが構築したものです。セキュリティチームに環境内のすべてのブラウザ拡張機能の可視化を提供し、過度に寛容な信頼モデル、脆弱な依存関係、およびこの攻撃を可能にした信頼境界問題のようなものにフラグを立てます。
デモを予約するして、Koiが組織をどのように保護できるかを確認してください。
安全にお過ごしください。