Claude code、CursorなどのAIコーディング6製品に脆弱性―偽の承認画面でSSHアクセス権奪われる恐れ

2026年7月13日 16:59

セキュリティ研究企業のWizは2026年7月8日、広く使われている6つのAIコーディングアシスタントに深刻な脆弱性が存在すると発表した。攻撃者が用意した悪意あるリポジトリを開発者がクローンし、AIエージェントにワークスペースのセットアップを指示すると、開発者のマシンに不正なSSHキーが書き込まれる恐れがある。この攻撃手法は「GhostApproval」と名付けられており、一部のツールでは依然として修正パッチが提供されていない。

■GhostApprovalの仕組みと影響を受けるツール

Wizの検証により影響が確認されたのは、Amazon Q Developer、AnthropicのClaude Code、Augment、Cursor、Google Antigravity、Windsurfの6ツールである。これらは現在、AI支援型コーディングを導入しているプロの開発者層の間で大きなシェアを占めている。

攻撃の起点となるのは、シンボリックリンク(Unix系ファイルシステムの機能で、あるファイル名を別のファイルへ密かに紐付ける仕組み)を含むリポジトリだ。攻撃者は、一見すると「project_settings.json」のような無害な名称でありながら、実際には開発者マシンのパスワードなしSSHアクセスを制御する「~/.ssh/authorized_keys」を指すシンボリックリンクを作成する。リポジトリのREADMEやエージェント設定ファイルを通じて、AIアシスタントに「設定ファイルに1行追加する」よう指示すると、エージェントはシンボリックリンクを辿り、攻撃者のSSH公開鍵を開発者のauthorized_keysに書き込んでしまう。開発者のマシンがネットワーク経由でSSHアクセス可能な状態であれば、攻撃者は開発者に気づかれることなく、持続的なリモートアクセス権を手に入れることになる。

また、別のバリエーションとして、シェルの起動ファイルである「~/.zshrc」に攻撃者のペイロードを埋め込む手法も確認されている。シェルはターミナルが開くたびにこのファイルを実行するため、攻撃者はSSHアクセスを使わずに持続的なコード実行を達成できる。

■「人間による確認(Human in the Loop)」が機能しない理由

GhostApprovalの本質的な問題は、AIエージェントがシンボリックリンクを辿ること自体ではない。シンボリックリンクを悪用した攻撃はUnixの初期から知られており、プログラムがこれに対処しきれない事例は数十年にわたり繰り返されてきた。この問題が構造的に深刻なのは、セキュリティ管理策として機能すべき「承認プロンプト(確認画面)」の内部で欺瞞が発生している点にある。

AIエージェントがファイルへの書き込みを行う際、多くのツールはどのファイルが変更されるかを示す承認ダイアログを表示する。しかしGhostApprovalにおいては、ダイアログに書き込み先の「真のパス」ではなく、シンボリックリンクの名称(無害に見えるproject_settings.jsonなど)が表示されてしまう。開発者は日常的な設定変更だと思い込んで「承認(Accept)」をクリックするが、実際の書き込みは「~/.ssh/authorized_keys」に対して行われる。

特にClaude Codeのケースで顕著だったのは、エージェント自身の内部的な推論チェーンにおいては、何が起きているかを正しく認識していた点だ。Wizのテスト中、Claude Codeは内部で「project_settings.jsonは実際にはzshの設定ファイルである」と正確に特定していた。しかし、その正確な認識が開発者に示される承認ボックスに反映されることはなかった。エージェントは真実を知っていたが、開発者には別の情報が表示されていたのである。Wizの研究者であるマオル・ドハニアン(Maor Dokhanian)氏は、「人間による確認(Human-in-the-Loop)というセキュリティモデルは、そのループに正確な情報が提供されて初めて機能する。エージェントが表示とは異なる行動をとる場合、ユーザーの承認は無意味になり、確認ダイアログはセキュリティ管理策から単なる形骸化した手続きへと変わってしまう」と指摘している。

ここには、承認表示レイヤーとエージェントの内部推論チェーンが分離しているという構造的なギャップが存在する。一方はシンボリックリンクを正しく解決しているが、もう一方は解決していない。承認をクリックするユーザーは、見たこともないファイルの編集に同意させられていることになる。

さらに根本的な問題を抱えるツールもある。Wizの調査によると、Windsurfは承認ダイアログが表示される前に、すでに攻撃者のSSHキーをディスクに書き込んでいた。開発者が「承認」や「拒否」のボタンを目にする頃には、書き込みは完了している。この場合のボタンは「実行の防止」ではなく、単なる「取り消し(Undo)メカニズム」にすぎない。また、Augmentにいたってはダイアログを一切表示せず、プロジェクトディレクトリ外に保存されているAWSの認証情報を密かに読み出す様子が実証された。

■ベンダー各社の対応状況

Wizは2026年2月に最初のベンダー報告を行い、90日以上の猶予期間を経て、2026年7月8日の公開までに共同開示プロセスを完了させた。しかし、ベンダー側の対応は一様ではない。

Amazon Q Developerは、2026年5月27日にリリースされたLanguage Serverバージョン1.69.0(CVE-2026-12958)でこの問題を修正した。AWSによると、ほとんどのユーザーにはアップデートが自動適用されるが、自動アップデートがブロックされているネットワーク環境では、IDEの再読み込みやプラグインの手動インストールが必要になる。なお、Amazon Qにはこれとは別に、汚染されたリポジトリが設定ファイルを自動ロードしてAWS認証情報を窃取できる別の脆弱性(CVE-2026-12957)も存在したが、こちらも修正済みである。

Cursorは、2026年6月5日にリリースされたバージョン3.0(CVE-2026-50549)で問題を修正した。Cursorのアドバイザリでは、WizとCato AI Labsの両社に謝意が示されている。Cato AI Labsは「DuneSlide」という名称で、Cursorのサンドボックスにおける同様のシンボリックリンクの欠陥を特定していた。

Googleは、2026年5月22日にリリースされたAntigravityバージョン1.19.6で問題を修正した。正式なCVE番号の割り当ては保留中である。

AugmentとWindsurfは、いずれもWizからの報告を受け取ったことを認めている(Windsurfの受領確認は2026年6月23日)。しかし、本稿執筆時点(2026年7月10日前後)で、両社とも修正パッチの提供やリリーススケジュールの公表を行っていない。

Anthropicの立場は、これら6社の中で例外的なものとなっている。同社はWizに対し、GhostApprovalのシナリオは「現在の脅威モデルの想定外」であると回答した。その理由は、セッション開始時にリポジトリを信頼し、さらにファイルの編集を明示的に承認した開発者自身が決定を下したものであり、ツールはその決定に従ったにすぎないという解釈だ。一方で同社は、Claude Codeにおいて2026年2月5日(Wizの報告の9日前)にリリースされたバージョン2.1.32の時点で、内部的な予防的セキュリティ強化の一環としてシンボリックリンクに関する警告機能をすでに導入していたと言及。また、初期の無回答は自動トリアージによる返答であり、意図的な無視ではないと説明している。

この議論は、単一のベンダーに留まらない設計上の本質的な問いを投げかけている。開発者がリポジトリを明示的に信頼し、ツールが日常的な設定編集として提示した内容を承認した場合、ツールはその役割を果たしたと言えるのだろうか。これに対する反論として、重要な情報のユーザーインターフェース上での誤表示を正式なセキュリティ弱点として分類する「CWE-451」が挙げられる。「project_settings.json」を承認することと「~/.ssh/authorized_keys」を承認することは同義ではなく、通常の開発者がこれらを同一のものと理解することは不可能だ。エージェントが知っている情報とユーザーに伝える情報の非対称性こそが脆弱性である、という見方が支持されている。

■3つの独立したチームが同じ構造的弱点を発見

この種の脆弱性が文書化されたのは、GhostApprovalが初めてではない。2026年5月、Adversa AIは「SymJack」と呼ばれる別の調査結果を公表し、Claude Code、Cursor、GitHub Copilot、xAIのGrok Build、Gemini CLI、OpenAI Codexを含む6つのAIコーディングツールに対して、同様のシンボリックリンクを用いた承認プロンプトの偽装手法をテストした。結果、6製品すべてに脆弱性が存在することが判明した。Adversa AIは対象ベンダーに報告したが、Google、Anthropic、Cursorはいずれも当初はこれを脆弱性として分類することを拒否した。しかしその後、AnthropicはClaude Codeをアップデートし、承認プロンプトを表示する前にシンボリックリンクを解決するよう仕様を変更している。

CursorのCVE-2026-50549アドバイザリが、WizとCato AI Labs(DuneSlideとして報告)の両方に謝意を表している点からも、複数の独立した研究が同じ根本的パターンにたどり着いたことがわかる。セキュリティコンサルタント企業AcceligenceのCEOであるジャスティン・グライス(Justin Greis)氏は、「6つの異なるベンダーが独立して極めて類似した信頼モデルに到達していた。これは、個別の実装バグの集まりというよりも、業界全体にわたる設計上の課題に直面していることを示唆している」とコメントしている。

■すでに稼働している攻撃インフラ

GhostApproval自体が実際の攻撃に悪用された事例はまだ確認されておらず、Wizはこれを研究段階のものとしている。しかし、信頼できないリポジトリを開いた開発者を標的に、AIコーディングエージェントの設定ファイルを武器化する手法は理論上の話ではない。これは、2026年6月1日から活動が確認されているワームキャンペーン「Miasma」の実際の攻撃手法と一致している。

2026年6月5日、脅威グループ「TeamPCP」によるものとされるMiasmaワームが、MicrosoftのAzure GitHub組織に到達した。侵害されたコントリビューターアカウントが、Azure/durabletaskリポジトリに悪意あるコミットをプッシュした。このコミットにはソースコードの変更は含まれておらず、代わりにClaude Code(.claude/settings.json)、Gemini CLI (.gemini/settings.json)、Cursor (.cursor/rules)、VS Code (.vscode/tasks.json) を標的とした5つの設定ファイルが追加されていた。これらは、開発者がいずれかのツールでリポジトリを開いた瞬間に、4.6メガバイトの資格情報窃取ペイロードを実行するように仕組まれていた。GitHubの自動検知システムは、105秒間のスイープで4つのMicrosoft組織にわたる73のリポジトリを無効化した。

Miasmaのペイロードは、AWSキー、Azure資格情報、GCPサービスアカウント、GitHubトークン、Kubernetesシークレット、npmトークン、さらには1Passwordやgopassなど90以上の開発者ツールチェーンからのデータを探索するものだった。パッケージのインストールを必要としないため、標準的な脆弱性スキャナーでは検知されず、CVEも割り当てられていない。

■開発者が今すぐ取るべき対策

Amazon Q Developer、Cursor、Google Antigravityのユーザーは、修正済みのバージョンがインストールされていることを確認する必要がある。具体的には、Amazon Q DeveloperはLanguage Serverバージョン1.69.0以降、Cursorはバージョン3.0以降、Antigravityはバージョン1.19.6以降へのアップデートが必要だ。

未修正のAugmentおよびWindsurfのユーザーに対して、Wizはパッチが提供されるまで、信頼できないソースからのリポジトリに対してAIエージェントを実行しないことを強く推奨している。このアドバイスは、パッチ適用済みのツールであっても同様に当てはまる。パッチが承認ダイアログの強化だけに留まり、根本的な信頼モデルが改善されていない場合、悪意あるリポジトリを使用するリスクは依然として残るためだ。

ツール固有のアップデートに加え、以下の対策が推奨される。まず、ファイルシステムへのアクセスを制限したコンテナやサンドボックス内でエージェントを実行することだ。これにより、シンボリックリンクが「~/.ssh/authorized_keys」を指していても無効化できる。また、エージェントに指示を出す前に、リポジトリのREADMEや設定ファイル(特にファイルの変更やセットアップコマンドの実行指示)を確認する習慣をつけることも有効だ。さらに、不審なリポジトリでエージェントを実行した後は、「ls -la ~/.ssh/authorized_keys ~/.zshrc」などのコマンドを実行してファイルのタイムスタンプを確認し、プロジェクト外の重要なファイルに書き込みが行われていないかを検証することが推奨される。

■注目ポイントQ&A

●GhostApproval脆弱性に対して、どのAIコーディングツールが修正パッチを配布済みですか?

Amazon Q Developer(Language Serverバージョン1.69.0、CVE-2026-12958)、Cursor(バージョン3.0、CVE-2026-50549)、およびGoogle Antigravity(バージョン1.19.6)が修正済みです。AugmentとWindsurfは脆弱性を認めているものの、2026年7月10日時点でパッチのリリース時期を明らかにしていません。Anthropicは脆弱性としての分類に異議を唱えていますが、Claude Codeのバージョン2.1.32以降には予防的なセキュリティ強化としてシンボリックリンクの警告機能が含まれています。

●リポジトリ内のシンボリックリンクによって、どのようにSSHアクセス権が奪われるのですか?

悪意あるリポジトリ内に、一見無害な名前(project_settings.jsonなど)で、実際には「~/.ssh/authorized_keys」などの重要なシステムファイルを指すシンボリックリンクを配置します。開発者がAIエージェントにワークスペースのセットアップを指示すると、エージェントはそのファイルを編集しようとします。OSはシンボリックリンクをそのまま辿るため、書き込みは実際のターゲット(authorized_keys)に行われ、攻撃者のSSH公開鍵が登録されてしまいます。これにより、攻撃者はパスワードなしで開発者のマシンにリモートアクセスできるようになります。

●開発者自身が書き込みを承認しているのに、なぜこれが脆弱性とみなされるのですか?

開発者は「project_settings.json」というローカル設定ファイルの編集を承認しているのであり、SSHキーの注入を承認しているわけではないからです。承認ダイアログの役割は、ユーザーが何を許可しようとしているのかを正確に示すことです。ダイアログに表示されるファイルと実際の書き込み先が異なる場合、開発者は正しい情報に基づいた判断ができません。これはUIにおける重要情報の誤表示(CWE-451)に該当し、ブラウザが偽装されたURLではなく実際のドメイン名を表示しなければならないのと同じ原理です。

元記事: Six AI Coding Tools Show Wrong File in Approval Box, Handing Attackers SSH Access

関連記事

最新記事