CVE-2025-53773 enabled RCE via prompt injection in GitHub Copilot Agent Mode

CVE-2025-53773 is a command injection vulnerability in GitHub Copilot and Visual Studio that permits an unauthorized attacker to execute code locally via prompt injection. An attacker embeds malicious instructions in content processed by Copilot, such as source code files or pull request descriptions, which instructs the agent to modify workspace settings and disable user approval for command execution. Microsoft patched the vulnerability on August 12, 2025 as part of Patch Tuesday after discovery by security researchers Johann Rehberger, Markus Vervier, and Ari Marzuk.

GitHub · Incident Jul 1, 2025 · Indexed Jun 4, 2026 · 3 sources

Prompt injection in untrusted repository content silently toggled autoApprove in settings.json, turning a coding assistant into a remote shell.
What
CVE-2025-53773 is a command injection vulnerability in GitHub Copilot and Visual Studio that permits an unauthorized attacker to execute code locally via prompt injection.
Incident date
Jul 1, 2025
Who
GitHub
Failure mode
Prompt Injection
AI surface
Copilot
Severity
High

What happened

An attacker planted a prompt injection payload in content that GitHub Copilot processes, such as a source code file or pull request description in a public repository. When a developer using Copilot Agent Mode interacted with that content, the injected instructions caused Copilot to silently add chat.tools.autoApprove with value true to the project .vscode/settings.json file, disabling all user confirmation dialogs for subsequent tool calls. A follow-on instruction then directed Copilot to execute an arbitrary terminal command on the developer machine, achieving full remote code execution. The attack could further propagate by instructing Copilot to insert the malicious payload into other repository files, creating a wormable self-replicating infection across projects.

What broke inside the model

Failure path · mode profile · Prompt Injection
  1. 01 · TriggerThe model reads retrieved or user-supplied text.
  2. 02 · Model stepThat text carries hidden instructions.
  3. 03 · Control gapNothing separates untrusted data from trusted commands.
  4. 04 · FailureThe injected instruction overrides the operator's.
  5. 05 · ConsequenceThe system acts on an outsider's intent.

At the injection point, retrieved text overrides the operator's instruction.

GitHub Copilot Agent Mode could create and modify files in the workspace without requiring explicit user approval, including security-sensitive configuration files like .vscode/settings.json. When the LLM processed untrusted external content containing prompt injection payloads, it failed to distinguish between data and instructions, obeying the injected directive to set chat.tools.autoApprove to true. This disabled all subsequent user confirmation prompts for tool calls, allowing the attacker to chain a second injected instruction that executed arbitrary terminal commands on the developer machine.

Public visibilityHigh
Regulatory exposureNone
Customer impactClass-wide
Financial impactUnknown
Time to disclosureWeeks
  1. PrimaryCVE-2025-53773 - GitHub Copilot and Visual Studio Remote Code Execution Vulnerabilitymsrc.microsoft.com
  2. PressGitHub Copilot: Remote Code Execution via Prompt Injection (CVE-2025-53773)embracethered.com
  3. PressAI Attack Surface: How Agents Raise the Cyber Stakesdarkreading.com
Permalinkhttps://failureindex.ai/failures/cve-2025-53773-enabled-rce-prompt
CitationAI Failure Index. "CVE-2025-53773 enabled RCE via prompt injection in GitHub Copilot Agent Mode" (FI-0172). Realm Labs. https://failureindex.ai/failures/cve-2025-53773-enabled-rce-prompt (indexed Jun 4, 2026).
Share cardA branded image of this record for posts and slides.

Data fields CC-BY 4.0, prose citation permitted. Incident ID FI-0172. Full dataset at /data.

Note from Realm Labs, the Index steward

How Realm would have caught this

Controls for this failure mode
  • Prism
  • OmniGuard

Realm inspects the model's internal state for the signature of instructions arriving through the data channel, so an injected command can be flagged and blocked inline before the model acts on it, instead of trusting a classifier that scores the input as safe.