1. Descripción técnica
Nginx Alias Traversal es una variante de path traversal causada por una combinación insegura de una ubicación por prefijo y la directiva alias. Si el límite de la URI no coincide con el límite del directorio, una solicitud puede aportar un sufijo que empiece por ../; Nginx lo combina con el alias y resuelve una ruta fuera del directorio previsto.
El problema no se deduce de utilizar alias en general. Depende de la pareja exacta entre location, alias, barras finales y normalización de la ruta.
1.1. Mecanismo
// renderizando diagrama…
2. Impacto
La variante habitual permite leer archivos con los permisos del worker de Nginx: configuraciones, historiales, claves o código fuente. No implica por sí sola ejecución de PHP ni Remote Code Execution.
3. Condiciones necesarias
- Existe una directiva alias asociada a una ubicación por prefijo vulnerable.
- La discrepancia de barras permite añadir ../ después del prefijo.
- Nginx normaliza la ruta fuera del directorio esperado.
- El worker tiene permiso de lectura sobre el destino.
4. Validación y detección
La revisión principal compara cada location con su alias en la configuración efectiva. La validación dinámica debe comenzar con un archivo inofensivo fuera del directorio publicado y confirmar que el contenido, no sólo un código HTTP, llega a la respuesta.
Una cadena ../ reflejada, un 404 distinto o una pista en robots.txt no demuestra la vulnerabilidad.
5. Explotación documentada en los writeups
5.1. 059-decode
La ruta /decode../etc/passwd atraviesa el límite del alias y devuelve /etc/passwd. La misma primitiva recupera el historial de steve y un CSR con una credencial.
6. Mitigación
- Alinear las barras finales de location y alias.
- Preferir ubicaciones exactas o expresiones que delimiten el prefijo.
- Probar rutas que intenten cruzar el directorio publicado.
- Ejecutar el worker con acceso mínimo.
- Mantener secretos fuera del alcance de la cuenta del servidor web.
7. Clasificación
- CWE: CWE-22, Path Traversal
- Vector: URI manipulada contra un alias mal delimitado
- Impacto principal: Arbitrary File Read