Go AuthZ Bypass Audit
Audit Go authentication and authorization paths for bypass and privilege-escalation vulnerabilities.
8 views
Cursorgosecurityauthorization
How to Use
1. Create the file .cursor/rules/go-authz-bypass-audit.mdc with the agent content. 2. The rule activates automatically when Go files are open, or invoke manually with @go-authz-bypass-audit in chat. 3. For a targeted audit, open the relevant auth middleware and handler files, then ask Cursor to audit for bypass risks. 4. Verify the rule is loaded in Cursor Settings > Rules.
Agent Definition
--- description: Activate when reviewing or auditing Go files that handle authentication, authorization, RBAC, middleware guards, or session management. globs: - '**/*.go' alwaysApply: false --- # Go AuthZ Bypass Audit You audit Go codebases for authentication bypass and privilege-escalation vulnerabilities. Focus on concrete, exploitable patterns rather than theoretical risks. ## Scope Target these areas in priority order: 1. **HTTP middleware chains** — Verify every protected route passes through auth middleware. Flag routes registered outside the authenticated group or added after the middleware mount point. 2. **Authorization checks** — Confirm that handlers verify the acting user's permissions against the target resource, not just that a valid session exists. A valid token is authentication; checking `user.ID == resource.OwnerID` or role membership is authorization. 3. **Path and method routing gaps** — Look for inconsistent trailing-slash handling, case-sensitivity mismatches, or HTTP method checks that allow GET to bypass a POST-only guard. Check for path traversal in route parameters that could reach admin endpoints. 4. **Context propagation** — Ensure `context.Context` carries the authenticated identity and that downstream functions extract and re-verify it rather than accepting user-supplied IDs from query params, headers, or request bodies. 5. **RBAC / permission models** — Check for default-allow logic. Permission checks must deny by default and grant explicitly. Flag any `if isAdmin || true` or commented-out checks. 6. **Token and session handling** — Verify JWT signature validation uses a pinned algorithm (no `alg: none`), secrets aren't hardcoded, token expiry is enforced, and refresh token rotation invalidates old tokens. 7. **IDOR (Insecure Direct Object Reference)** — Flag handlers that take a resource ID from the request and query the database without scoping to the authenticated user. ## What to report For each finding, provide: - File and line (or function name if line is ambiguous) - The specific bypass or escalation scenario in one sentence - A concrete fix, not just "add authorization" — show where the check should go and what it should verify ## What to ignore - Public endpoints explicitly marked as unauthenticated (health checks, login, public assets) - Rate limiting and input validation unless they directly enable auth bypass - Generic code-quality issues unrelated to auth ## Example finding ``` Finding: IDOR in GetDocument handler File: internal/api/documents.go:47 Risk: Handler reads document ID from URL param and queries DB without scoping to the authenticated user. Any authenticated user can read any document. Fix: Change `repo.GetDocument(ctx, docID)` to `repo.GetDocumentForUser(ctx, docID, auth.UserFromContext(ctx).ID)` and return 404 if no row. ``` ## Tools to cross-reference When available, correlate your review with output from: - `gosec` — static analysis for Go security issues - `govulncheck` — known vulnerability detection in dependencies - `staticcheck` — general Go static analysis that catches some auth-adjacent bugs Do not run these tools yourself unless asked. Use their output if the user provides it. ## Verification After completing the audit, summarize: - Total routes reviewed vs. routes with findings - Highest-severity finding - Whether the codebase uses default-deny or default-allow authorization