Inyección de Header HTTP (Inyección CRLF)
Input controlado por el usuario incluido en headers de respuesta HTTP sin sanitizar, permitiendo a atacantes inyectar headers arbitrarios o dividir la respuesta en dos respuestas HTTP separadas.
Cómo Funciona
Los headers HTTP terminan con `\r\n` (retorno de carro + salto de línea). Si pones input del usuario en un valor de header, un atacante puede inyectar `\r\n` para terminar el header actual y empezar uno nuevo — o incluso inyectar una línea en blanco para iniciar un body de respuesta falso. Esto habilita envenenamiento de caché, XSS via headers inyectados y fijación de sesión.
// MAL: input del usuario en el header de redirección
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const lang = searchParams.get('lang'); // atacante inyecta \r\nSet-Cookie: evil=1
return new Response(null, {
headers: { 'Location': `/home?lang=${lang}` }
});
}// BIEN: valida y sanitiza los valores de header
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const lang = searchParams.get('lang') ?? 'en';
// Elimina caracteres CRLF — no tienen lugar en valores de header
const safeLang = lang.replace(/[\r\n]/g, '');
const allowed = ['en', 'es', 'fr'];
if (!allowed.includes(safeLang)) return new Response('Bad Request', { status: 400 });
return new Response(null, { headers: { 'Location': `/home?lang=${safeLang}` } });
}Ejemplo Real
La inyección CRLF se encontró en frameworks populares y CDNs, permitiendo a atacantes inyectar cookies arbitrarias o respuestas envenenadas en caché para otros usuarios. El módulo http de Node.js lanza un error en CRLF en headers desde la v14, pero el código que construye headers manualmente sigue siendo vulnerable.
Cómo Prevenirlo
- Elimina \r y \n de cualquier input del usuario antes de usarlo en headers de respuesta
- Valida los valores de header contra una allowlist en lugar de blocklist
- Usa las funciones de redirección del framework que manejan el encoding automáticamente
- Nunca construyas URLs de redirección concatenando parámetros de query sin sanitizar
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Inyección LDAP
highInput del usuario insertado en filtros de búsqueda LDAP sin escapar, permitiendo a atacantes manipular queries de directorio, bypassear autenticación o extraer datos sensibles del directorio.
XXE — Inyección de Entidad Externa XML
highParsers XML configurados para procesar referencias a entidades externas, permitiendo a atacantes leer archivos arbitrarios del servidor o disparar SSRF con un payload XML malicioso.
Inyección de Header de Email
mediumInput del usuario sin sanitizar usado en los campos To, From, CC o Subject del email, permitiendo a atacantes inyectar destinatarios adicionales y convertir tu servidor de email en un relay de spam.
Inyección en Logs
lowInput provisto por el usuario escrito en logs sin sanitizar, permitiendo a atacantes falsificar entradas de log, ocultar sus huellas o inyectar contenido malicioso en archivos de log.