1. Descripción técnica
Apache Log Poisoning encadena dos comportamientos. Primero, Apache registra un valor controlado por el cliente, como User-Agent, dentro de un archivo de log. Después, una vulnerabilidad de inclusión hace que el intérprete procese ese log como código en lugar de devolverlo únicamente como texto.
La escritura en el log no concede ejecución por sí sola y la inclusión de un log inocuo tampoco. La RCE aparece cuando el atacante controla contenido registrado, conoce una ruta incluible y el motor de la aplicación interpreta el fragmento inyectado.
// renderizando diagrama…
2. Impacto
El encadenamiento puede transformar una LFI en ejecución de comandos bajo la cuenta del servidor web. También puede contaminar registros y dificultar su análisis. El impacto depende del formato del log, sus permisos, la ruta de inclusión y la configuración del intérprete.
3. Condiciones necesarias
- Apache registra una entrada controlada por el atacante.
- El payload sobrevive al formato y escapado del log.
- La aplicación puede incluir el archivo de log desde el sistema local.
- La inclusión entrega el contenido a un intérprete capaz de ejecutar el fragmento.
- El proceso web puede leer el archivo registrado.
4. Validación y detección
La validación debe separar cada etapa: confirmar el valor en el log, leer el mismo archivo mediante la inclusión y realizar una prueba de ejecución sin efectos destructivos. El formato combined de Apache puede registrar %{User-agent}i, pero cada despliegue debe verificar su LogFormat real.
Desde defensa conviene buscar delimitadores de código en logs, solicitudes de inclusión dirigidas a rutas de Apache y cabeceras anómalas. La ausencia del payload en la respuesta no descarta que haya quedado registrado.
5. Explotación documentada en los writeups
5.1. 118-tripladvisor
El servidor almacena PHP enviado en User-Agent dentro de access.log. Una LFI posterior incluye ese archivo y hace que PHP interprete el fragmento, proporcionando ejecución de comandos con la identidad del servicio web.
6. Mitigación
- Corregir la LFI mediante selección explícita de recursos y rutas canónicas.
- Mantener logs fuera de rutas incluibles por la aplicación.
- Evitar que el intérprete procese archivos de log como código.
- Aplicar permisos mínimos entre el servidor web, sus logs y la aplicación.
- Codificar entradas no confiables antes de registrarlas cuando el formato lo requiera.
- Monitorizar inclusiones de rutas sensibles y payloads de código en cabeceras.
7. Clasificación
- CWE-98: Improper Control of Filename for Include/Require Statement in PHP Program
- CWE-117: Improper Output Neutralization for Logs
- Resultado del encadenamiento: Remote Code Execution.