Vulnerabilidad crítica de nodeJS

Un módulo de nodeJS con millones de descargas, cuenta con una vulnerabilidad que puede permitir un ataque de Denegación de Servicio (DoS) en un servidor u obtener acceso a shell remoto completo.

Asignado al CVE-2020-7699, la vulnerabilidad radica en el componente npm «express-fileupload», que se ha descargado al menos 7.3 millones de veces desde npm. La estimación es conservadora, ya que no tiene en cuenta las descargas de GitHub, sitios web espejo y otros repositorios clonados. Este tipo de vulnerabilidad generalmente ocurre en el código JavaScript (JS) debido a la naturaleza fundamental del lenguaje. Debido a que JS es un lenguaje basado en prototipos, cada objeto, función y estructura de datos en el lenguaje tiene una propiedad inherente «Prototype» que puede modificarse mediante el mutador «__proto__». La capacidad de modificar el código existente es una característica prevista que permite la fácil extensión de los objetos existentes, con más propiedades y métodos.

Los ataques de creación de prototipos como este aprovechan este ‘fallo de diseño’ inyectando objetos incompatibles con los existentes para causar errores, lo que lleva a la Denegación de Servicio o ejecutar una shell.

El ataque es posible gracias a la función «parseNested» proporcionada por express-fileupload. Cuando está habilitada, esta opción es responsable de interpretar los datos JSON cargados en objetos anidados. El módulo express-fileupload proporciona varias opciones para cargar y administrar archivos en la aplicación Node.js. Entre ellos, el argumento de parseNested hace que el argumento sea plano.

Cuando se proporciona una carga útil en el encabezado HTTP «Content-Disposition», un atacante puede proporcionar un valor «__proto __. ToString» para activar el ataque. Básicamente, la solicitud HTTP anula y corrompe el método incorporado «toString» de cada objeto presente en su código. Entonces, si el «Object.prototype.toString» puede contaminarse, esto causa un error, y para cada solicitud siempre se devuelve un ERROR 500.

Una variación más sofisticada permite a un atacante obtener un shell en el sistema vulnerable. A las pocas horas de recibir el informe de un investigador, «express-fileupload» solucionó la vulnerabilidad, y los usuarios afectados deben descargar la versión 1.1.9 parcheada desde npm.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Intec Cybersecurity
Intec Cybersecurity
intec cybersecurity