¿Error 403? Con solo añadir un «?» puedes acceder al panel de administración cerrado

¿Error 403? Con solo añadir un «?» puedes acceder al panel de administración cerrado

Un fallo arquitectónico en el popular framework de Python Starlette convierte cualquier control de acceso en una mera ilusión.

image

El popular framework de Python Starlette, sobre el que se construye FastAPI, fue afectado por una vulnerabilidad que permite eludir las protecciones de las aplicaciones mediante la suplantación del encabezado Host. El problema afecta a las versiones de Starlette desde 0.8.3 hasta 1.0.0 y ya ha recibido una calificación de gravedad.

Los especialistas de X41 D-Sec averiguaron que Starlette reconstruye incorrectamente la dirección de la solicitud. El framework construye la URL a partir de la ruta de la solicitud y del contenido del encabezado Host, pero no verifica la corrección del valor Host. Un atacante puede añadir caracteres adicionales en el encabezado y, de hecho, suplantar la ruta de la solicitud en el manejador de la aplicación.

El problema surge porque el enrutamiento de Starlette utiliza la ruta HTTP real, mientras que parte de los mecanismos de protección se basan en request.url.path, que se construye a partir de la URL ya modificada. Como resultado, la aplicación puede considerar que el usuario accede a una sección permitida, aunque en realidad la solicitud va a un recurso protegido.

En un ejemplo publicado, los especialistas mostraron cómo se elude la protección del panel de administración mediante un encabezado Host especialmente formado. Una solicitud normal a "/admin" devolvía un error 403, pero añadir el carácter "?" en el Host permitía acceder a la sección protegida y devolver datos secretos.

Según X41 D-Sec, los especialistas comprobaron automáticamente proyectos abiertos y detectaron numerosos manejadores intermedios que utilizan request.url para verificar el acceso a rutas individuales. Un error de este tipo permite al atacante no solo eludir la autenticación, sino también realizar ataques SSRF, y, en casos aislados, incluso ejecutar código de forma remota.

La vulnerabilidad afecta a todos los servidores ASGI populares, incluidos Uvicorn, Hypercorn, Daphne y Granian, si las aplicaciones dependen de request.url.path.

Los desarrolladores de Starlette publicaron una corrección en la versión 1.0.1. Antes de instalar la actualización, los especialistas recomiendan usar request.scope["path"] en lugar de request.url.path, así como verificar los encabezados Host en el nivel del proxy inverso — por ejemplo nginx o Apache HTTP Server.

El problema se detectó el 27 de enero de 2026 durante una auditoría externa del código fuente. La corrección se publicó públicamente el 21 de mayo. La vulnerabilidad recibió el identificador CVE-2026-48710, y ya está registrada en GitHub con el número GHSA-86qp-5c8j-p5mr. Evaluación CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N — 6.5 Medium