VULNERABILIDADES DE APLICACIONES WEB: FALTA DE NEUTRALIZACIÓN DE CRLF

04.01.2018 21:10
La inadecuada neutralización de las secuencias de caracteres que marcan el retorno de carro y el cambio de línea (en inglés "Carriage Return" y "Line Feed - CRLF) puede ser aprovechada para atacar aplicaciones web con diversas consecuencias.
 
Si una aplicación vulnerable acepta al final de alguno de sus registros datos ingresados por el usuario (o simplemente controlables por él) sin neutralizar CRLF, el atacante podría inyectar algo similar a esto:
 
Cualquier texto usual de registro+dato ingresado o controlable por el usuario<CR><LF>ERROR GRAVE: ES IMPOSIBLE GUARDAR INFORMACIÓN EN BASE DE DATOS
 
siendo "<CR><LF>ERROR .... DATOS" parte de lo ingresado por el usuario.
 
El ataque podría hacer perder muchísimo tiempo al administrador, que   trataría de entender por qué se generó la línea: 
 
ERROR GRAVE: ES IMPOSIBLE GUARDAR INFORMACIÓN EN BASE DE DATOS
 
La línea con el texto usual de registro estaría completa y la siguiente - aparentemente independiente de la misma - parecería una alerta muy seria generada por la aplicación. Mientras el administrador estaría ocupado analizando el mensaje, el atacante podría aprovechar su distracción haciendo algo más grave.  
 
Como enseñamos a defender, no a atacar, hemos dado un ejemplo bastante "benigno" de ataque, los hay mucho peores.
 
Una de las formas de prevenir la inyección de CRLF es la siguiente. Damos el ejemplo para el lenguaje PHP, el lector lo adaptará fácilmente al de su interés:
 
<?php
$registar = $_GET["registrar"];
$eliminar = array("\n", "\r","%0d", "%0D", "%0a", "%0A");
$listo = str_replace($eliminar, "", $registrar);
?>
 
Si agrega echo delante de $listo podrá ver el resultado. Los retornos de carro y los cambios de línea habrán sido eliminados.