Inyección CRLF
¿Qué es Inyección CRLF?
Inyección CRLFAtaque que inserta retornos de carro y saltos de línea en cabeceras HTTP, registros u otros protocolos textuales para forjar nuevas líneas y alterar la semántica.
La inyección CRLF abusa del significado especial de la secuencia CR (0x0D) y LF (0x0A) que termina líneas en muchos protocolos textuales. Cuando una aplicación refleja entrada del usuario sin validar en cabeceras HTTP, registros, comandos SMTP o consultas LDAP, el atacante puede inyectar un par CRLF y contenido adicional para forjar cabeceras, dividir respuestas, ocultar entradas en logs o introducir comandos. La debilidad está catalogada como CWE-93 (neutralización incorrecta de secuencias CRLF); su variante específica de cabeceras HTTP es CWE-113, que cubre la división de peticiones/respuestas HTTP.
En entornos web, la forma más dañina es la división de respuestas HTTP, descrita por primera vez por Amit Klein, de Sanctum, en un artículo de 2004. Como el CRLF inyectado cierra el bloque de cabeceras, el atacante puede añadir una segunda respuesta totalmente controlada por él —envenenando cachés compartidas, fijando cookies arbitrarias o inyectando XSS en un cuerpo que el navegador considera de confianza—. El fallo reaparece en bibliotecas estándar: CVE-2019-9740 permitía que secuencias CRLF en una URL pasada a urllib.request.urlopen de Python inyectaran cabeceras HTTP (e incluso comandos Redis vía la cadena de consulta); se corrigió en Python 2.7.17 y 3.5.10/3.6.10/3.7.4. Las defensas incluyen rechazar o codificar en porcentaje los CR/LF en toda entrada destinada a cabeceras, usar APIs de alto nivel que rechacen caracteres de control en los valores de cabecera, y codificadores de logs estrictos y estructurados en lugar de la concatenación de cadenas en bruto.
flowchart TD
A[Entrada de usuario<br/>name=foo%0d%0aSet-Cookie: admin=true] --> B{¿Validar / quitar CR LF?}
B -->|No| C[Entrada escrita en bruto en la cabecera]
C --> D[El CRLF termina la cabecera actual]
D --> E[Cabecera o cuerpo controlado por el atacante]
E --> F[Envenenamiento de caché / inyección de cookie / XSS]
B -->|Sí, rechazar CR LF| G[Respuesta segura]● Ejemplos
- 01
Set-Cookie: id=foo%0d%0aSet-Cookie: admin=true — añade una segunda cookie mediante CRLF.
- 02
Location: /redir%0d%0aContent-Length:0%0d%0a%0d%0a<html>... — división de respuesta HTTP.
● Preguntas frecuentes
¿Qué es Inyección CRLF?
Ataque que inserta retornos de carro y saltos de línea en cabeceras HTTP, registros u otros protocolos textuales para forjar nuevas líneas y alterar la semántica. Pertenece a la categoría de Ataques y amenazas en ciberseguridad.
¿Qué significa Inyección CRLF?
Ataque que inserta retornos de carro y saltos de línea en cabeceras HTTP, registros u otros protocolos textuales para forjar nuevas líneas y alterar la semántica.
¿Cómo defenderse de Inyección CRLF?
Las defensas contra Inyección CRLF combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para Inyección CRLF?
Nombres alternativos comunes: Inyección de retorno y salto de línea, Inyección de logs.