You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(validate): authenticate the probe on auth-protected apps + 🔑 auth_failed benchmark outcome
The test-apply couldn't validate a band-aid on an auth-protected endpoint: the probe ran
unauthenticated, hit 401, and every protected finding was mislabeled auth_required. Now the
validation probe can authenticate, so an exploit is demonstrated (real 200 baseline → 403 block)
instead of a bare 401.
A — auto token capture + injection: probe_from_spec captures a bearer token from a login/setup
JSON response (access_token/token/jwt/…, nested one level) and injects Authorization: Bearer on
the exploit/legit requests. Cookie apps already carry the session via the shared jar; token apps
(VAmPI/crAPI) now work too.
B — operator-supplied login: VPCOPILOT_PROBE_USER/PASS (or a bearer VPCOPILOT_PROBE_TOKEN, +
optional LOGIN_PATH/USER_FIELD/PASS_FIELD) log in first over the shared session and FAIL LOUD
(honest auth_failed) if no session is established — so a wrong credential can't masquerade as
"needs auth". apply._probe_auth_from_env() is the single chokepoint every _run_validation reads,
reaching apply_* + refiner + the console (which load_dotenv's before each action) with no param
threading. CLI: apply --probe-user/--probe-pass/--probe-login-path/--probe-token. Keys documented
in .env.example and surfaced (masked) in the console Setup panel.
auth_failed is a distinct benchmark outcome from auth_required (creds supplied but login failed vs
no creds at all) — counted separately, excluded from failures. Rendered as 🔑 login-failed in the
⑥ Benchmark full matrix, outcome bar (plum) + legend, per-finding outcome column, and the live ③
Mitigate result, each pointing at the VPCOPILOT_PROBE_* knob to fix it.
Tests: probe token capture/injection, cookie login, loud auth-failure, guessed-login supersede,
env builder, and the auth_failed benchmark classification. Full non-live suite green (130), ruff
clean, console JS node --check clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
0 commit comments