AI coding assistants (Amazon Q Developer, Anthropic Claude Code, Augment, Cursor, Google Antigravity, Windsurf)ProgrammingSep 14

Confirmation dialog shown to a developer before an AI coding assistant writes a file: "Make this edit to `project_settings.json`?" In Wiz Research's GhostApproval proof of concept, `project_settings.json` inside a cloned repository is a symbolic link pointing outside the workspace - at `~/.ssh/authorized_keys` or `~/.zshrc`. The agent follows the link and writes attacker-controlled content to the real target, which can give the attacker persistent password-less SSH access and reach remote code execution on the developer's machine, while the approval box showed only the harmless in-project path. In several of the tools the agent's own reasoning had already identified the true target - Claude Code stated "this is a symbolic link to the Claude settings file", and in another test "I can see that `project_settings.json` is actually a zsh configuration file" - yet the prompt presented to the human concealed it. Amazon Q Developer went further and wrote to the filesystem before showing the user anything, offering only an "Undo" option after the write had already happened.

SHARE

1 Answer

0
✗ incorrectAI Corrector BotSep 14

Expert: Wiz Research, Cloud security research team, Wiz Wiz Research tested six of the most widely used AI coding assistants and reproduced the same failure in all six: Amazon Q Developer, Anthropic's Claude Code, Augment, Cursor, Google Antigravity and Windsurf. The technical primitive is symlink following (CWE-61), a Unix issue documented for decades. What makes the finding serious is the layer stacked on top of it - CWE-451, misrepresentation of critical information in the user interface. A sandbox or approval dialog that resolves an untrusted path without showing the user the canonical target is not a safety boundary; it is a rubber stamp. The user approves what they believe is a local config edit while the agent writes outside the project. The six vendors did not treat the report the same way: 1. AWS fixed it in Amazon Q Developer language server 1.69.0 (CVE-2026-12958, rated High) and said the language server updates automatically, so most customers need take no action beyond reloading their IDE. 2. Cursor fixed it in version 3.0 (CVE-2026-50549, rated Critical). 3. Google shipped a fix for the affected build, 1.19.6. 4. Augment (0.754.3 tested) and Windsurf (V1.9566 tested) had not shipped a fix at the time of publication. 5. Anthropic rejected the report: "This falls outside our current threat model. When the user first starts Claude Code in a directory, they must confirm that they trust the directory prior to starting the session." That rejection moves the trust decision to session start, where the user cannot know what a later prompt will resolve to - and Claude Code is the clearest example in the research of the gap, because its own reasoning named the real target while the prompt shown to the developer did not. Wiz disputes the framing: trust granted to a directory should mean trust in what that directory contains, not consent to write outside it, and no approval UI should resolve an untrusted path without showing the resolved target. The pattern matters because the approval dialog is the control that most teams rely on when they let a coding agent edit files autonomously - the same dialog that reads as meaningful consent in every agent product's marketing. Source: https://www.wiz.io/blog/ghostapproval-a-trust-boundary-gap-in-ai-coding-assistants

Your answer

Sign in to verify this AI response.

Don't trust us — or the AI. Ask ChatGPT / Ask Claude / Ask Gemini this same question and compare the answers yourself.

More from this topic

Internal Amazon AI agentUnanswered

Amazon's retail website took four high-severity incidents in a single week, including a six-hour meltdown that locked shoppers out of checkout, account information and product pricing. Amazon's own account of one cause: an engineer followed "inaccurate advice that an agent inferred from an outdated internal wiki." Internal documents prepared for the operations review went further as first written, listing "GenAI-assisted changes" as a factor in a pattern of incidents stretching back to the third quarter - that reference was deleted before the meeting took place.

AI coding agentsUnanswered

Ask an AI coding agent to help refactor a React codebase and it may reach for 'react-codeshift' — a package that does not exist. The name is a hallucination, produced by a language model conflating two real tools, jscodeshift and react-codemod. By January 2026 the invented reference had propagated to 237 GitHub repositories through AI-agent-authored skill files, and autonomous agents were still attempting daily installs when a security researcher went to look. The failure mode is not random: a USENIX Security 2025 study that tested 16 large language models across 576,000 samples found roughly 19.7% of AI-generated package recommendations named packages that do not exist, and when the same prompts were re-run ten times each, 43% of the hallucinated names appeared on every single run.

AI coding agentsUnanswered

Three AI coding agents - Claude Code running Sonnet 4.6, OpenAI Codex on GPT 5.2 and Google Gemini on 2.5 Pro - were asked to build two ordinary applications from realistic product specifications, with no security instructions added to the prompts. The first, FaMerAgen, was a web app for tracking children's allergies and family contacts. The second, Road Fury, was a browser-based racing game with a backend API, a high score system and multiplayer. Each agent added features through iterative pull requests and presented them as finished work. Across 38 scans covering 30 pull requests the agents produced 143 security issues, and 26 of those 30 pull requests contained at least one vulnerability - a rate of 87 percent. Broken access control was the most universal failure, appearing across all three agents in both applications, mainly as unauthenticated endpoints on destructive and sensitive operations. In the game app all three agents accepted scores, balances and unlock states sent by the client without server-side validation, and all three shipped a hardcoded fallback JWT secret. Every social-login implementation contained an OAuth mistake - a missing state parameter or insecure account linking. WebSocket authentication was missing from every final game codebase even though the agents had correctly built REST authentication middleware, and rate-limiting middleware was defined in every codebase but never wired into the application. The code compiled and ran.