vabc is pre-1.0; only the latest release is supported. Please upgrade before reporting.
| Version | Supported |
|---|---|
| latest | ✅ |
| older | ❌ |
Please report security issues privately via GitHub's Private Vulnerability Reporting (Security → Report a vulnerability). Do not open a public issue for a vulnerability.
- Response SLA: acknowledgement within ~48 hours.
- Disclosure: coordinated. We'll agree on a disclosure timeline and credit you unless you prefer otherwise. Good-faith research is welcome (safe harbor); don't run high-volume or disruptive tests against Virginia ABC's servers.
When reporting, include the vabc --version, your OS, exact commands, and redacted output.
vabc is deliberately small in attack surface, but a few things are worth stating explicitly:
- No credentials, ever. Virginia ABC's endpoints are public and unauthenticated.
vabcstores no tokens, reads no secret files, and sends nothing inAuthorizationheaders. There is no keyring usage and no secret material to leak via logs,argv, env, or temp files. - Read-only. Every command is a read. There are no state-changing operations against Virginia
ABC. The mutation gate (
--allow-mutations) is present for contract uniformity but gates nothing. - Untrusted target text is fenced. Free text returned from the target (limited-availability
event titles) is wrapped as untrusted (
⟦UNTRUSTED⟧ … ⟦/UNTRUSTED⟧) by default so a downstream agent does not execute instructions embedded in fetched content. Disable with--no-wrap-untrusted. - Local state. The only file
vabcwrites is a small throttle/circuit-breaker state file underos.UserCacheDir()/vabc(or$VABC_STATE_DIR). It contains timestamps only — no secrets. - Backend etiquette.
vabcself-throttles (persistent, cross-process) and contains no evasion — no User-Agent spoofing, proxy rotation, or challenge solving. It identifies itself honestly and treats a persistent block as a stop signal.