The most surprising thing about the AWS Kiro vulnerability is that a single invisible pixel on a web page can rewrite the IDE’s own configuration and launch attacker code on a developer’s machine. Intezer, working with Kodem Security, proved the point by hiding a one‑pixel white text block on an otherwise normal API documentation page. When Kiro fetched that page, it treated the hidden block as a setup task, edited its ~/.kiro/settings/mcp.json file, and immediately reloaded the malicious entry. That chain executed without ever showing the developer a meaningful approval prompt.
Key Takeaways
- Hidden text can trigger Kiro to rewrite
mcp.jsonand execute arbitrary shell commands. - The attack bypasses the human‑click “allow” safety model that Kiro relies on.
- AWS patched the flaw in version 0.11.130 and marked the affected files as protected paths.
- No CVE was assigned to this specific chain, though similar bugs received CVE‑2026‑10591.
- Developers should run Kiro in Supervised mode or enforce explicit approvals for any write to protected files.
AWS Kiro Vulnerability Overview
Kiro is AWS’s agentic coding IDE that can fetch URLs, run shell commands, and edit files on behalf of a developer. Its safety model assumes a developer will click an “allow” button before any risky operation runs. The model’s only security boundary is that approval step. In the discovered flaw, the boundary was sidestepped because Kiro could rewrite its own configuration file (mcp.json) without prompting the user, and then automatically reload the file, launching whatever command the attacker had planted.
Why the Config File Is Critical
The mcp.json file lists Model Context Protocol (MCP) servers and the exact command used to start each one. When Kiro detects a change to this file, it reloads the list and launches the described servers under the developer’s privileges. At the time of the research, Kiro’s fsWrite tool could write to mcp.json on its own, bypassing any approval dialog. That meant any attacker who could influence the file’s contents could cause Kiro to start an arbitrary process the instant the file was reloaded.
How the Hidden Text Attack Works
Getting malicious text into Kiro’s context is the easy part. Kiro pulls in external content whenever a developer asks it to fetch a URL, read documentation, or search the web. Intezer’s proof‑of‑concept planted its instructions in a CSS‑styled block that was one pixel tall, white‑on‑white (color:#fff;font-size:1px). The developer saw a clean API reference, but Kiro parsed the hidden block as a legitimate instruction.
Once Kiro read the hidden block, it used its fsWrite capability to add a rogue entry to mcp.json. The entry pointed to a server whose start command was the attacker’s payload. Kiro then reloaded the configuration, launching the rogue server immediately. In Intezer’s demo, the payload simply sent the machine’s hostname, username, and platform to a localhost listener every ten seconds—just enough to prove execution.
Potential Impact of the Payload
- Steal stored credentials and API keys.
- Exfiltrate source code repositories.
- Plant persistence mechanisms on the host.
- Pivot to internal services reachable from the developer’s workstation.
The researchers kept the callback pointed at localhost, so no real Kiro users were exposed. They also noted the attack isn’t perfectly reliable: the model’s non‑deterministic nature sometimes ignores the hidden block and just summarizes the page. In testing, the exploit succeeded within one or two attempts. One success is all it takes.
Historical Context and Prior Similar Bugs
Kiro isn’t the first AWS tool to let an agent write the file that governs what it can run. On Kiro’s release day in July 2025, Johann Rehberger of Embrace The Red demonstrated a prompt‑injection that dropped custom code into mcp.json and executed it the moment the file saved. AWS responded by adding an approval prompt for those writes, but only in Supervised mode. The default Autopilot mode, which Intezer used in 2026, kept writing the file on its own.
Later, Cymulate reported that Kiro would auto‑execute code written to .vscode/tasks.json whenever a folder opened. AWS assigned that bug CVE‑2026‑10591, rating it 8.8 under CVSS 3.1 and 8.6 under CVSS 4.0, and fixed it in the 0.11 series. The mcp.json chain remained live in versions 0.9.2 (macOS) and 0.10.16 (Ubuntu) when Intezer reported it in February 2026.
AWS’s Response and Patch Details
After Intezer disclosed the flaw through HackerOne on February 11 2026, AWS said by April 3 2026 that a fix had shipped in its latest release, though it never named the version. Intezer confirmed the patch lived in v0.11.130. The fix moves the trust decision off the model and into the platform: Kiro now marks mcp.json, .vscode/tasks.json, the .git directory, and other sensitive files as protected paths. Any write to those paths now requires explicit developer approval, regardless of whether Autopilot or Supervised mode is active.
“Supervised mode is a code review workflow, not a security control.”
AWS’s own documentation makes that point directly, emphasizing that the new capability‑based permissions model prompts for consent on anything a developer hasn’t already allowed. That combination closes the route Intezer took: the attack fails in 0.11.130, and the protected‑paths check holds in both Autopilot and Supervised modes.
What This Means For You
If you run Kiro on a development workstation, you should verify that you’re on version 0.11.130 or later. Check the IDE’s settings to confirm that mcp.json and other sensitive files are listed as protected paths. When you request Kiro to fetch a URL, be aware that the tool may still ingest hidden content; the safety model now forces a confirmation before any write, but the underlying risk of malicious content remains.
For teams that rely heavily on Autopilot mode, consider switching to Supervised mode for any production‑grade code. The extra review step isn’t a silver bullet, but it adds a human checkpoint that can catch unexpected writes before they execute. Also, audit your CI/CD pipelines for any automated Kiro invocations and enforce least‑privilege principles on the host machines.
Looking ahead, this episode shows that agentic AI tools can become their own attack surface when they’re granted unchecked file‑system authority. As more IDEs embed generative models, vendors will need to bake explicit permission checks into the core runtime, not just the UI layer. Will future AI‑assisted development environments learn from Kiro’s misstep, or will we see a new wave of “model‑driven” exploits?
Technical Architecture of Kiro
Kiro sits between a developer’s command line and a cloud‑backed language model. When a user types a request, the IDE translates it into a series of low‑level actions: retrieve a URL, parse the response, write files, or spawn a subprocess. Those actions are exposed through a small library that the model can call directly. The library includes fsRead, fsWrite, exec, and a network fetch routine.
The fetch routine follows HTTP redirects, honors cookies, and renders the raw HTML before passing it to the model. Kiro does not perform content sanitization; it assumes the model will only request the parts that are semantically relevant. That assumption is what allowed the one‑pixel block to slip through. When the model asks for a snippet, Kiro returns the exact characters, even if they are hidden by CSS.
After a write operation, Kiro watches the target path for changes. If the file matches a known configuration pattern—such as mcp.json—the IDE immediately reloads the internal representation. The reload step is a simple “read‑parse‑apply” loop that does not re‑prompt the user. In earlier releases the loop was gated by a UI flag, but the flag was only consulted in Supervised mode.
Because the model has direct access to the library, it can combine actions. A single prompt can cause Kiro to fetch a malicious page, write a new entry, and then invoke exec in the same transaction. The chain executes atomically, which makes detection harder for any external monitor that only looks at individual system calls.
This architecture gives developers a fluid experience. It also creates a narrow but powerful attack surface. The recent patch adds a “protected‑paths” list that the library checks before any write. If a write targets a protected file, the library throws an exception that bubbles up to the UI, forcing a manual confirmation.
Competitive Landscape
Kiro joins a growing field of AI‑augmented development tools. Competing products from other cloud providers also expose file‑system primitives to their language models. Those tools typically rely on a “sandbox” that limits the directories a model can touch. In practice, the sandbox rules often mirror the same pattern: a UI prompt blocks writes outside a predefined list.
When the prompt is absent, the same class of hidden‑text attacks could be replicated. Vendors that have already hardened their pipelines by default may avoid the exact flaw seen in Kiro, but the underlying risk remains. The industry is beginning to publish best‑practice guides that recommend “explicit consent for any configuration mutation.” Those guidelines echo the changes AWS made in version 0.11.130.
For customers who evaluate multiple platforms, the presence of a protected‑paths mechanism is now a baseline security feature. The ability to toggle between Autopilot and Supervised modes offers flexibility, but it also introduces operational decisions that affect risk. Teams must weigh convenience against the likelihood of a model‑driven supply‑chain compromise.
Key Questions Remaining
- Will future Kiro releases expand the protected‑paths list to cover user‑defined configuration files?
- How will third‑party plugins that extend Kiro’s library be vetted for similar write‑capabilities?
- Can the model be trained to recognize and discard hidden CSS tricks without human oversight?
Answers to those questions will shape how safe AI‑assisted coding becomes at scale. Until then, developers should treat every write operation as a potential entry point, even when the IDE appears to be “just fetching a page.”
Sources: The Hacker News, original report

