Join our Newsletter — 33% off our NHI Course
Home› FAQ› Threats, Abuse & Incident Response› What breaks when a VS Code extension is…
Threats, Abuse & Incident Response

What breaks when a VS Code extension is clean at install time but malicious after an update?

← Back to all FAQ
By NHI Mgmt Group Editorial Team Updated October 11, 2026 Domain: Threats, Abuse & Incident Response

The trust model breaks because approval was granted for one version, while users later receive a different one through silent update. That means publish-time scanning, manual review, and install-time allowlisting can all miss the weaponisation step. Governance has to follow the version stream, not just the package name.

Where the trust model actually breaks

A vs code extension is trusted in practice by its versioned payload, not just its marketplace name. If the initial binary or package is safe but a later update can swap in new behaviour without equally strong review, the control boundary moves from “is this package approved?” to “is this exact version and release path still trustworthy?” That is why update governance matters more than one-time approval.

The key failure is that trust is being granted to a label while execution comes from a changing artifact. Install-time checks can confirm what was present on day one, but they do not protect users from silent update channels, compromised publisher accounts, or a later malicious release pushed through the same distribution path. The result is a broken assumption: provenance at install time does not guarantee safety at run time.

For that reason, the real subject is release integrity across the extension lifecycle. Teams need version-aware trust decisions, not just package-level allowlists, because the security question is whether the next version can still inherit the original approval.

Why static review and allowlisting miss this attack path

Manual review is strongest when it evaluates the code that will actually execute. Once an extension auto-updates, the previously reviewed state is no longer the state the user runs, so the review outcome becomes stale unless the update path is governed too. This is especially important for developer tooling, where extensions often sit close to source code, credentials, and build systems.

Install-time allowlisting has the same blind spot. It can answer “was this extension acceptable when first introduced?” but not “does this new version still deserve access today?” A malicious update can therefore pass through a legitimate distribution channel and still achieve the attacker’s goal if the trust model does not re-evaluate the changing artifact.

That is why this pattern is a supply-chain problem, not just a plugin hygiene issue. The security failure is not the existence of an extension, but the gap between initial approval and subsequent code replacement.

What governance has to track instead

Governance needs to follow the release stream, the publisher identity, and the update mechanism. In practice that means version pinning where possible, explicit review or staging for higher-risk extensions, and monitoring for publisher-account compromise or unexpected package drift. The question is no longer whether the package name is trusted, but whether the provenance of each delivered version remains intact.

Teams should also distinguish between low-risk productivity add-ons and extensions that can touch secrets, source code, terminals, or workspace files. A benign-looking update can become dangerous very quickly if the extension sits in a position to read, alter, or exfiltrate sensitive developer material. That is why risk scoring should be based on the extension’s reach, not only on its category or popularity.

For practitioners, the safest operating model is to treat extension updates like any other privileged software change: verify what changed, control who can publish, and be ready to revoke trust when the release channel itself changes state.

Risk and Threat Considerations

When an extension can change after approval, the main exposure is delayed compromise: an attacker can wait for trust to accumulate, then weaponise the next update to inherit that trust. The danger is amplified when the extension has access to code, credentials, or local developer workflows, because one silent update can turn a routine tool into a persistence and exfiltration mechanism.

Failure mechanism: The update channel becomes the point of compromise, so the originally approved package name keeps its trust while the delivered version changes its behaviour. That defeats static scanning, one-time review, and install-only allowlisting because none of them re-check the malicious version at the moment it is executed.

Impact: Users may run attacker-controlled code with the same permissions they granted to the clean version, which can expose source, secrets, and downstream systems. At scale, a single compromised publisher or update path can affect many installations before the drift is noticed.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

CIS Controls v8, NIST SP 800-53 Rev 5, OWASP ASVS and SLSA set the governance and control requirements practitioners need to meet.

FrameworkControl / ReferenceRelevance
CIS Controls v8CIS-2 — Inventory and Control of Software AssetsVS Code extensions are software assets whose versions and updates need inventory and control.
CIS-16 — Application Software SecurityThe issue is supply-chain trust in extension releases and their changing code.
Recommendation — Track extension versions and block unauthorized auto-updates. Review and test extension updates before broad deployment.
NIST SP 800-53 Rev 5CM-5 — Access Restrictions for ChangeSilent updates are unauthorized change paths unless controlled by release governance.
SI-7 — Software, Firmware, and Information IntegrityA malicious update is an integrity failure in delivered software.
Recommendation — Restrict who can change approved extension versions. Verify extension integrity before allowing execution.
OWASP ASVSV15 — Secure Coding and ArchitectureExtensions should be designed so trust does not rely on a one-time review of a mutable artifact.
Recommendation — Design extension trust decisions around versioned artifacts and update integrity.
SLSASupply Chain Levels for Software ArtifactsThe scenario is a software supply-chain integrity problem at release time.
Recommendation — Apply stronger provenance checks to each released extension build.

Practitioner Guidance

Decision rule: If an extension can auto-update, treat the update mechanism as part of the trusted attack surface and require a separate control for every materially risky release. If the extension can reach secrets, terminals, build steps, or repository content, do not rely on a one-time install decision.

What to verify: Confirm whether your environment can pin versions, stage updates, or block silent promotion from the marketplace to production workstations. Check whether the publisher account, signing path, and release process are monitored for takeover or unexpected change.

Common mistake: Assuming that a clean first scan means ongoing safety. In this pattern, the dangerous change happens after the scan, so the useful control is continuous release trust, not retrospective approval of the original artifact.

Practitioner takeaway: The control objective is to make trust version-specific and revocable, because extension safety disappears the moment the update path can outpace review.

Free weekly newsletter

Subscribe to the NHI & AI Identity Journal

The latest on NHI and Agentic AI security – articles, research, breaches, news and events every week.

Bonus 33% off our NHI Course when you subscribe.

NHIMG Editorial Note
Reviewed and updated by the NHIMG editorial team on October 11, 2026.
NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org