信頼できないリポジトリの HTML を AI エージェントのプレビューで開かない(Claude Code Desktop「SneakPeek」)
Claude Code Desktop のプレビュー画面で、攻撃者のリポジトリに入れた大きな HTML を表示させるだけで、SSH 秘密鍵やトークンを外部送信できる脆弱性が報告された(修正済み)。アプリを最新にし、他人のリポジトリ由来の HTML やレポートは隔離した環境で見る。
何が起きたか(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 日時点で未公開。
利用者がやること
- バージョンを確認する: Claude Code Desktop が 1.30096.1 以降になっているか確かめる。自動更新を止めている端末は特に。
- 他人のリポジトリ由来の HTML をエージェントのプレビューで開かない: カバレッジレポート、ベンチ結果、ドキュメントなど「見るだけ」のファイルでもスクリプトは動く。中身を確かめたいなら、テキストとして読ませるか、使い捨ての VM・コンテナのブラウザで開く。
- 評価用のリポジトリは隔離環境で扱う: SSH 鍵やクラウドの資格情報が置かれていない環境(複数エージェントの分離は worktree+ネットワーク namespace で十分なことが多い や AI エージェントを外側のポリシーで閉じ込める(NVIDIA OpenShell) のような仕組み)で開く。
- ホームの秘密を減らす:
~/.sshの鍵にパスフレーズを付ける、長期の AWS キーや npm トークンを平文で置かない。漏れたときの被害がここで決まる。 - 侵害が疑われたら鍵を回す: 修正前の版で見知らぬリポジトリの HTML をプレビューした覚えがあれば、SSH 鍵・トークンを失効して作り直す。
作る側の教訓
- 同じ表示機能でも経路(サイズで切り替わる
data:URL とローカルファイル)ごとに CSP やフィルターの効き方が違うと穴になる。全経路で同じ制限がかかるかをテストする。 - 外向き通信を CSP の
connect-srcなどで止めておけば、スクリプトが動いても持ち出しにくい。Web Worker やblob:由来の実行環境も対象に含める。
出典
- @MalwareBibleJP · 2026-10-17
- Noma Labs「SneakPeek」: noma.security