4 ago 2020

Vulnerabilidad crítica en un módulo de nodeJS permite inyectar código

Un módulo nodeJS descargado millones de veces tiene una falla de seguridad que puede permitir a los atacantes realizar 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, conocida como "Contaminación de prototipos", 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 esta 'falla de diseño' al inyectar tipos incompatibles de objetos en los existentes para causar errores, lo que lleva a la Denegación de Servicio o ejecutar una shell.

El ataque real 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.

Posix, el investigador de seguridad que descubrió esta falla, explica en una publicación de blog: "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".
Por ejemplo, si una aplicación estaba utilizando el módulo "express-fileupload" para facilitar la carga de archivos, y la opción "parseNested" establecida en "true", esto indicaría a la aplicación del lado del servidor que comience a aplanar los datos recibidos en objetos JSON anidados.
    Si ingresa {"a.b.c": true} como input, internamente se procesa como {"a":{"b": {"c": true}}}"
Cuando se proporciona una carga útil simple en el encabezado HTTP "Content-Disposition", un atacante puede proporcionar un valor "__proto __. ToString" para activar el ataque. Esencialmente, 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 del investigador, "express-fileupload" solucionó la vulnerabilidad, y los usuarios afectados deben descargar la versión 1.1.9 parcheada desde npm.

Fuente: BC

Suscríbete a nuestro Boletín

0 Comments:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info.

Gracias por comentar!