miércoles, 5 de agosto de 2020

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.

No hay comentarios:

Publicar un comentario