暗い濃紺の背景上の抽象的な技術イラスト:左端近くに、高さのある半透明の境界平面が立っており、細い淡い輪郭とすりガラス状の塗りで描かれている。1本の白い線が左から入り、その平面を通過して右へ続き、淡く光る4つのシアン色モジュールが並ぶ浅い列の外側にある小さな暗いブロックで終わる。細い破線の白いトレースが平面の直前で線から分岐し、平面の表面に取り付けられた小さな淡色の長方形で止まる。この長方形は形状のみで示されている。文字、人物、組織のロゴは一切表示されていない。OrcaRouterのロゴが右下隅に合成されている。
AI Safety Incidents

GhostApproval:6つのAIコーディングアシスタントが許可を求め、誤ったファイルを指定した

著者

Gideon Frost

公開日

最新モデル · 20すべてのモデルを見る →
ベンチマーク:Artificial Analysis · 毎日更新
すべての記事に戻る

2026年7月8日、セキュリティ企業WizはGhostApprovalを公開した。これは、リポジトリに仕込まれたシンボリックリンクによって6つのAIコーディングアシスタントがワークスペース外へ書き込むようになるという研究成果で、その書き込み先は~/.ssh/authorized_keys(恒久的なパスワードなしSSHアクセスを可能にする)や~/.zshrc(次回シェル起動時に実行される)だったが、確認ダイアログにはリンクが偽装していた無害なファイル名しか表示されなかった。WizはAmazon Q Developer、AnthropicのClaude Code、Augment、Cursor、Google Antigravity、Windsurfをテストし、6つすべてでこのパターンを報告した。実際の環境での悪用は報告されていない。この研究は概念実証のデモンストレーションであり、アーカイブの項目には実際の被害は記録されていない。3社は修正をリリースし、2社は報告を確認した後に返信を止め、1社はこの動作が脆弱性であること自体に異議を唱えた。そのOrca AI Incident Archiveには、この発見に関する完全な記録が、SANDBOXタイプタグの下に登録された他の項目とともに収められている。

プリミティブ自体は目新しいものではない。CWE-61として分類されているシンボリックリンク追従は、何十年も前から攻撃プリミティブだった。Wizは、競合状態、パッケージマネージャー、コンテナエスケープにおける以前の使用例を挙げているが、それらはいずれも、ツールがユーザー制御のパスをまず解決せずに書き込むことに依存していた。この発見に名前を付ける価値をもたらしたのは、第二の層だ。いくつかの製品では、アシスタント自身の推論が危険な宛先を特定していたにもかかわらず、人間に表示されたプロンプトがそれを隠していた。Wizはそれを、重要情報のユーザーインターフェース上の誤表示であるCWE-451として記録している。セキュリティ境界は存在していた。それを行使するために人に必要な情報は存在していなかった。

トリックの仕組みと、それが最終的に何に行き着くか

Wiz の悪意あるリポジトリは、意図的に退屈な作りになっています。その中には、project_settings.json という名前のシンボリックリンクが含まれており、これは開発者の SSH の authorized_keys ファイルを指します。さらに、ワークスペースのセットアップ中にエージェントへその「設定」を更新するよう指示する README も含まれています。開発者がアシスタントに README に従うよう求めると、エージェントはリンクをたどり、攻撃者の公開鍵を書き込みます。マシンで攻撃者が到達できる SSH サービスが実行されていれば、以降はパスワードなしのログインが可能になります。2 つ目の亜種では、同じおとりが ~/.zshrc を指すため、次にターミナルを開いたときにペイロードが実行され、SSH アクセスはまったく不要です。

Wizによる技術的障害の説明は短い。サンドボックスは、存在する場合には正規パスを検証しないため、プロジェクト内を対象とした書き込みは、リンクが指す先に書き込まれる。同社の実証実験は、同社自身の言葉によれば「トップAIコーディングアシスタント6製品」でこれを再現し、それぞれのスクリーンショットを公開した。影響を受けるのは、これらのツールのいずれかで自分が作成していないリポジトリを開くすべての人である。通常の開発者ワークフローでは、これにはフォークされたプロジェクト、サードパーティの依存関係、および外部コントリビューターのブランチに対するあらゆるコードレビューが含まれる。

間違ったファイルを指定したダイアログ

最も明確な証拠はClaude Codeから得られた。Wizのテストでは、エージェントの推論に、同社の引用によれば「project_settings.jsonが実際にはzshの設定ファイルであることがわかります」と記されていた。ユーザーに表示された許可プロンプトは「project_settings.jsonにこの編集を加えますか?」と尋ねていた。エージェントは書き込み先を把握していたが、それを承認した人物は把握していなかった。Wizは、その結果として得られた同意を「実質的に空」と呼び、ヒューマン・イン・ザ・ループの確認を形だけの承認と評している。

3つの製品は、不適切な表示ラベルよりも深刻な乖離を生み出した。Windsurfはファイルをディスクへ書き込んだ時点では、まだ「承認」と「拒否」のボタンは表示されていなかった。そのため、ダイアログは認可のゲートではなく、取り消しの申し出にすぎなかった。Wizによれば、ユーザーが拒否できた時点で、鍵はすでに配置されていた。Amazon Q Developerも同じ順序を示し、書き込みの後に「元に戻す」ボタンだけを提供した。Augmentは何も尋ねなかった。Wizは、プロジェクト外にあるおとりのAWS認証情報ファイルをチャットのトランスクリプトに表示させたシンボリックリンク経由の読み取りと、シンボリックリンク経由で~/.ssh/authorized_keysへの書き込みも実演した。この書き込みは、いかなるダイアログも伴わずに行われた。反対に、CursorとGoogle Antigravityは未解決のパスを表示し、解決済みのパスを認可するクリックを求めた。

Wizの最初のテストは2026年2月10日に実施され、報告書は2月12日から3月5日の間に送付された。その開示タイムラインには確認応答が記録されている。Anthropicが2月15日、Augmentが2月24日、Googleが2月26日、Cursorが3月2日、AWSが3月6日、そしてWindsurfを所有するCognitionが6月23日。最初の報告から約5か月後に公開開示が行われた。

HTML card headed 'Five months from first test to public disclosure', with a kicker reading 'GhostApproval · Wiz Research · disclosure sequence'. A vertical timeline lists the dated steps: 10 February 2026, initial discovery; 12 and 14 February, Augment read and write reports; 14 February, report to Anthropic; 15 February, Anthropic closes the ticket as Informative; 24 February, Augment acknowledges; 26 February, Google acknowledges; 2 March, Cursor acknowledges; 2 and 5 March, reports to Cognition and AWS; 22 May, Google deploys its fix; 27 May, AWS ships language server 1.69.0; 23 June, AWS publishes CVE-2026-12958 and Cognition acknowledges; 8 July 2026, public disclosure. An amber box records that Augment and Windsurf acknowledged receipt and supplied no further updates. A footer cites Wiz's disclosure timeline. The OrcaRouter logo is composited in the bottom-right corner.

6社のベンダー、3つの答え

Wizは調査結果を独自の深刻度尺度で評価しており、AWSではHigh、Augment、Cursor、Google Antigravity、WindsurfではCriticalに達している。3社はこの報告を脆弱性として扱い、修正をリリースした。アーカイブはこのエントリを高深刻度かつ信頼度Aと評価しており、主要なアドバイザリもメカニズムについてWizと一致している。

• Amazon Web Services.重大度は「高」で、CVE-2026-12958 として追跡され、Language Servers for AWS 1.69.0 で修正されています。2026年6月23日に公開された AWS 自身の bulletin 2026-047-AWS は、1.69.0 より前の「シンボリックリンク検証の欠落問題」を確認し、修正を搭載する最小のプラグインビルドを列挙しています。Amazon Q Developer for Visual Studio Code 2.20、JetBrains 用 4.3、Eclipse 用 2.7.4、および AWS Toolkit with Amazon Q for Visual Studio 1.94.0.0 です。回避策はないこと、ネットワーク設定が妨げない限り言語サーバーは自動更新されること、調整された開示に協力した Wiz に感謝することを述べています。CNA レコードでは、この問題を CVSS 4.0 で 8.5、CVSS 3.1 で 7.8 と評価しています。

• Cursor。クリティカル。CVE-2026-50549 として追跡され、Cursor 3.0 で修正済みです。この記録は 2026年6月25日に GitHub が CNA として公開し、CVSS 4.0 で 9.3 と評価されました。その説明は、Wiz のリポジトリに関する説明とは攻撃者をやや異なる形で位置づけています。悪意のあるエージェントがワークスペース内にシンボリックリンクを作成し、対象が存在しないか、パスから読み取り権限が剥奪されているためにパスの正規化を失敗させます。その後、書き込みは承認なしに元のパスへフォールバックし、サンドボックス外実行用のサンドボックスヘルパーを上書きできる可能性があります。

• Google.WizはAntigravityをCriticalと評価し、修正をバージョン1.19.6として記録しており、2026年5月22日に展開された。その重大度列には「Pending」と表示され、Wizの説明ではGoogleはCVEを発行するかどうかを評価中であり、AntigravityのCVE識別子は公開記録には見つからない。

• Augment.Wizの評価ではクリティカル、0.754.3で検証済み、2026年2月24日に確認され、公開時点では未修正。Cloud Security Allianceによるこの件のリサーチノートには、エージェントはユーザー自身の認証情報の下で動作するというAugmentの反論が記載されている。

• Windsurf.Wizの評価でCritical、ビルドV1.9566でテスト済み、Cognitionが2026年6月23日に確認、公開時点で未パッチ。

• Anthropic.異議あり。CVEは存在せず、Claude Codeのテスト済みバージョン2.1.42は、Wizの表で「Rejected」というステータスになっています。

HTML card headed 'One pattern, six products, six answers', with a kicker reading 'GhostApproval · vendor status at public disclosure, 8 July 2026'. A six-row table gives product, Wiz's severity rating, CVE identifier, fixed version and status: Amazon Q Developer, High, CVE-2026-12958, fixed in language server 1.69.0; Cursor, Critical, CVE-2026-50549, fixed in 3.0; Google Antigravity, Critical, no CVE published, fixed in 1.19.6 on 22 May 2026; Augment, Critical, no CVE, no fix, acknowledged 24 February 2026; Windsurf, Critical, no CVE, no fix, acknowledged 23 June 2026; Claude Code from Anthropic, Disputed, no CVE, rejected as outside the threat model. A note beneath reads that severity ratings for the products without a CVE are Wiz's own, not a CNA score, and that no exploitation in the wild was reported. A footer cites Wiz's vendor table, the AWS security bulletin and the two CVE records. The OrcaRouter logo is composited in the bottom-right corner.

Anthropicの拒否、そして報告に先立つ修正

Wizに対するAnthropicの回答は、熟慮された「ノー」だった。Wizの引用によれば、同社はこう書いている。「これは当社の現在の脅威モデルの範囲外です」「ユーザーがディレクトリで初めてClaude Codeを起動する際、セッションを開始する前にそのディレクトリを信頼することを確認する必要があります。あなたが説明したシナリオでは、ユーザーが悪意のあるシンボリックリンクを含むディレクトリ内で許可プロンプトを明示的に確認することを伴っており、これはClaude Codeの脅威モデルの範囲外です」。チケットは「Informative」としてクローズされた。

その推論には一貫した形がある。ユーザーはディレクトリを信頼し、その後で操作を承認した。つまり、同意の二つの瞬間はともに尊重されている。Wizの反論は、インフォームド・コンセントには正確な情報が必要だというものだ。project_settings.jsonを承認しつつ、書き込み先が~/.ssh/authorized_keysになるのは、形式的には決定であり、実質的には空の決定である。Wizはどちらの立場が正しいかを決着させたとは主張しておらず、本稿も同様である。実用的な観察としては、AWS、Google、Cursorが別の見解を取り、パッチを当てたということだ。

Wizはさらに、論争のさなかでClaude Codeの内部が変わっていたと報告した。同社は、現行バージョンではシンボリックリンクを解決し、機密ファイルへ書き込む前に警告すると記し、それがこの報告書に関係しているかどうかについてAnthropicが明言を避けたとも指摘した。2026年7月7日、AnthropicはWizが引用した訂正内容を提供した。「Edit/Write権限ダイアログのシンボリックリンク警告は、この報告書が当社に提出される9日前のv2.1.32(2026年2月5日)で出荷された。これは内部レビューに基づく予防的なセキュリティ強化の一環として追加された。コメントを控えたのは、当社のトリアージシステムからの自動返信だった。」

バージョンの時系列は整合しているが、何が変更されたかについての公開記録は一致しない。Claude Code 2.1.32は2026年2月5日17:03 UTCにnpmレジストリへ公開された。これは2月14日の報告の9日前であり、Anthropicの説明とまさに一致する。しかし、そのリリースの公開変更履歴エントリには12件の変更が列挙されており、エージェントチーム、メモリ記録、いくつかのUI修正が含まれるが、そのいずれもシンボリックリンクや権限ダイアログに言及していない。この正確な動作を記述する最初の変更履歴の行は、はるかに後のものだ。2026年9月22日にnpmへ公開されたバージョン2.1.280には、「シンボリックリンク経由のパスへの書き込みが、ツリー内の表記で判断される問題を修正: プロンプトに書き込み先が明示される」と記録されている。また、2026年10月1日の2.1.287には、リポジトリにコミットされたシンボリックリンクを経由して機密ファイルへ行われるシェル書き込みが、書き込み先を明示し、人の承認を待つようになったと記録されている。Wiz自身の観察である、2.1.173以降がシンボリックリンクを解決するということも、報告より後に位置する。2.1.173は2026年6月11日に出荷されたからだ。

何が確立されており、何が確立されていないのか

• 立証済み。 その仕組みは、リポジトリ内の囮のシンボリックリンク、それをたどるエージェント、ワークスペース外に到達する書き込み、そして誤ったパスを示す確認用サーフェスである。Wizは6製品すべてでこれを再現し、スクリーンショットを公開した。CVEレコードが2件存在し、それぞれのCNAによって公開されており、AWSの告知も1.69.0未満の穴と修正を独自に確認している。Anthropicはその挙動が発生したことを否定していない。否定しているのは、それが脆弱性であるという点である。

• 単一情報源。Augment、Windsurf、Google Antigravityの重大度評価は、3件のいずれにもCVEが公開されていないため、CNAスコアではなくWizの判断です。「WindsurfとAmazon Qがダイアログの表示前に書き込む」という主張は、Wizのスクリーンショットとナレーションに基づくものであり、この順序を公に確認したベンダーはありません。

• 係争中。ツールがユーザーに対して、欺瞞的なワークスペースから保護する義務を負うのか、それともディレクトリへの信頼とクリックによって問題は決着するのか。Anthropicは後者だと述べている。Wizは、自社が表示したプロンプトによってそのクリックは無意味になったと述べている。アーカイブはこの記録を係争中としてフラグ付けしていない。事実については合意があり、争われているのは解釈だけである。

• 未確認。公開以降にAugmentとWindsurfがこの脆弱性を修正したかどうか。本記事のために確認したすべての報道には、2026年7月15日のCloud Security Allianceの注記も含まれ、依然として両者を未修正と記述している。どちらのベンダーからも公開された修正告知は見つからなかった。

日付そのものには小さな微妙さがある。Wizの投稿とその開示タイムラインはいずれも2026年7月8日を示し、Infosecurity Magazineは概念実証が7月7日に公開されたと述べ、同誌自身の報道は7月9日としている。さらにアーカイブ項目は2026年7月9日(日単位の精度)と日付が付けられている。発見、報道、アーカイブは週については相違しておらず、日については最大2日ずれている。

6件のうち1件に関する先行研究には、別途の功績を認めるべきだ。CSO OnlineのEvan Schumanは2026年7月9日の記事で、Cato NetworksがWizのより広範な調査より前に、この脆弱性のCursorのみに影響する変種を報告していたと指摘した。2026年7月3日に公開されたSecurityWeekによるその研究の記事は、これをDuneSlideと名づけ、CVE-2026-50548とCVE-2026-50549をその2件に割り当て、両方に9.8のスコアを付け、それらを修正したCursor 3.0のリリース日を4月2日としている——これらの数値は、Cursorの修正の公開を6月5日とするWizのタイムラインとも、9.3で6月25日に公開されたCNAの記録とも一致しない。9.8と9.3は同じ脆弱性に対する2つの採点主体によるものであり、4月と6月の日付は、パッチがいつ出荷されたかについて食い違っているのではなく、リリースとアドバイザリをそれぞれ述べているのかもしれない。

その後、何が変わりましたか?

具体的には、Amazon Q Developer のユーザーは言語サーバー 1.69.0 に移行しており、ほとんどの構成では自動的に行われました。Google Antigravity のユーザーは 2026年5月22日から 1.19.6 に、Cursor のユーザーは 3.0 に、Claude Code のユーザーはリンクを解決するバージョンに移行しました。さらに、プロンプトの忠実性に関する変更が、2026年9月から10月にかけて 2.1.280 と 2.1.287 で行われます。Augment と Windsurf のユーザーは、公開時点で利用可能な証拠に基づくと、注目すべき日付だけを得て、それ以外は何も得ていません。

Wiz自身の提言は限定的かつ技術的なものだった。プロンプトを表示する前にシンボリックリンクを解決し、解決後のパスがワークスペース外にある場合は明示的に警告し、明示的な承認なしにディスクへ書き込みを行わない——つまりダイアログは取り消しボタンではなくゲートとして機能すべきだ、という内容だ。Cloud Security Allianceの注記はガバナンスの枠組みを加えている。コーディングアシスタントをエディタのプラグインではなく、ファイルシステムにアクセスできる特権ソフトウェアとして扱い、確認が表示される前にパスが解決されるかどうかをベンダーに直接尋ねるべきだ、としている。CSO Onlineが引用したIDCのKatie Nortonは、残存リスクをサプライチェーンがすでに存在する場所——外部のコントリビューター、フォークされたリポジトリ、サードパーティの依存関係——に置き、「内部で作成されたコードではなく」と述べた。

未解決なのは設計上の問題であり、バグではない。独立に構築された6つの製品が同じ流れに収束した——要求されたパスを表示し、クリックを信頼する——そしてその後の分岐は、仕組みではなく責任の所在に関するものだった。アーカイブの項目にはランドマークフラグが付いており、これはその記録が単一ベンダーの過ちではなく、あるカテゴリーを記述しているというアーカイブの判断である。その読み方に異論を唱えるのは難しい。同じ短い概念実証が6回もうまくいったのだから。

Abstract technical illustration on a dark navy field: a pale translucent check mark, drawn as a thin outline, floats above a small white rectangle that represents an approval surface. Beneath the rectangle a white line drops vertically, passes through a faint horizontal plane, and emerges on the other side pointing at a second dark rectangle that is drawn only as an outline, unlit. A soft amber glow marks the point where the line crosses the plane. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.