On February 10, 2026, Microsoft shipped a patch for CVE-2026-103572, an unauthenticated code execution vulnerability in the GitHub Copilot integration for Visual Studio and SQL Server Management Studio (SSMS). The flaw was responsibly reported by security researcher Johann Rehberger (Embrace The Red) in August 2025 and has been classified by Microsoft as Important severity. Do not let the 'Important' label lull you into a slow patch cycle — this is an arbitrary command execution primitive delivered through a developer workstation, and developer workstations are among the highest-value targets in any enterprise.
The root cause is deceptively simple — as the researcher put it, 'a . is all you need.' Copilot in Visual Studio and SSMS can be induced to bypass a path validation check and write to its own settings and configuration files. By overwriting its own configuration, the AI assistant escapes its intended containment restrictions and achieves arbitrary command execution with the privileges of the user running the IDE.
This matters for defenders on two fronts. First, it is a direct remote-to-local code execution path against some of the most privileged users in your organization: developers and database administrators, who routinely hold source code access, signing keys, deployment credentials, and production database connections. Second, it is a leading indicator of a new vulnerability class — AI agent containment escape — that SOC teams must begin treating as a first-class threat model.
Technical Analysis
Affected Products
- Microsoft Visual Studio with the GitHub Copilot extension/integration (Copilot-assisted coding features)
- SQL Server Management Studio (SSMS) with Copilot integration
- Platform: Windows (both products are Windows-hosted developer/DBA tooling)
Refer to the Microsoft Security Update Guide entry for CVE-2026-103572 for the exact affected and fixed version builds for your Visual Studio channel (Current, Preview, LTSC) and SSMS release.
Severity
- CVE: CVE-2026-103572
- Vendor severity: Important (Microsoft classification)
- Type: Unauthenticated code execution / path validation bypass leading to arbitrary command execution
How the Vulnerability Works — Defender's View of the Attack Chain
- Entry point: The attacker does not need credentials or prior access to the victim machine. The exploitation vector rides on Copilot's normal operation — the AI assistant processing content (prompts, code context, or externally influenced input) while running inside Visual Studio or SSMS. This is consistent with the emerging class of indirect prompt injection / agent hijacking attacks, where attacker-controlled content steers an AI assistant into performing actions on the victim's behalf.
- Path validation bypass: Copilot's tooling includes a check intended to restrict where the assistant may write files. A trivially crafted path element — a single
.(dot) segment — defeats the canonicalization logic, allowing a write operation that should have been blocked to resolve into a location the validator believed was out of scope. - Self-configuration overwrite: The attacker steers Copilot into writing to its own settings and configuration files — the very files that define what Copilot is allowed to do, which commands it may invoke, or which extensions/hooks it loads.
- Containment escape and execution: With its guardrail configuration replaced, Copilot escapes its sandboxed/contained behavior and executes arbitrary commands as the logged-on user. From there, the attacker has a conventional post-exploitation foothold: credential access, source code theft, persistence, or lateral movement via the developer's reachable infrastructure (repos, pipelines, SQL Servers, cloud subscriptions).
Why This Attack Chain Is Dangerous
- The IDE is a trust pivot. Visual Studio and SSMS processes legitimately spawn compilers, debuggers, script hosts, and SQL tooling. Malicious child processes can hide inside an extremely noisy, high-privilege process tree.
- DBA impact via SSMS. SSMS users frequently hold
sysadminor equivalent production database roles. Code execution in a DBA's session is a short hop to production data. - Supply-chain adjacency. A compromised developer workstation is a classic entry point for build-pipeline and package-repository poisoning.
Exploitation Status
- Public disclosure: February 2026, coordinated with Microsoft's patch release (Embrace The Red write-up published the same day the fix shipped).
- In-the-wild exploitation: No confirmed active exploitation has been reported at time of writing.
- CISA KEV: Not listed as of publication — monitor the KEV catalog; AI-assistant RCE primitives on developer endpoints are attractive and this status can change quickly.
- PoC: The researcher's disclosure documents the technique. Treat working exploitation as publicly derivable and patch accordingly.
Detection & Response
The most reliable detection surface for this vulnerability class is process lineage and file integrity around the IDE processes (devenv.exe, Ssms.exe) and their Copilot components. The containment escape culminates in two observable behaviors: (1) unexpected writes to Copilot configuration/settings files, and (2) the IDE or its Copilot child processes spawning command interpreters or script hosts.
Sigma Rules
---
title: Visual Studio or SSMS Spawning Command Interpreter - Possible Copilot Containment Escape
description: Detects Visual Studio (devenv.exe) or SQL Server Management Studio (Ssms.exe) spawning command interpreters, script hosts, or LOLBins, consistent with post-exploitation following a Copilot arbitrary command execution primitive such as CVE-2026-103572.
id: 8f2c1a94-3b7e-4d61-9c05-2e7a6b48f1d3
status: experimental
author: Security Arsenal
date: 2026/02/11
references:
- https://embracethered.com/blog/posts/2026/visual-studio-copilot-remote-code-execution/
- https://attack.mitre.org/techniques/T1059/
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\devenv.exe'
- '\Ssms.exe'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
- '\regsvr32.exe'
- '\wmic.exe'
- '\curl.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
condition: selection_parent and selection_child
falsepositives:
- Legitimate build tasks, pre/post-build events, and SSMS external tools can spawn cmd.exe or powershell.exe. Baseline per-developer and alert on new parent/child pairs.
level: high
---
title: Copilot Configuration File Modification Outside Installer Context
description: Detects non-installer processes writing to GitHub Copilot settings and configuration files under user profile and application data directories, consistent with the path validation bypass in CVE-2026-103572 where Copilot is induced to overwrite its own configuration to escape containment.
id: 4d7e2b61-9a3c-4f58-b702-6c1d8e95a3f4
status: experimental
author: Security Arsenal
date: 2026/02/11
references:
- https://embracethered.com/blog/posts/2026/visual-studio-copilot-remote-code-execution/
- https://attack.mitre.org/techniques/T1554/
logsource:
category: file_event
product: windows
detection:
selection_path:
TargetFilename|contains:
- '\AppData\Local\Microsoft\VisualStudio\'
- '\AppData\Roaming\Microsoft\VisualStudio\'
- '\AppData\Local\GitHubCopilot\'
- '\.vs\'
- '\github-copilot\'
- '\copilot'
selection_ext:
TargetFilename|endswith:
- '.json'
- '.config'
- '.xml'
- '.settings'
filter_installers:
Image|endswith:
- '\VSIXInstaller.exe'
- '\setup.exe'
- '\vs_installer.exe'
- '\msiexec.exe'
condition: selection_path and selection_ext and not filter_installers
falsepositives:
- Visual Studio itself updates settings on configuration changes. Tune by correlating with the Image field and alert when the writing process is a Copilot child process or an unexpected binary.
level: medium
KQL — Microsoft Sentinel / Defender
// Hunt: Visual Studio / SSMS spawning script hosts or shells (possible Copilot containment escape - CVE-2026-103572)
let lookback = 14d;
let ideParents = dynamic(["devenv.exe", "Ssms.exe", "copilot", "Microsoft.VisualStudio.Copilot"]);
let suspiciousChildren = dynamic(["cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe", "regsvr32.exe", "wmic.exe", "certutil.exe", "bitsadmin.exe", "curl.exe"]);
DeviceProcessEvents
| where TimeGenerated > ago(lookback)
| where InitiatingProcessFileName has_any (ideParents)
| where FileName has_any (suspiciousChildren)
| project TimeGenerated, DeviceName, AccountName,
InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine, ProcessId, InitiatingProcessId, SHA256
| order by TimeGenerated desc;
// Hunt: Unexpected writes to Copilot / Visual Studio configuration files by non-IDE processes
let lookback = 14d;
DeviceFileEvents
| where TimeGenerated > ago(lookback)
| where FolderPath has_any ("GitHubCopilot", "github-copilot", "copilot")
or (FolderPath has "VisualStudio" and FolderPath has "Settings")
| where FileName endswith ".json" or FileName endswith ".config" or FileName endswith ".xml"
| where InitiatingProcessFileName !in~ ("devenv.exe", "VSIXInstaller.exe", "vs_installer.exe", "msiexec.exe", "MsMpEng.exe")
| project TimeGenerated, DeviceName, AccountName, InitiatingProcessFileName,
InitiatingProcessCommandLine, FileName, FolderPath, ActionType, SHA256
| order by TimeGenerated desc;
Velociraptor VQL
-- Hunt: Copilot containment escape artifacts (CVE-2026-103572)
-- Part 1: IDE-spawned shells/script hosts currently or recently running
SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE Name =~ '(?i)(cmd|powershell|pwsh|wscript|cscript|mshta|rundll32|certutil|bitsadmin)\.exe$'
AND (
SELECT Name FROM pslist(pid=Ppid)
) =~ '(?i)(devenv|ssms|copilot)'
-- Hunt: Recently modified Copilot configuration files (potential self-config overwrite)
SELECT FullPath, Size, Mtime, Atime
FROM glob(globs=[
'C:/Users/*/AppData/Local/GitHubCopilot/**/*.json',
'C:/Users/*/AppData/Roaming/GitHub Copilot/**/*.json',
'C:/Users/*/.copilot/**/*.json',
'C:/Users/*/AppData/Local/Microsoft/VisualStudio/**/copilot*'
])
WHERE Mtime > now() - 1209600
ORDER BY Mtime DESC
Patch Verification and Hardening Script
# CVE-2026-103572 - Verify Visual Studio / SSMS patch state and audit Copilot config integrity
# Run elevated on developer and DBA workstations. Test in a pilot OU before broad deployment.
# 1) Enumerate installed Visual Studio instances and versions
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
if (Test-Path $vswhere) {
& $vswhere -all -products * -format json | ConvertFrom-Json |
Select-Object displayName, installationVersion, installationPath, updateDate |
Format-List
} else {
Write-Warning "vswhere.exe not found - Visual Studio may not be installed."
}
# 2) Check for pending Visual Studio updates via the installer
$vsInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe"
if (Test-Path $vsInstaller) {
Write-Host "[ACTION] Launch Visual Studio Installer and apply the latest security update for your channel (addresses CVE-2026-103572)." -ForegroundColor Yellow
}
# 3) Enumerate SSMS installations
$ssmsPaths = @(
"${env:ProgramFiles(x86)}\Microsoft SQL Server Management Studio*",
"$env:ProgramFiles\Microsoft SQL Server Management Studio*"
)
foreach ($p in $ssmsPaths) {
Get-ChildItem $p -Filter Ssms.exe -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, @{n='FileVersion';e={$_.VersionInfo.ProductVersion}} | Format-List
}
# 4) Audit Copilot configuration files for unexpected recent modification (possible self-config overwrite)
$cutoff = (Get-Date).AddDays(-14)
$auditPaths = @(
"$env:LOCALAPPDATA\GitHubCopilot",
"$env:APPDATA\GitHub Copilot",
"$env:USERPROFILE\.copilot"
)
foreach ($path in $auditPaths) {
if (Test-Path $path) {
Get-ChildItem $path -Recurse -Include *.json,*.config,*.xml -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt $cutoff } |
Select-Object FullName, LastWriteTime, Length |
Sort-Object LastWriteTime -Descending | Format-Table -AutoSize
}
}
# 5) Baseline: record hashes of Copilot config files for future integrity comparison
$baselineOut = "$env:ProgramData\SecOps\CopilotConfigBaseline_$(Get-Date -Format yyyyMMdd).csv"
New-Item -ItemType Directory -Path (Split-Path $baselineOut) -Force | Out-Null
foreach ($path in $auditPaths) {
if (Test-Path $path) {
Get-ChildItem $path -Recurse -Include *.json,*.config,*.xml -ErrorAction SilentlyContinue |
ForEach-Object {
[PSCustomObject]@{
Path = $_.FullName
Hash = (Get-FileHash $_.FullName -Algorithm SHA256).Hash
LastWriteTime = $_.LastWriteTime
}
} | Export-Csv $baselineOut -Append -NoTypeInformation
}
}
Write-Host "Baseline written to $baselineOut" -ForegroundColor Green
Remediation
- Patch immediately. Apply the February 2026 security update for Visual Studio (via Visual Studio Installer — update your channel: Current, LTSC, or Preview as applicable) and the corresponding SSMS update. Verify the fixed build numbers against the official Microsoft Security Update Guide entry for CVE-2026-103572. Do not assume auto-update is enabled on developer machines — many teams pin IDE versions for build reproducibility.
- Prioritize by privilege, not by count. Patch DBA workstations running SSMS and developers with production deployment access, signing keys, or cloud subscription credentials first. These sessions are the highest-value exploitation targets.
- Reduce attack surface. Where Copilot is not a business requirement in SSMS — particularly on jump boxes and production-adjacent admin workstations — disable or uninstall the Copilot integration until patching is complete. Enforce via extension management policies where available.
- Restrict IDE child process execution. Where feasible, apply AppLocker or WDAC policies constraining what
devenv.exeandSsms.exemay spawn on admin-tier workstations. Build processes legitimately spawn compilers — scope exceptions narrowly. - Enforce least privilege on developer/DBA sessions. Code execution here runs as the user. Ensure developers and DBAs do not browse, read email, or process untrusted content from privileged sessions, and that production SQL roles are separated from daily-use accounts.
- Hunt retroactively. Run the KQL and VQL hunts above across at least the last 14–30 days of telemetry. Given the disclosure timeline (reported August 2025, patched February 2026), a lookback is warranted before declaring the environment clean.
- Update your threat model. Add AI assistant containment escape and indirect prompt injection as tracked techniques in your detection engineering backlog. This CVE will not be the last path-validation or guardrail-bypass flaw in an IDE-integrated AI agent.
- Monitor CISA KEV. If CVE-2026-103572 is added to the Known Exploited Vulnerabilities catalog, federal remediation deadlines (typically 3 weeks for agencies) will apply, and it is a reliable signal that active exploitation has begun.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.