5 ms·
Show HN: VSCan - Detect Malicious VSCode Extensions
Did you know that VSCode extensions run with full access to your system—including file system, network, and credentials? Worse, dozens of malicious extensions have already made it into the marketplace, silently compromising devices.
I am a security researcher and student developer who ran into this problem myself. To help tackle this, I built a 100% free tool (no login required) that scans VSCode (and Cursor/Windsurf) extensions for:
- Hidden malware and obfuscated code
- Dangerous permissions and API misuse
- Vulnerable dependencies and suspicious network connections
Users have already found hundreds of vulnerabilities in extensions. VSCan generates a clean, developer-friendly security report to help you understand what you're installing.
Try it out: https://www.vscan.dev https://www.vscan.dev
I have also developed custom sandboxing security architecture to restrict extensions from malicious activity during runtime. There is no existing technology that does this, so if you would be interested in trying it out or learning more, please reach out!
I would greatly appreciate any feedback and thanks for your help!
_______________________________________________________________________________
Here are some numbers as to what I have detected from a sample of 1077 extensions that are available on the Marketplace:
- 3 extensions are marked as malicious by VirusTotal
- 7 extensions use malicious network connections (verified by VirusTotal)
- 33 extensions have dependencies with critical vulnerabilities
- 39 extensions have sensitive information (I have seen api keys, usernames, passwords, etc.)
- 204 extension have poor development practices as marked by OSSF
- 71 extensions have very high permissions (while not bad can be indicator of potential malicious activity)
As an example here is the link to an extension analysis with malicious network endpoints:
https://vscan.dev/?analysisId=9e6c1849-3973-402b-a4ff-3b4023508fb8 https://vscan.dev/?analysisId=9e6c1849-3973-402b-a4ff-3b4023...
- Groxx 1y agoIt is beyond madness and well into "intentionally negligent" to release a plugin system without a permissions model in, like, the last 20 years. Can't believe people aren't up in arms about how wide open vscode and similar things are, particularly now that docker is widespread. Thanks for building a scanner! I wish it wasn't necessary :/
- deleted 1y ago[deleted]
- Sytten 1y agoIDK, I have built a plugin system myself. It is very hard to have a plugin system that is both powerful, versatile and sandboxed. Like with with anything you can pick 2. Most of the plugins I use in vscode like prettier, rust analyzer, etc all need file access and process spawn. So if you sandbox it they would all need max access anyway which kind of defeats the purpose.
- airstrike 1y agoSure but it would be nice to differentiate the permissions given to rust-analyzer and, say, "TODO Highlight"
- Groxx 1y agoThere is an enormous amount of space between "it must be written in lua for safety" and "leftpad can upload your entire hard drive and then ransom it back to you". Right now we have the latter.
- notnullorvoid 1y agoThere's a big difference between max access and giving permission to run a specific binary which itself has no restrictions. The difference does matter less when the binary and plugin are produced by the same group or individual though.
- greggsy 1y agoIt’s not entirely unreasonable for VSCode to implement and enforce the same user acceptance controls that are currently ubiquitous on mobile platforms.
- sunilagrawal 1y agoThat's concerning. What is Microsoft doing about it? Have you contacted them?
- 1oooqooq 1y agohonestly, expecting safe software from Microsoft is like expecting a private browser from an advertising company .... oh.
- rafaelgoncalves 1y agolol, so true, and that both are really good malware attack vectors (chrome/vscode extensions, etc.)
- CGamesPlay 1y agoYou should definitely show the vulnerabilities you found on the front page, instead of showcasing low scores given to popular extensions. Claiming that "rust-analyzer" is "High Risk" is a strong turn-off from me thinking your service is useful (why? because it contains shell commands in the form of "taskDefinitions", and because it uses a dependency to parse ANSI sequences that hasn't received a commit in the past 90 days).
- shadow-ninja 1y agoThanks for the feedback. I am constantly trying to refine the scoring metrics to make sure that these popular extensions that often need high permissions aren't flagged as a lower score than they should receive. It is a bit difficult though as higher permissions do indicate a higher potential for abuse so its a balancing act. As for showcasing the vulnerabilities that's a good idea I'll definitely implement.
- meander_water 1y agoNice work! This has actually been an open feature request since 2018 [0]. I've been wanting something like this for a while. [0] https://github.com/microsoft/vscode/issues/52116 https://github.com/microsoft/vscode/issues/52116
- ruined 1y agoi wish the detail links on each analysis tile were real links, instead of some apparently weird javascript. seems broken in firefox it would also be nice if i could expand all the analysis detail at once, instead of just one section at a time.
- shadow-ninja 1y agoHm all the links seem to work for me on chrome. Could you let me know which specific link isn't working (is it just for that extension or for all extensions?). I restricted it to one expanded at a time since more than one felt a bit crowded but that's something I might look into.
- ruined 1y agothe main green button on every item
- whalesalad 1y agoUsing this is kind of a pain in the butt (looking thru all installed extensions and pasting in the raw name one by one). Could this be packaged as an extension itself, that scans other extensions? Or provide a CLI command to export all of your installed extensions as a list, which you can then upload? Or better, a one liner that will export your extensions to stdin, POST them to your API, and it will return a URL that you can click and load in the browser to explore the breakdown of (potential) issues.
- shadow-ninja 1y agoThanks for the suggestion. I was thinking about making this into a chrome web extension that people can use on a marketplace page or even using MCP to make this tool really accessible for Cursor and Windsurf users. As for the raw name, most extensions should work if you just put the display name. The search algorithm directly pulls from the vscode marketplace.
- whalesalad 1y agoI have 70 extensions installed though. Turns out there is a cli flag to print them, though: "code --list-extensions" If you update your UI to accept a "bulk analyze" mode where a list of newline extensions could be submitted and rendered out on a page, that would be pretty cool.
- shadow-ninja 1y agoOh yeah that's a really good idea. That would make it much easier for someone to use, though that many extensions would take a while. I would need to build up some more robust architecture before I could implement that.
- tonymet 1y agovscodevim got 71/100 high risk. That's a pretty common one.
- xsc 1y agoA lot of directions you could take this. Free/Commercial. Thoughts? Would be interesting to get more details on the sandbox.
- dlalchandani 1y agoFinally we have something like this. This is very good work
- staticshock 1y agoI'd love a version of this where I can paste my full list of extensions, instead of a box where I can only paste one. The latter is tedious, so I'm not that likely to do it.
- bilalq 1y agoI applaud the idea and love that you made this freely available without bolting on a SaaS subscription on top of it. However, I always roll my eyes when I see high severity risk in dependency chains due to ReDoS vulnerabilities. Sure, it matters for a web server maybe, but code running in a CLI tool, browser app, VSCode extension, or even a serverless lambda runtime really won't be affected much. More often than not, I find the `npm audit` risk classifications to be nonsense.
- 0points 1y agoI'm having a hard time seeing the value of this scoring. It seems to automatically give bad scores out of some heurestics involving executing shell commands? Take for example: streetsidesoftware.code-spell-checker, 14.5M installs, Score 81 out of 100. Major scoring factor is "Contributes functionality via 'terminal'." It seems to me that this will give wildly inaccurate scores.
- ensemblehq 1y agoThis is really cool and I can see a ton of opportunities to leverage this in the enterprise. Using the scanner, does it scan what's on the marketplace as opposed to what's already installed? I think someone had already mentioned that it would be useful to have this as an extension to scan existing installed extensions but would there be a way to scan just prior to extension installation?
- gerardosuarez 1y agoThis is awesome. I would love to prove it, but your page (vscan.dev) is broken. One qq, why is this tool closed-source? I think that to achieve the community trust in tools like this one, it would be great if this could be open-source. Maybe you can monetize it as an open-core model.