CVE-2026-48710: HTTP Request Smuggling en Kludex Starlette
CVE-2026-48710: contrabando de peticiones HTTP en Starlette
Starlette, el framework/toolkit ligero ASGI sobre el que se construyen numerosas aplicaciones y APIs en Python (incluido el ecosistema de FastAPI), presenta una vulnerabilidad de HTTP Request/Response Smuggling catalogada como CVE-2026-48710 (CWE-444, "Inconsistent Interpretation of HTTP Requests"). La falla fue incorporada al catálogo CISA KEV (Known Exploited Vulnerabilities) el 2 de septiembre de 2026, lo que confirma que está siendo explotada activamente. Su puntuación es CVSS 6.5 (MEDIA), pero su facilidad de explotación y el enorme parque de aplicaciones afectadas la convierten en un riesgo prioritario.
Análisis Técnico
El origen del problema está en que, en las versiones afectadas, la cabecera HTTP Host no se validaba antes de ser usada para reconstruir el objeto request.url. Existe una discrepancia crítica entre dos rutas de código:
- El algoritmo de enrutamiento de Starlette utiliza el path HTTP crudo tomado directamente del
scopeASGI. - El objeto
request.url(y por tantorequest.url.path) se reconstruye concatenandohttp://{host}{path}y volviendo a parsear el resultado.
Cuando la cabecera Host contiene caracteres fuera de la gramática permitida para uri-host por RFC 9112 §3.2 y RFC 3986 §3.2.2 —en particular /, ? o #—, esos caracteres desplazan los límites de path, query y fragment durante el re-parseo, provocando que el request.url.path resultante ya no coincida con la ruta que el servidor realmente recibió.
Vector de Ataque
Consideremos una petición legítima a /foo. Un atacante envía:
GET /foo HTTP/1.1Host: example.com/abc?bar=
Starlette reconstruye la URL como http://example.com/abc?bar=/foo, cuyo path parseado es /abc. Sin embargo, el router sigue despachando a /foo y el endpoint se ejecuta con normalidad. El resultado: cualquier middleware o código que lea request.url.path para tomar decisiones de seguridad "ve" /abc, mientras que la ejecución real ocurre en /foo. Esta inconsistencia permite eludir controles de autorización basados en la ruta (authentication/authorization bypass).
Impacto Operacional y de Seguridad
El impacto es especialmente grave en arquitecturas que aplican restricciones por prefijo de ruta:
- Bypass de autenticación/autorización cuando el control de acceso depende de la URL reconstruida en lugar del path crudo del
scope. - Middleware de seguridad que protege prefijos sensibles (por ejemplo
/admin,/internal) puede ser burlado, ejecutando el endpoint protegido mientras el control "ve" una ruta inocua. - CISA advierte que esta debilidad puede encadenarse con
CVE-2026-42271, ampliando el alcance del ataque.
Los despliegues situados tras un proxy o balanceador de carga solo están mitigados si ese proxy rechaza o normaliza la cabecera Host malformada antes de reenviarla, y la aplicación no confía en cabeceras controladas por el atacante (como X-Forwarded-Host) en ningún otro punto.
Productos Afectados
- Kludex Starlette en todas las versiones anteriores a la 1.0.1.
- Por extensión, aplicaciones y frameworks que dependen de Starlette y confían en
request.url/request.url.pathpara decisiones de seguridad.
Al tratarse de un componente de código abierto ampliamente reutilizado, CISA subraya que la vulnerabilidad puede estar presente en múltiples productos de terceros que lo integran de forma transitiva.
Recomendaciones y Mitigación
Acciones Inmediatas Recomendadas
- Actualizar Starlette a la versión 1.0.1 o superior, que valida la cabecera
Hostcontra la gramática de RFC 9112 §3.2 / RFC 3986 §3.2.2 al construirrequest.urly recurre ascope["server"]ante valores malformados. - Revisar dependencias transitivas (
pip list, SBOM) para detectar versiones vulnerables embebidas en otros paquetes. - Como mitigación defensiva, basar las decisiones de seguridad en el path crudo del
scopeASGI, no enrequest.url.path. - Configurar el proxy/balanceador frontal para rechazar o normalizar cabeceras
Hostmalformadas y no confiar enX-Forwarded-Hostno verificado. - Organismos FCEB: cumplir la fecha límite 16 de septiembre de 2026 conforme a la directiva BOD 26-04; si no hay mitigación disponible, discontinuar el uso del producto.