テック技報最新号へ →
セキュリティ

信頼できないリポジトリの HTML を AI エージェントのプレビューで開かない(Claude Code Desktop「SneakPeek」)

Claude Code Desktop のプレビュー画面で、攻撃者のリポジトリに入れた大きな HTML を表示させるだけで、SSH 秘密鍵やトークンを外部送信できる脆弱性が報告された(修正済み)。アプリを最新にし、他人のリポジトリ由来の HTML やレポートは隔離した環境で見る。

@MalwareBibleJP · 2026-10-18
#ai-agent#claude-code#csp#exfiltration#preview#untrusted-repo#secrets

何が起きたか(Noma Labs の説明より)

  • 攻撃の流れ: 利用者が攻撃者の公開したリポジトリを複製し、テストのカバレッジ資料を装った HTML の確認を Claude に頼む。許可を求める画面は出ない。
  • 原因: 256KB 未満の HTML は data: URL として読み込まれ、スクリプトを禁じる CSP が効いていた。256KB を超えると一時ファイルに書き出されてローカルファイルとして表示され、CSP がかからなかった。ローカルファイルの読み取りを防ぐフィルターも、開発サーバー経由の表示でしか働かなかった。
  • 送られうるもの: SSH 秘密鍵、AWS アクセスキー、GitHub・npm のトークン、Claude の OAuth トークン、WebRTC 経由の実 IP など。外向き通信を制限する CSP もなく、navigator.sendBeacon で送信された。
  • 最初の修正(fetch / XMLHttpRequest の遮断)は、blob: URL から作った Web Worker 経由で回避できた。最終的に CSP・ローカルファイル読み込み・Worker 経由をまとめて塞ぎ、2026 年 8 月 17 日に 1.30096.1 以降として自動更新で配布された。CVSS 4.0 で 8.7(High)。
  • GitHub アドバイザリーと CVE は 10 月 17 日時点で未公開。

利用者がやること

  1. バージョンを確認する: Claude Code Desktop が 1.30096.1 以降になっているか確かめる。自動更新を止めている端末は特に。
  2. 他人のリポジトリ由来の HTML をエージェントのプレビューで開かない: カバレッジレポート、ベンチ結果、ドキュメントなど「見るだけ」のファイルでもスクリプトは動く。中身を確かめたいなら、テキストとして読ませるか、使い捨ての VM・コンテナのブラウザで開く。
  3. 評価用のリポジトリは隔離環境で扱う: SSH 鍵やクラウドの資格情報が置かれていない環境(複数エージェントの分離は worktree+ネットワーク namespace で十分なことが多い や AI エージェントを外側のポリシーで閉じ込める(NVIDIA OpenShell) のような仕組み)で開く。
  4. ホームの秘密を減らす: ~/.ssh の鍵にパスフレーズを付ける、長期の AWS キーや npm トークンを平文で置かない。漏れたときの被害がここで決まる。
  5. 侵害が疑われたら鍵を回す: 修正前の版で見知らぬリポジトリの HTML をプレビューした覚えがあれば、SSH 鍵・トークンを失効して作り直す。

作る側の教訓

  • 同じ表示機能でも経路(サイズで切り替わる data: URL とローカルファイル)ごとに CSP やフィルターの効き方が違うと穴になる。全経路で同じ制限がかかるかをテストする。
  • 外向き通信を CSP の connect-src などで止めておけば、スクリプトが動いても持ち出しにくい。Web Worker や blob: 由来の実行環境も対象に含める。

出典

X の元の投稿を開く