{"url":"https://writeups.es/writeups/portswigger/url-based-access-control-can-be-circumvented/juanluismm520","machine":{"name":"URL-based access control can be circumvented","slug":"url-based-access-control-can-be-circumvented","platform":"PortSwigger Web Security Academy","platform_slug":"portswigger","difficulty":"facil","difficulty_label":"Fácil","operating_system":["Linux","Web"],"tags":["web"],"original_url":"https://portswigger.net/web-security/access-control/lab-url-based-access-control-can-be-circumvented","all_writeups":"https://writeups.es/maquinas/portswigger/url-based-access-control-can-be-circumvented"},"author":{"nickname":"juanluismm520","url":"https://writeups.es/u/juanluismm520","bio":null},"summary":null,"outline":[{"level":1,"title":"URL-based access control can be circumvented","anchor":"https://writeups.es/writeups/portswigger/url-based-access-control-can-be-circumvented/juanluismm520#url-based-access-control-can-be-circumvented"},{"level":2,"title":"📝 Resumen","anchor":"https://writeups.es/writeups/portswigger/url-based-access-control-can-be-circumvented/juanluismm520#resumen"},{"level":2,"title":"🔍 Análisis y Arquitectura","anchor":"https://writeups.es/writeups/portswigger/url-based-access-control-can-be-circumvented/juanluismm520#analisis-y-arquitectura"},{"level":3,"title":"El Mecanismo de Discrepancia","anchor":"https://writeups.es/writeups/portswigger/url-based-access-control-can-be-circumvented/juanluismm520#el-mecanismo-de-discrepancia"},{"level":2,"title":"💥 Explotación (Bypass de Control de Acceso)","anchor":"https://writeups.es/writeups/portswigger/url-based-access-control-can-be-circumvented/juanluismm520#explotacion-bypass-de-control-de-acceso"},{"level":3,"title":"Petición HTTP Modificada (Burp Suite Repeater)","anchor":"https://writeups.es/writeups/portswigger/url-based-access-control-can-be-circumvented/juanluismm520#peticion-http-modificada-burp-suite-repeater"}],"cves":[],"code_languages":["http"],"stats":{"words":339,"reading_minutes":2,"votes":0},"content_markdown":"# URL-based access control can be circumvented\n\n> Plataforma: **PortSwigger Web Security Academy** | Dificultad: **Fácil** | IP: `<IP>`\n\n---\n\n## 📝 Resumen\n\nEste 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*.\n\nEl 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`.\n\n---\n\n## 🔍 Análisis y Arquitectura\n\nAl auditar la aplicación web, se determina que la infraestructura cuenta con dos capas de procesamiento de solicitudes HTTP:\n\n1. **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).\n2. **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`.\n\n### El Mecanismo de Discrepancia\nSi intentamos realizar una navegación convencional hacia la administración:\n`Cliente` ──[ GET /admin ]──> `Front-end` (Bloqueo inmediato)\n\nSin 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.\n\n---\n\n## 💥 Explotación (Bypass de Control de Acceso)\n\nPara 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\":\n\n- Definimos el método principal apuntando a una ruta autorizada (`GET /`) para que el **front-end** valide y apruebe el tráfico.\n- Añadimos la cabecera `X-Original-URL: /admin` para 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.\n\n### Petición HTTP Modificada (Burp Suite Repeater)\n\nInterceptamos la petición hacia la raíz y le inyectamos la cabecera maliciosa:\n\n\n\n```http\nGET / HTTP/1.1\nHost: 0ac800ff04fb1fd880ccb769002d0046.web-security-academy.net\nCookie: session=zzuE12zRfobCQJ8nNYAlm4UDeveP1txo\nX-Original-URL: /admin\nCache-Control: max-age=0\n... [resto de cabeceras]\nConnection: close\n","published_at":"2026-06-08T18:35:40.801795+00:00","updated_at":"2026-08-14T18:15:44.659871+00:00","license":"CC BY-SA 4.0","attribution":"Writeup de juanluismm520 publicado en writeups.es — https://writeups.es/writeups/portswigger/url-based-access-control-can-be-circumvented/juanluismm520"}