Vulnerabilidad de evaluación de código remoto

--Originally published at CRACK THE NETWORK

 

La evaluación de código remoto es una vulnerabilidad que puede explotarse si el input del usuario se inyecta en un archivo o una cadena y se ejecuta mediante el parser del lenguaje de programación. Por lo general, este comportamiento no está previsto por el desarrollador de la aplicación web. Una Evaluación de Código Remoto puede llevar a un compromiso completo de la aplicación web vulnerable y también del servidor web. Es importante señalar que casi todos los lenguajes de programación tienen funciones de evaluación de código.

Una evaluación de código puede ocurrir si permite el input del usuario dentro de las funciones que están evaluando el código en el lenguaje de programación respectivo. Esto puede ser implementado a propósito, por ejemplo, para acceder a funciones matemáticas del lenguaje de programación para crear una calculadora, o accidentalmente porque no se espera la entrada controlada por el usuario del desarrollador dentro de esas funciones. Generalmente no se recomienda hacerlo. De hecho, se considera una mala práctica usar la evaluación de código.

Un atacante que es capaz de ejecutar tal falla suele ser capaz de ejecutar comandos con los privilegios del lenguaje de programación o el servidor web. En muchos lenguajes puede emitir comandos del sistema, escribir, borrar o leer archivos o conectarse a bases de datos.

Como regla general, debe evitar usar el input del usuario dentro del código evaluado. La mejor opción sería no utilizar funciones como eval en absoluto. Se considera que es una mala práctica y con frecuencia puede evitarse completamente. Tampoco debe permitir que un usuario modifique el contenido de los archivos que puedan ser analizados por los respectivos lenguajes. Eso incluye no permitir que un usuario decida el nombre y las extensiones de los archivos que él o ella podría cargar o crear en la aplicación

.

Recursos adicionales:

 

https://www.owasp.org/index.php/Direct_Dynamic_Code_Evaluation_(‘Eval_Injection’)