September 21, 2026
v0.5.0@sixthwall packages 0.5.0
Added
sixthwall deps: dependency vulnerability check. Reads your lockfile (pnpm, npm or yarn), asks the OSV database which installed versions have published advisories, and reports each as a normal finding with the fixed version, a one-line update command and a prompt for your AI tool. This is the only command that uses the network; it sends package names and versions to api.osv.dev and nothing else.--fail-onworks the same as forscan.- Vulnerability wall on the site at
/advisories: the latest reviewed npm advisories from the GitHub Advisory Database, refreshed hourly, each with affected versions, whether a fix exists, and a link to the SixthWall rule that catches the same class of mistake in your own code. RSS at/advisories/feed.xml.
Websitesixthwall.dev
Added
- Vulnerability wall at
/advisorieswith an RSS feed: the latest reviewed npm advisories, refreshed hourly, each linked to the SixthWall rule that catches the same mistake in your own code. - Changelog is now an index by day with one page per date.
Changed
- Next.js updated from 16.1.6 to 16.3.5. Our own new
sixthwall depscommand found 30 advisories against the old version, two of them critical. The site now runs the patched release. - Rule pages cover all 33 rules, including the Supabase and Firebase folders.
v0.4.1@sixthwall packages 0.4.1
Fixed
- The published rules package was missing the Supabase and Firebase folders. A clean
npx @sixthwall/[email protected]reported 28 rules, not 33, and never scanned SQL migrations or Firebase rules files. The package manifest now includes every rule folder, and a test fails if a rule on disk would not be published. - Updated
globto the current major so installs no longer print a deprecation warning.
v0.4.0@sixthwall packages 0.4.0
Added
- 18 new rules, 33 in total. The scanner now covers the mistakes that actually leak data in apps built with Lovable, Bolt, v0, Cursor and Claude Code:
- Supabase: service_role key reachable from the browser (AI-SUPA-001), row-level security disabled or everything granted to anon (AI-SUPA-002), policies that use
using (true)or give anon write access (AI-SUPA-003), tables created without RLS (AI-SUPA-004). - Firebase: Firestore, Realtime Database and Storage rules open to everyone (AI-FIRE-001) or to any signed-in user without an owner check (AI-FIRE-002).
- Next.js route handlers that change data without checking who is asking (AI-NEXT-001).
- Records looked up by id with no owner check in authenticated handlers (AI-IDOR-001).
- Redirect targets taken from the request (AI-REDIR-001), server-side fetches of caller-supplied URLs (AI-SSRF-001), file paths built from the request (AI-PATH-001), shell commands built from variables (AI-CMD-001), HTML inserted without sanitising (AI-XSS-001).
- Math.random for tokens, MD5/SHA-1 for passwords, short random tokens,
jwt.decodeused for auth, algorithmnone(AI-CRYPTO-001); certificate checking switched off (AI-TLS-001); webhooks processed without signature verification (AI-WEBHOOK-001); request objects passed straight into MongoDB queries (AI-NOSQL-001); secrets written to logs (AI-LOG-001).
- Supabase: service_role key reachable from the browser (AI-SUPA-001), row-level security disabled or everything granted to anon (AI-SUPA-002), policies that use
- New file types. Supabase SQL migrations (
.sql) and Firebase rules (firestore.rules,storage.rules,database.rules.json) are scanned as text, with--and//comments ignored. No new native modules. - Rule guards:
requires_present, and two new contexts,nextjs-routeandwebhook-route. - Safe and vulnerable fixtures for Supabase and Firebase, enforced by the precision suite.
Changed
- AI-SECRET-002 no longer reports service-role keys; AI-SUPA-001 owns that case with a Supabase-specific fix.
- The rules page on the site now lists every rule folder, and categories have plain-language names.
v0.3.0@sixthwall packages 0.3.0
Changed
- Far fewer false alarms. Rules now match across lines, so code formatted by Prettier or an AI tool no longer trips the option-object checks (
expiresIn,httpOnly, cookie flags on the next line). Matches inside comments are ignored. A rule can declareunless_present,requires_contextandexclude_paths, and a pattern can restrict itself to client files. - Absence rules fire once per app, not once per route file. "Missing auth middleware", "missing rate limiting" and "missing security headers" only apply to the file that creates the app (
express(),new Hono()), never to client components, and the.get('/…')heuristic that flaggedaxios.getis gone. Auth-route detection requires a server object such asapp.post('/login'). - Four noisy rules rewritten. AI-INJECT-001 is now "Request body saved straight to the database" (mass assignment) instead of firing on every
req.bodyread. AI-SECRET-002 flags secrets underNEXT_PUBLIC_/VITE_/REACT_APP_prefixes anywhere, and server secrets only inside client files; it no longer tells a server file its secret is "in the browser bundle". AI-SECRET-003 is a project-level check that really looks at.gitignoreand the git index. AI-CONFIG-002 is low severity, server-only, and skips config and test files. - Password rule is precise. AI-AUTH-005 flags
create({ password: req.body.password }),findFirst({ where: { password: … } })and===comparisons, and skips any file that uses bcrypt, argon2, scrypt or an auth provider. Readingreq.body.passwordto hash it is no longer a critical finding. - Client-side auth rule downgraded to medium and requires an access decision (redirect, render, admin flag), not merely reading a token to send as a header.
- Score is explainable and less brutal. The first finding at a severity costs full weight; repeats cost 40%. Caps sum to 95 so a project is never shown 0/100. The hidden 1.2× multiplier is gone. Output now says how many points fixing the top severity recovers.
- Grouped output. The first occurrence of each rule is shown in full; further occurrences are one-liners under "Same issues elsewhere".
- Rule coverage extended: Prisma
$queryRawUnsafe/$executeRawUnsafe, SQL built into a variable first,knex.raw/sequelize.querytemplates,NextResponse.json({ error: e.message }),catch (e)variants,cookies().set(…)withouthttpOnly, reflected CORS origins (origin: true, echoing the request origin), GitHub/Slack/Google/SendGrid/Stripe-webhook/Anthropic token shapes, JWT-shaped service keys, and Next.jsconst body = await req.json()written asdata. - Fixtures: safe twins for Express, a React client component and a Next.js route handler must produce zero findings; the precision test enforces it in CI.
- Dependencies: glob 11 (removes the deprecation warning on install).
v0.2.2@sixthwall packages 0.2.2
Fixed
- TypeScript files were never scanned. Every rule is declared for JavaScript and the matcher required an exact language match, so
.tsand.tsxfiles got zero rules. TypeScript now runs the JavaScript rule set. - Diff mode missed new files.
sixthwall scanonly looked at modified tracked files; untracked files, which is what AI tools create, were invisible and reported as clean. Untracked files are now included. - Diff mode from a subdirectory scanned nothing. Paths are now resolved against the repository root.
- The CLI nagged itself to update. The version was hardcoded as 0.2.0 in eight places. It now comes from package.json at build time. The update notice goes to stderr and is skipped for
--format jsonandsarif, so piped output is always valid. - Nothing ever blocked. Default
block_onis now[critical]; the pre-commit hook and the generated GitHub Action rely on it. New--fail-on <severity|none>flag overrides it per run. - The generated GitHub Action never failed. A shell escaping bug is fixed; the workflow now uses
--fail-on critical. - Watch mode never fired. chokidar 4 dropped glob support; the watcher now filters paths itself and queues changes instead of dropping them.
.sixthwall/ignoredid nothing on Windows. Paths are normalised to forward slashes before matching.- Fix Pack prompts embedded absolute paths and were cut off. Prompts use repo-relative paths, are never truncated, and are no longer wrapped in box characters that ended up in the clipboard.
- Evidence containing
$&,$1or$$no longer corrupts the prompt template. --severityand--formatare validated; a typo is an error instead of a silent clean result.- Not-a-git-repo, no-changes and nothing-to-scan cases print a plain explanation instead of a stack trace or a false clean.
- SARIF output: one rule entry per rule,
ruleIndex, relative URIs withuriBaseId. - The first scan run by
initrespects theexcludelist it just wrote.
Changed
- Finding output rewritten: relative paths, calmer wording per severity, score label "AT RISK" instead of "CRITICAL", and a "Start here" next step after the summary.
- MCP server:
security_scoreruns a full scan (it ran a diff scan and returned 100/100 on unchanged projects);scan_codeacceptspathsandproject_root, includes the minimal patch in results, caps output at 25 findings, and returns a proper error outside a git repo. Newlist_rulestool. Version reported from package.json. rules updateexplains that npx already fetches the latest release.- Default excludes gained
build,out,coverage,.venv,*.min.jsand*.d.ts; bare names inexcludematch that folder anywhere.