Changelog

Earlier releases

10 changes

Scanning the same code twice now gives you the same answer

  • +Scan results are reproducible. Both AI-assisted steps — the false-positive review that removes findings, and the optional contextual analysis that adds them — now run at a fixed sampling setting, so scanning unchanged code returns the same findings and the same grade every time. Both previously ran at the model's default sampling, where a second scan could quietly differ from the first with nothing in your code having changed.
  • +Scanning a subdirectory now respects the .xploitscanignore at your project root. Previously that file was only read when it sat directly in the directory you scanned, so xploitscan scan src/ — and any CI job pointed at a single package in a monorepo — quietly scanned everything you had excluded. Paths are matched relative to the file that declares them, and a nested .xploitscanignore still takes precedence, exactly like .gitignore.
  • +The GitHub Action's outputs (grade, score, findings-count, the per-severity counts, and sarif-file) now carry real values, so you can branch on them in later workflow steps. They previously resolved to an empty string.
  • +Your Trust Page can now show how your app compares to the Vibe Security Index. When your latest scan supports it, the scanning section adds a line like "Fewer findings than 62% of the 25 Lovable apps we scanned for the Vibe Security Index" — matched to the builder that scaffolded your project where we can tell, and to the whole round where we can't. The sample size is always in the sentence, the methodology is one click away, and the line simply doesn't appear when the sample is too small to support it. It is a comparison, not a badge or a certification.
  • +The inline "I've reviewed this" comment now works where you most need it. Marking a single finding as accepted with // VC003-OK: <reason> or // ENTROPY-OK: <reason> had no effect on those two checks — the endpoint-authentication check and the high-entropy-string check — so the only way to quiet one intentionally-public endpoint or one published verification token was to exclude the whole file. Both now honour the marker, and your explanation can run across several lines instead of having to fit on one.
  • +New: scan a URL, no signup. Paste your app's address at /url-scan and see what your deployed build already tells every visitor. Top of the list is whether your source maps are publicly served — if they are, anyone can read your original file names and, where a map embeds its source, your original TypeScript, comments and all. Below that: whether your backend configuration ships to the browser, which AI builder the bundle looks like it came from, and which security headers are missing.
8 changes

Your grade now reflects your code, not your scaffold — and a public index of what AI builders ship

  • +Findings in code you didn't write no longer set your security grade. AI app builders copy shadcn/ui into your project verbatim, codegen writes into __generated__/, and READMEs contain example code that exists to show what not to do. All of it is still scanned and every finding is still reported — it just doesn't decide your grade or fail your CI build.
  • +This was a real problem, not a theoretical one: one vendored UI component uses dangerouslySetInnerHTML to set CSS variables, which trips a critical XSS rule, and a single critical caps a project at grade D. In a 20-repo study of Lovable, v0, Bolt, and Base44 projects, that critical rule fired in 16 of the 20, and most of its hits were in vendored code rather than code the author wrote. Projects graded on their own code now see a very different — and accurate — result.
  • +Nothing is hidden. Held-out findings appear in the CLI, the web report, the SARIF upload, and the GitHub Action's PR comment, each tagged "Not graded," with the count shown right next to the grade. A grade that excluded findings always says so.
  • +Prefer to grade everything? Run xploitscan scan . --grade-vendored, or set { "scan": { "gradeVendored": true } } in .xploitscanrc.
  • +New: the Vibe Security Index. That 20-repo study became a recurring public one. Each round we sample public repositories built with Lovable, v0, Bolt, and Base44, scan them with the full rule set, and publish the aggregate results — how often critical findings show up, how grades are distributed, and which issues repeat. It applies the same application-versus-scaffold split described above, so no builder is charged for a component library it copied in. No repository is ever named: every figure is an aggregate, because publishing the list would mean pointing at live vulnerabilities in other people's projects. The full methodology and every limitation we know about are published beside the numbers.
  • +Dashboard: choosing "All Projects" now shows a genuine portfolio grade — the average across each project's most recent scan, with total open findings by severity beside it. It previously showed whichever single project you happened to scan last, which read as your overall posture when it wasn't. The portfolio grade now matches the one on your reports and exported PDFs.
5 changes

A smoother path from first scan to signed up, and docs that match the CLI exactly

  • +The live demo scanner now gives you 3 scans a day without an account, plus sample-code scans that don't count toward that limit (subject to fair use) — so you can kick the tires properly before creating an account. Try it from the new Live Demo link in the nav.
  • +Pricing buttons now take you straight to sign-up with your plan and billing interval pre-selected, and signing in returns you to whatever you were doing instead of dropping you on the dashboard.
  • +Anonymous and free-plan web scans now run the 30-rule free set — the same set the free plan gets in the CLI and everywhere else — and every scan result reports exactly how many rules ran. Paid plans scan with all 210+ rules on every surface.
  • +Documentation refresh: the docs and guides now match CLI 1.2.2 exactly — current flags (--diff, --watch, the SIEM output formats), the real .xploitscanrc reference, complete GitHub Action inputs and outputs, and an API reference listing the actual public endpoints.
  • +Slack and Discord webhook settings (Pro) now save to your account instead of a single browser. Configure them once in Settings → Webhooks and scan-complete notifications fire for every scan you upload — web, CLI, or CI. Settings previously saved in this browser are picked up automatically; just hit Save once to finish the move.
3 changes

We added a benchmark case we can't detect (on purpose)

  • +The held-out benchmark now includes a real-world broken-access-control (BOLA) case — a logged-in user editing another user's record — that no scanner we test catches today, including ours. The held-out score is now 15 of 16, with the miss shown openly on the benchmark page. Static analysis genuinely struggles with authenticated-but-not-authorized bugs, and we'd rather show you that gap than hide it.
  • +Scans now recognize what built your project: reports say "Detected: Lovable + Cursor project" when the scaffold is unambiguous, so findings read in the context of what those tools typically get wrong.
  • +Improved IDOR detection for Express and Hono apps: routes that fetch a record by a request-supplied ID (URL, body, or query) without an ownership check are now flagged — tuned to avoid false positives on routes that already enforce ownership. The new held-out case above is a harder shape those improvements don't yet cover.
3 changes

A buyer's guide for AI-code scanners, plus clearer comparisons

  • +New guide: "the best security scanner (SAST) for AI-generated code." An honest, side-by-side look at XploitScan, Semgrep, Snyk, and Bearer — anchored to a held-out third-party benchmark (XploitScan 15/15, Bearer 9/15, Semgrep 8/15 at the time; XploitScan was later tuned on some of those cases after seeing them, which the benchmark page now marks — see the July 3 entry) — with a straight answer on which tool fits which job.
  • +Every comparison page now opens with a plain-language verdict and answers the questions people actually ask — does it replace the other tool, which is better for a solo dev, how detection works, and where the other tool legitimately wins.
  • +The Semgrep comparison and the Semgrep benchmark write-up now show their results in a clean table instead of a text block, so the numbers are easier to scan and cite.
3 changes

XploitScan in your editor, plus hardcoded-PII detection

  • +XploitScan is now a VS Code extension. Install it from the Marketplace and every file you save gets scanned for vulnerabilities right in your editor — findings land in the Problems panel, it runs locally, and nothing is uploaded. Same engine as the CLI and web app.
  • +New: detection for hardcoded personal data. The scanner now flags real credit card numbers and US Social Security Numbers left in source. Both are tuned to stay quiet on test cards and lookalike values, so they catch the real thing without the noise.
  • +More to compare and read: new side-by-side comparisons vs Bearer, Checkmarx, and Burp Suite, plus two new guides — a practical pre-deploy security checklist for AI-generated code, and a deep dive on the Django ALLOWED_HOSTS = ['*'] wildcard.
6 changes

10/10 on held-out third-party code after rule fixes (June 2026), head-to-head held-out comparison, and smoother scanning

  • +The held-out benchmark — real vulnerabilities from public projects like OWASP NodeGoat and Juice Shop that no XploitScan rule author ever saw — now scores 10 out of 10. Two new detections closed the final gaps: SQL injection where the query is built in a variable before reaching the database call, and SSRF through the needle, superagent, and undici HTTP clients. Both ship across the CLI, web scans, API, and GitHub Action.
  • +The benchmark page now runs Semgrep and Bearer against that same held-out corpus with the same scoring, side by side. Current standing: XploitScan 10/10, Semgrep 6/10, Bearer 6/10 — with the per-class breakdown published so you can see exactly what each scanner catches and misses.
  • +New on the blog: "Why we don't trust our benchmark" — an honest look at why a perfect score on a self-authored corpus isn't enough, and how the held-out set keeps us accountable. (Note, Nov 2026: for current reviewed precision, see /benchmark.)
  • +Fixed an issue that could prevent scans started from the website from completing. Demo scans and signed-in scans both run reliably again.
  • +The docs now cover connecting your account end to end: CLI login, API keys for CI, exit codes for build gating, and MCP server setup in the Quick Start.
  • +Hand-typed URLs like /sign-up and /login now land on the right pages instead of a 404.
5 changes

Report false positives in one click, plus a smoother first scan

  • +Every finding now has a "Not a real issue?" link. If the scanner flags something that's intentional, test code, or just wrong, tell us in two clicks — pick a reason, add optional context, done. Reports go straight to the team and feed directly into rule tuning, so the detections you see keep getting more precise.
  • +Try a scan on the home page, then sign up, and your results carry straight into your account — re-scanned with the full Pro rule set, waiting on your dashboard. No more re-pasting the code you just scanned.
  • +New to XploitScan and don't have a project handy? The dashboard now offers a one-click scan of a sample project so you can see exactly what a real report looks like before uploading your own code.
  • +Signup form streamlined — the agree-to-terms step no longer greys out the form, so getting started is cleaner and faster.
  • +After a clean scan, we now nudge you to publish a Trust Page so you can show customers and prospects your security posture with a verified public badge.
9 changes

Trust Page polish, CLI reliability, and five rule precision fixes

  • +CLI v1.1.8 published — a reliability fix so scan uploads consistently reach your dashboard and Trust Page. Run `npm install -g xploitscan@latest` to pick up the fix.
  • +Trust Page timestamps now render in the visitor's local timezone instead of UTC. A scan that ran at 7:43 PM Eastern no longer displays as 11:43 PM to the visitor — the timestamp shows in whatever timezone their browser is set to.
  • +Trust Page badge layout updated to read "[Company Name] — Verified by XploitScan" instead of the previous "Secured by [Company Name]". The earlier wording read as the customer attesting to themselves; the new order makes XploitScan's third-party verification explicit. Existing embedded badges update automatically within five minutes of the next view (CDN cache window) — no need to re-paste the HTML.
  • +Several common false-positive patterns no longer flag — everyday safe idioms around config constants, parameterized queries, intentional HTML rendering, and authenticated routes. Rule precision improves accordingly on real codebases, so there are fewer noise findings to triage.
  • +New `// VC###-OK: <reason>` inline silencer convention. Add it on the same line or directly above an intentional finding to suppress that one site without weakening the rule globally. Honored by every rule. The `// scanner-OK` wildcard form silences any rule at that site.
  • +Scan API now picks up rule changes automatically on every deploy — no more occasional drift between the CLI's rule set and what api.xploitscan.com runs. Rule fixes published to npm propagate to all five surfaces (CLI, MCP server, GitHub Action, web app, edge API) on their next deploy.
6 changes

XploitScan GitHub App, plus refreshed CLI, MCP, and Action releases

  • +The XploitScan GitHub App is live — install it on any account or organization and every pull request gets an automatic security scan posted as a Check Run, with findings shown inline in the diff view. Free plan covers the core 30 rules; Pro and Team unlock the full 206-rule set plus the AI false-positive filter on every PR. Install at github.com/apps/xploitscan or from your dashboard.
  • +Dashboard now has a GitHub tab listing your installed accounts, recent PR scans across all of them, and one-click links to manage which repositories the App can see.
  • +GitHub Action v1.3.2 published — the Marketplace listing and the PR-comment footer both now accurately advertise the full 206-rule Pro set. The previous release was still showing the older 158-rule count from before the spring rule additions.
  • +Marketplace description tightened to fit GitHub's 125-character cap so the action is cleaner to skim on its discovery page.
  • +CLI v1.1.2 and MCP server v1.1.2 published on npm — both rebuilt against the current rule corpus so `npx xploitscan@latest` and any AI agent using the MCP server pick up the exact same detection set the web scanner uses.
  • +Page-load reliability improvements across the site for visitors using browsers with strict security policies — a few residual console errors are now gone and the product analytics that drive roadmap decisions are more accurate.