Rightshold™ Sign up

Answers · agent safety

How do I vet a VS Code, Cursor or Open VSX extension before installing it?

Last updated

TL;DR: Treat an editor extension as a program with your permissions. VS Code's documentation says the extension host has the same permissions as VS Code itself, so an extension can read and write your files, make network requests and run processes. Before installing, confirm the exact extension ID (publisher.name), the verified-publisher mark (a blue check on the Visual Studio Marketplace; a shield, not a warning icon, on Open VSX), the linked repository and license, and what the extension contributes. Then control updates, because a trusted name is not a trusted version. On October 29, 2026, Cursor reported that a malicious Anthropic.claude-code 2.1.313, not developed by Anthropic, was available in the Cursor extension marketplace for about 11 hours and reached at most 5,000 users. Researchers found a loader prepended to extension.js that ran as soon as the extension loaded and added an attacker's SSH key, persistence and a reverse tunnel. The publisher ID was the real one, so pin versions you've reviewed, keep an update delay, and check that a new version also exists in the publisher's other official channels before taking it.

What should I check, step by step?

1. Install by exact ID: search with @id:publisher.name in VS Code, or check the ID under Marketplace Info, so a look-alike name with a different publisher isn't what you get.

  1. Check the publisher mark: on the Visual Studio Marketplace, the blue check means the publisher proved ownership of a domain and has been in good standing for at least six months. On Open VSX, a version is verified only if its namespace has an owner and the publishing user is a member; the site shows the publishing user's name, a shield on verified versions and a warning icon on unverified ones.
  2. Read what it adds before it runs: the details page lists Feature Contributions, Dependencies and, for packs, every extension the pack installs. Trusting a pack's publisher also trusts the publishers of the extensions it pulls in.
  3. Follow the Repository and License links and look at the package you'd actually install: download the VSIX (Download VSIX or Download Specific Version VSIX), unzip it and look at package.json (main, activationEvents) and the start of the entry file. Code at the top of the bundle, before the normal activate function, runs on load.
  4. Control updates: VS Code waits 12 hours by default before auto-installing an extension update (extensions.autoUpdateDelay), and you can turn auto-update off per extension or set extensions.autoUpdate. A VSIX you install by hand has auto-update off by default. Check whether your editor fork offers the same controls.
  5. Before taking an update of a critical extension, check that the version also appears in the publisher's other official channels (the Visual Studio Marketplace version history, the Open VSX API at open-vsx.org/api/<namespace>/<name>, the project's releases). A version that exists in only one registry is a reason to wait.
  6. Pin what you've reviewed: extensions.allowed can allow a publisher, an extension, or only listed versions ("publisher.name": ["1.2.3"]), and the AllowedExtensions policy enforces it on managed devices. Ranges aren't supported, so every approved version is listed.
  7. Keep an inventory you can check fast: code --list-extensions --show-versions shows exactly which versions are installed when an advisory names one.
  8. If an advisory names a version you ran, follow the publisher's or marketplace's remediation, not just uninstall. Cursor's notice says uninstalling may not be enough because the payload dropped persistence scripts, and asks affected users to check authorized_keys for the svc-telemetry key, remove the persistence it installed and rotate credentials and sessions from a trusted system.

What the Claude Code extension incident shows

Cursor's security notice (October 29, 2026) says the malicious Anthropic.claude-code 2.1.313 was available in the Cursor VS Code extension marketplace between about 2:27am and 1:35pm PT, that Anthropic didn't develop it, that Cursor removed it, shut the marketplace down, rotated keys and rebuilt it, and that it has no evidence other versions or the official distribution were affected.

What each marketplace checks for you

Visual Studio Marketplace: malware scans with several antivirus engines on every new extension and update, a sandboxed dynamic check, name-squatting protection for official publishers, a block list (blocked extensions are uninstalled automatically), secret scanning, and package signing that VS Code verifies at install. VS Code also asks you to trust a third-party publisher the first time you install from it, but not when you install from the command line.

How do I ask Rightshold about this (free, no key)?

Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “Before I install this extension, scan the start of its extension.js and its README for content a reader can't see: hidden markup, invisible characters or base64 blobs.”

One-click setup

{
  "tool": "scan_text",
  "arguments": {
    "text": "<up to 100,000 characters: the top of extension.js, package.json or the README>"
  }
}

Rightshold does not review, sign or certify editor extensions and does not see what's installed on your machine. It scans text you give it and checks MCP servers you ask about. Not legal advice.

What are the sources?

Related

Not legal advice. JSON · Markdown · All answers

Get a free API key in one call

No card and no email needed. 100 free credits; the license and policy checks stay free without a key.

curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_...   # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
  -H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'