Every check we run
Every check we run, and what it takes to turn it RED. Nothing here is a score.
ai
coverage-only (never emitted as a finding; listed so the catalogue documents what discovery feeds COST-001/AI-INJ-002)
AMBER; RED if leaked text contains a secret
Proven by: 1 canned payload, max_tokens<=200, only on endpoints already proven anonymous
AMBER (supply-chain via agent tooling)
api
AMBER (RED if stack contains secret)
AMBER (RED if the classifier finds a secret literal inside)
AMBER, evidence is key names only; RED if the classifier finds a recognised secret literal inside
AMBER (RED if data API + PII proof)
AMBER
AMBER (RED if executable + public URL)
auth
RED if /admin* anon 200 with sensitive content
RED if role escalates via PATCH (throwaway account)
AMBER (RED if combined with credential stuffing surface)
Proven by: <=15 reqs/30s, abort on 429
AMBER (static+M2 dynamic where safe)
authz
RED on A->B proof with throwaway users
Proven by: A/B harness + cleanup
cost_abuse
RED only when the endpoint echoes our nonce (proven spend); AMBER if it answers anonymously but the nonce is unconfirmed
Proven by: tiny max_tokens<=16, nonce echo required for RED, <=3 reps
AMBER (RED if anon + top-tier model selectable)
dependencies
AMBER default; RED only if reachable + exploit path (Trivy/OSV + call graph)
firebase
RED if anonymous GET /.json?shallow=true returns a non-empty object (proven)
Proven by: 1 request, shallow only, key names in evidence, never values
infra
RED on 200 + KEY= pattern
RED on ref: match
AMBER (RED if secret inside)
AMBER (hygiene; never RED)
AMBER (hygiene; never RED)
AMBER (hygiene; never RED)
AMBER, and every other check is reported as NOT_checked (a challenge page is never graded)
payments
RED-capable static: missing constructEvent (no live charge test)
RED-capable static: amount from req.body without Price-ID allowlist
regrets
AMBER max (Things you will regret later)
secrets
RED if service_role JWT in bundle (bypasses RLS)
RED if sk_live_* in shipped JS
RED (unbounded spend)
RED
RED until rotated (history is forever)
AMBER (confirm reachability)
AMBER, confidence low — these keys are public by design, verify scope; never RED
RED — the API key (not the client token) can read/write org-wide monitoring data
RED (config files are read by every agent run)
supabase
RED if anon reads PII/financial rows (dynamic proof)
Proven by: anon GET /rest/v1/<table>, <=5 reqs, throwaway data only
RED if anon/auth reads cross-user rows
Remediation: USING(auth.uid()=user_id) + down-migration
RED if anon INSERT succeeds on user table
RED if private object anon-readable
RED if sensitive RPC anon 200
AMBER (RED if search_path hijack + data exfil path)
Machine-readable: /checks.json