web-recon
Recon and assess the attack surface of a web app/API you own or are authorized to test — endpoint enumeration, auth-posture matrix, BOLA/BFLA, cron checks, via web-recon-kit. Refuses unauthorized targ
Files1
View on GitHubSKILL.mdplugins/web-recon/skills/web-recon/SKILL.md
GitHubWeb / API Reconnaissance & Assessment
Target: $ARGUMENTS
Drive the web-recon-kit harness to enumerate and assess a web/API target. Every
target-specific detail lives in scope.toml; the runners are read-only (GET/OPTIONS), throttled,
and never trigger cron/mutation endpoints.
0. Authorization gate (MANDATORY)
Before ANY request to the target, confirm the user owns or is explicitly authorized to test it — their own workspace/account, a written pentest scope, an in-scope bug-bounty program, or a CTF. If authorization is unclear, STOP and ask. Refuse targets the user does not control. Never run against a third party "just to see."
1. Set up the target profile
- Ensure a
web-recon-kitcheckout is available, then runmake setup, plusmake setup-browserfor the browser tier (installs polyfetch from GitHub + chromium viauv sync --extra browser). cp scope.example.toml scope.toml, then fill in:base_url;[identities.*].env(env-var NAMES holding the API keys — keys live in.env, never inscope.toml);[recon].routes,[authmatrix].public_ok,[bfla].admin_prefixes,[[bola.collectors]].
2. Passive enumeration (no auth)
make inventory— mine/api/*endpoints from the JS bundles.make recon— render each route, classify its gate (public / client-side / server-middleware), capture screenshots. Both needmake setup-browser.- Record anything reachable without authentication.
3. API testing (owner identity)
make authmatrix— every endpoint × every configured identity, GET-probed → auth-posture matrix; flag unauthenticated 200s on non-public paths (then body-check them — an empty/generic 200 is not a leak).make cron— confirm cron endpoints reject unauthenticated requests.
4. Authorization / tenant isolation
make bola— cross-tenant IDOR (Insecure Direct Object Reference), a.k.a. BOLA (Broken Object-Level Authorization): collect owner resource IDs, replay them as a second tenant (tenant_b). A 200 == cross-tenant leak. Needs a 2nd tenant identity.make bfla— BFLA (Broken Function-Level Authorization): probe admin / RBAC (Role-Based Access Control) endpoints as a low-role member; any success is privilege escalation.
Abbreviations are expanded on first use here; the web-recon-kit repo carries a fuller
docs/glossary.md.
5. Aggregate + verify
make report→results/report.md.- Run the harness's
verify_findingsworkflow (agentic, adversarial) over candidate findings BEFORE writing anything up — independent panels judge each; a 200 may be a legitimately-public resource,403 ≠ leak, and status alone rarely proves a cross-tenant read.
6. Report
Produce a provenance-tagged report: which tool established each fact (curl / WebFetch / polyfetch / harness), severity, and a repro. Separate confirmed findings from candidates. Recommend remediation.
Safety rails
- Read-only by default; mutating verbs are never emitted (cron/BOLA/BFLA probes are GETs).
Any
--danger-post-style path requires an explicit, disposable environment. - Throttled per-host (
rate.per_host_delay_ms) — never DoS; no mass-fuzzing without authorization. scope.toml,results/, and the generated inventory are git-ignored (they hold target data).- BOLA and schemathesis need extra inputs (a 2nd identity / an OpenAPI spec); the runners skip cleanly when those are absent — report the gap rather than silently covering less.