# VScan

- **Event:** [Meta Global AI Developer Hackathon](https://cerebralvalley.ai/e/meta-ai-developer-hackathon)
- **When:** Oct 26, 12:00 PM – Nov 4, 9:00 PM (EST)
- **Where:** Online
- **Team:** [Lasse Maile](https://cerebralvalley.ai/u/swaggpi)
- **GitHub:** https://github.com/swaggpi/VScan
- **Demo video:** https://youtu.be/ToPeuUSgAi0
- **Gallery:** https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery
- **Page:** https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/2950

Frontier models have made finding vulnerabilities cheap. 2026 is on track for roughly 66,000 CVEs, about double 2025, much of it AI-assisted discovery. Exploitation has not followed: of 1,061 AI-assisted findings, 14 were ever confirmed exploited in the wild. The bottleneck has moved from finding flaws to knowing which one reaches your code.

VScan is built on that gap. It constructs a call graph from source with tree-sitter across Python, JavaScript, PHP and Go, traces every public HTTP route through your own functions into your dependencies, then runs taint analysis to see whether attacker-controlled input actually arrives at the vulnerable call. Each finding lands on one of three verdicts: not reached, reachable, exploitable; after correlation against OSV, CISA KEV and EPSS. Call edges it cannot resolve are reported as potentially reachable rather than dismissed, so the result is an honest lower bound.

On the bundled sample that collapses 145 known CVEs across 19 dependencies to 16 reachable, 1 vulnerable-function confirmed, and 1 exploitable: PyYAML 5.3.1 / CVE-2020-14343, where request.get_data reaches yaml.full_load via POST /documents/import. Rendered as the actual call path.

Where static analysis runs out, Meta Muse Spark Open picks up, in four advisory layers. Triage compares the symbols the project calls against the CVE's named sink, hard-gated so the model may only clear a CVE when the advisory names a function the code demonstrably never calls. Exposure reads the repository's docs to judge internet-facing versus internal. Inferred edges propose the dynamic-dispatch calls tree-sitter cannot resolve. An AI pentester flags code level risks on public routes as unverified hypotheses. A chat layer answers questions about a scan by calling VScan's own tools over MCP, showing every call it makes.

None of it can move a verdict. The model proposes; the static analysis decides.

It ships where the work happens: a CLI, a GitHub Action that comments on pull requests and uploads SARIF to code scanning, a CI gate that blocks on an exploitable path rather than a CVE count, an MCP server, and a dashboard that draws the attack surface as a graph. So you can interact at every step from agent over CI to GUI

Built from an empty repository between 26 October and 4 November 2026.

## More from Meta Global AI Developer Hackathon

- [SuperGrid](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/2947)
- [Rabbit Hop](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/2948)
- [Mindworld](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/2949)
- [IA For Africa](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/2951)
- [FaultLine](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/2952)
- [Night Grinder](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/2953)

---

Markdown version of https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/2950. Site index for agents: https://cerebralvalley.ai/llms.txt · full text: https://cerebralvalley.ai/llms-full.txt
