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.
Where Watch looks
Section titled “Where Watch looks”| 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.
Feed and list matches
Section titled “Feed and list matches”| 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: …”.
Built-in checks
Section titled “Built-in checks”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.
Remove an extension
Section titled “Remove an extension”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/…oredge://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.