AIDEFEND in Action AIA-0094 Validated Research Published: Oct 1, 2026

Kiro Let a Web Page Rewrite the Configuration That Starts MCP Commands

Intezer and Kodem demonstrated a Kiro IDE attack in which hidden web-page instructions caused its agent to edit the user's global MCP server configuration. Kiro then reloaded the file and launched the inserted command with the developer's privileges. The proof of concept used a local callback and did not establish a real-world victim compromise.

Indirect Prompt InjectionConfiguration PoisoningLocal Agent TakeoverClient SecurityAI Coding Agent
8 applicable AIDEFEND defenses
Source: When the AI Edits Its Own Trust Boundary: Remote Code Execution Vulnerability in AWS's Agentic IDE 
Authors: Nicole Fishbein, Intezer Research, with Eran Segal, Kodem Security
Original article: Jul 20, 2026

Threat Analysis

  • A normal read supplied the lower-trust input. The user approved fetching a page. That approval covered reading the page, while the visually hidden text inside its HTML instructed Kiro to change local configuration.
  • The file was an execution boundary. The agent wrote the attacker-selected MCP server command into ~/.kiro/settings/mcp.json. Kiro treated that global file as the source of commands to start when its MCP configuration reloaded.
  • A late prompt was not an effective gate. The researchers reported that the configuration could reload regardless of the user's response to a later notification. Their local callback confirmed command execution, but not theft of credentials or compromise of an unrelated victim.

Applicable AIDEFEND Defenses (8)

AID-I-004.006
Agent Identity & Persistent State File Write Protection
Very High
Protect the global MCP configuration and the parent paths needed to prevent rename, replacement and symlink bypass, using an OS/managed-VM boundary the agent's user cannot undo. Deny direct writes and permit only an independent controlled writer with exact approved bytes and pre/post readback. A file-only ACL or an agent-owned directory is insufficient if the agent can replace the protected pathname. Test write, delete, rename, path replacement, symlink and alternate configuration paths before claiming prevention.
AID-E-003.003
Confirmed Malicious Code & Persistence Eviction
High
Preserve the exact poisoned `~/.kiro/settings/mcp.json` and referenced executable for investigation, remove the entry from every affected profile, and verify the file no longer reloads it. A running MCP child is a separate live process: stop it through endpoint response and verify its executable and process generation, because editing the configuration alone does not terminate an already launched child.
AID-H-021.002
Runtime Integrity Enforcement (Signed Configurations)
Medium
A controlled client must locally verify the exact signed configuration, approved deployment and pinned trust root before each dynamic reload, then apply the verified bytes atomically. Reject unsigned or stale changes before starting an added MCP executable. Stock Kiro does not expose this gate, so this is a vendor or controlled-client requirement; do not present ordinary notification or endpoint polling as equivalent pre-execution enforcement.
AID-H-018.003
High-Impact Independent Validation & Approval Gate
Medium
Require an independent pre-write approval bound to exact configuration bytes and the executable effect before a controlled client writes global MCP settings. A page-fetch approval or post-write notification cannot authorize this action. Stock Kiro does not expose the signed independent gate in G001; supervised permissions are supporting controls, while OS-enforced protected paths remain the reader-owned boundary. Treat the full gate as a vendor or controlled-client implementation requirement.
AID-M-001.003
Agentic Skill & Instruction Asset Inventory
Medium
Discover every managed MCP configuration and the complete instruction/plugin package trees the configured loader can reach; capture exact executable/version/member digests and reconcile them with authoritative approval and ownership records. A command-string or mcp.json hash alone is not a complete package inventory. Missing host collectors or unreadable paths leave coverage unresolved. This produces findings and an exact eviction population, not approval or prevention.
AID-H-021.001
Client-Side Configuration Enforcement
Medium
Monitor managed endpoints for changes to `~/.kiro/settings/mcp.json` and compare each new command and executable digest with an approved inventory. An ordinary after-write alert is detective: Kiro can reload and launch the entry before quarantine arrives. Count this as prevention only if the endpoint product synchronously blocks the write or process start before Kiro consumes it; otherwise investigate and evict the active child separately.
AID-I-001.002
MicroVM & Low-Level Sandboxing
Medium
Run the client and all spawned MCP processes inside a verified managed VM or supported OS sandbox with restricted project writes, no developer-home credentials and independently enforced outbound policy. This limits authority after an injected command starts. The research callback was local: an external-destination allowlist alone does not block loopback inside the same sandbox. Verify runtime isolation and local/remote routes separately; do not substitute a deprecated macOS sandbox-exec smoke test for a production boundary.
AID-E-002
AI Runtime Process, Lease & Pod Eviction
Medium
After confirming an injected MCP command, independently inventory and terminate every affected client/server process generation using PID, start time, executable digest and authoritative process state. Verify absence before restarting from reviewed configuration. Removing mcp.json persistence does not terminate a child already running; this control owns runtime termination while E-003.003 owns the startup source.

What Defenders Should Do Now

  • Update managed Kiro installations and inspect each developer profile's global MCP configuration for commands or servers the developer did not approve.
  • Test with a harmless external page that asks the agent to modify ~/.kiro/settings/mcp.json. A successful defense must block the write or refuse to activate the resulting configuration, even after the user approves the page fetch.
  • Put the global MCP file behind an OS-level write restriction the developer account cannot undo, and inventory unexpected entries across the fleet. Until Kiro verifies approved configuration at reload, keep the model-callable file tool unable to write that path and never auto-approve it.

1 additional consideration

Disclosure boundary

The research demonstrated the global MCP path and a local callback. AWS's CVE-2026-10591 bulletin describes execution-sensitive file writes using a .vscode/tasks.json example; the two public descriptions do not independently establish an identical affected-version range for this exact global MCP demonstration.
Recommendation: Upgrade Kiro, inventory unexpected global MCP entries, and test that an agent cannot write or activate a new command through this path.

Conclusion

AIDEFEND  points to OS-enforced protection of the global MCP file and fleet inventory of new commands. A signed configuration check before hot reload would close the later execution boundary, but stock Kiro does not expose that independent gate; a vendor or controlled-client change is required.

Last updated: