Skip to content
subcloakdocs

What Watch checks

Extensions

New in 1.2.0 Requires Cloak Watch 1.2.0 or later.

What Cloak Watch checks in editor, JetBrains and browser extensions: feed matches, community lists, hidden code, sideloaded and flagged extensions, and how to remove them.

Extensions run with your access to code, tokens and websites, and attackers have hidden code in editor extensions and hijacked browser extensions. Cloak Watch reads the extensions in your editors and browsers, matches them against the signed feed and community lists of malicious extensions, and looks for the shapes these attacks take. It only reads: each fix uses the editor’s or browser’s own uninstall.

EXT-6 on a test Mac: hidden code in an editor extension.

An Act now card in the Inbox: Hidden code in the examplecorp.glowtheme extension, in Cursor, saying dist/extension.js hides 4211 invisible variation selectors in a row, with steps to uninstall the extension and replace GitHub, npm and publisher tokens
Kind Where
Editor extensions VS Code, VS Code Insiders, Cursor, Windsurf, VSCodium, Kiro, Trae, Positron and Antigravity: each extension’s manifest, and each editor’s extensions.json, which says where an extension came from and when it was installed
JetBrains plugins IntelliJ IDEA, PyCharm, WebStorm, GoLand, PhpStorm, RubyMine, CLion, Rider, RustRover, DataGrip, Android Studio and other JetBrains IDEs: META-INF/plugin.xml inside each plugin
Chromium browsers Chrome (and Beta, Canary), Chromium, Brave, Edge, Arc, Vivaldi, Opera, Comet and Dia: each profile’s extensions and its Secure Preferences, which Watch reads and never writes
Firefox Each profile’s extensions.json
Safari Watch lists installed Safari extensions by asking macOS’s plug-in registry (pluginkit). Which ones are turned on is kept where only apps with Full Disk Access can read it.

The Inventory lists them all.

Card What it means
EXT-1 An editor extension version on the feed, including Datadog’s dataset of malicious editor extensions (Apache-2.0), at the versions Datadog’s samples name. Cursor, Windsurf and other Open VSX editors are checked against it too.
EXT-3 A browser extension on the feed, or on a community list of malicious Chrome extensions (the Privacy Commons Institute’s chrome-mal-ids and toborrm9’s malicious_extension_sentry, both CC BY 4.0). Matched by the extension’s ID. One you’ve turned off in the browser is Review, not Act now, and the card says it’s off.
EXT-8 A JetBrains plugin at a version an incident pack names
EXT-12 A browser extension at a version an incident pack names, such as a hijacked release

A card from a list says which list and its license, for example “Browser extension on a malicious-extension list: …”.

These catch the shapes attacks take before any feed names them.

Card Tier What Watch flags
EXT-4 “Extension installed from a file, not a marketplace” Review An extension installed from a .vsix file whose publisher nothing else on the Mac vouches for
EXT-5 “Extension pulls in another publisher’s extension” Review An extension whose dependencies or pack include another publisher’s extension, installed in the same editor
EXT-6 “Hidden code in the … extension” Act now 32 or more invisible characters in a row in the extension’s JavaScript. GlassWorm hid its code this way. Shorter runs of 8 to 31 are Review (“Invisible characters in the … extension”).
EXT-7 “Same extension name, different publishers in two editors” Review The same extension ID from two publishers in two editors, when they don’t name the same source repository
EXT-9 “… runs an unpacked extension” Act now from a hidden, temporary, cache or shared folder; Review otherwise; FYI inside your code folders An unpacked extension, or one added with --load-extension
EXT-10 “A browser extension updates from its own server” Review A store extension that updates from a server other than the store
EXT-11 “An extension Chrome flagged is still turned on” Act now for malware; Review otherwise An extension Chrome flagged (its malware or policy verdict, Safe Browsing’s blocklist or the greylist) that’s still on

“Activates on startup” isn’t a check: most mainstream extensions do it.

Watch doesn’t remove extensions itself. Each card gives the editor’s or browser’s own way:

  • Editors: the editor’s uninstall command, for example cursor --uninstall-extension examplecorp.glowtheme. Quit the editor first.
  • Browsers: the browser’s extensions page, such as chrome://extensions/?id=…, brave://extensions/… or edge://extensions/…, then Remove. For an extension that could read websites, sign out of the websites you use in that browser and sign back in: stolen session cookies outlive a password change.
  • Hidden code (EXT-6): after removing it, replace your GitHub and npm tokens, your Open VSX and VS Code Marketplace publisher tokens and AI provider keys, and move crypto wallets: these are what GlassWorm took.