URL-based access control can be circumvented
| Plataforma | PortSwigger Web Security Academy |
|---|---|
| Dificultad | 📗 Fácil |
| Sistema operativo | 🐧 Linux🌐 Web |
| Estado | Terminada |
| Técnicas | #web |
| Extensión | 339 palabras · 2 min |
| Máquina original | https://portswigger.net/web-security/access-control/lab-url-based-access-control-can-be-circumvented |
URL-based access control can be circumvented
Plataforma: PortSwigger Web Security Academy | Dificultad: Fácil | IP:
<IP>
📝 Resumen
Este laboratorio expone una vulnerabilidad crítica de control de acceso defectuoso (Broken Access Control) provocada por una discrepancia en la interpretación de las rutas de enrutamiento entre el sistema front-end (como un proxy inverso o WAF) y la aplicación back-end.
El objetivo consiste en evadir las restricciones perimetrales para acceder sin autenticación al panel de administración ubicado en /admin y proceder con la eliminación del usuario carlos.
🔍 Análisis y Arquitectura
Al auditar la aplicación web, se determina que la infraestructura cuenta con dos capas de procesamiento de solicitudes HTTP:
- Front-end: Actúa como un proxy perimetral. Tiene una regla estricta que deniega cualquier petición dirigida explícitamente a la ruta
/admin(devolviendo un código de estado de bloqueo, típicamente HTTP 403 Forbidden). - Back-end: Es el servidor interno que ejecuta la aplicación web real. Está construido sobre un framework que da soporte e interpreta la cabecera HTTP no estándar
X-Original-URL.
El Mecanismo de Discrepancia
Si intentamos realizar una navegación convencional hacia la administración:
Cliente ──[ GET /admin ]──> Front-end (Bloqueo inmediato)
Sin embargo, si la solicitud se realiza hacia una ruta permitida por el front-end (como la raíz /), el filtro perimetral la deja pasar al considerarla inofensiva.
💥 Explotación (Bypass de Control de Acceso)
Para engañar al ecosistema de servidores, nos aprovechamos de la prioridad que el framework del back-end le otorga a la cabecera X-Original-URL. La técnica consiste en "jugar al despiste":
- Definimos el método principal apuntando a una ruta autorizada (
GET /) para que el front-end valide y apruebe el tráfico. - Añadimos la cabecera
X-Original-URL: /adminpara que, una vez que la petición supere el perímetro y llegue al back-end, este sobreescriba internamente la ruta real y procese la lógica del panel de administración.
Petición HTTP Modificada (Burp Suite Repeater)
Interceptamos la petición hacia la raíz y le inyectamos la cabecera maliciosa:
http1GET / HTTP/1.1 2Host: 0ac800ff04fb1fd880ccb769002d0046.web-security-academy.net 3Cookie: session=zzuE12zRfobCQJ8nNYAlm4UDeveP1txo 4X-Original-URL: /admin 5Cache-Control: max-age=0 6... [resto de cabeceras] 7Connection: close
