Si uno busca como resolver el error de Veracode 117, uno se encuentra que las soluciones en el tan útil StackOverflow están medias incompletas. En el proyecto en el que estamos, nos reclamó en la siguiente sentencia:
log.trace(requestBody);
Este bloque de código, por muy inútil que parece, nos servia para entender que información llegaba.
Al analizar ese código con Veracode, nos entregaba un error CWE 117. Al buscar, no nos dice mucho. El titulo de la canción es que no se está controlando caracteres especiales en la salida de los mensajes. Es por esto que se puede generar un ataque de inyección de código.
En StackOverflow, la solución era cambiar el tipo de logger (nosotros ocupamos lombok slf4 o log4j) al siguiente:
private static final Logger logger = ESAPI.getLogger(MyClass.class);
Dicho código rompía totalmente nuestro código. Nunca entendí por que y resolverlo fue mas complicado. En ese momento era la única opción que habíamos encontrado.
Como no funcionaba nuestro código y parecía que había que tocar mucho para hacerlo funcionar. Buscamos y encontramos el siguiente link que claramente habla del tema mas especifico.
Pass Veracode CWE 117 (Improper Output Neutralization for Logs)
Nosotros no ocupamos mucho el input y output de ese log mas que informativo para nosotros. Es por esto que ocupamos la siguiente sentencia para resolver nuestro error (y de pasada agregar un poco mas de info a la información de este):
log.trace("Encoded requestBody:"+Encode.forJava(requestBody));
Con esto, ese error desaparece sin siquiera cambiar el logger.
Creo que esa pagina le podría ayudar a mas personas a resolver el problema de CWE 117 Veracode.
Leave a Reply