Fecha de publicación: Vie, 07/08/2020 - 20:44

 

logonodejs

 

Recientemente se ha publicado un fallo de seguridad en un módulo Node.js que permitiría a un atacante producir una denegación de servicio (DoS) o la ejecución remota de código en un sistema vulnerable. A continuación, se exponen los detalles técnicos de la vulnerabilidad:

CVE-2020-7699: La vulnerabilidad conocida como "Prototype Pollution" radica en el componente npm "express-fileupload" antes de la versión 1.1.8. Este tipo de vulnerabilidad, generalmente ocurre en código JavaScript (JS) dada la naturaleza fundamental de este lenguaje. Debido a que JS es un lenguaje basado en prototipos, cada objeto, función y estructura de datos tiene una propiedad inherente "Prototype" que puede modificarse mediante un mutador "__proto__". Precisamente es esta capacidad de modificar el código la que permite una fácil extensión de los objetos existentes, con más propiedades y métodos. Los ataques de creación de prototipos de este tipo aprovechan este "fallo de diseño" al inyectar tipos incompatibles de objetos en los existentes para causar errores, lo que puede conducir a escenarios de denegación de servicio (DoS) e incluso conseguir acceso a shells remotas.

La base de datos del NIST ha asignado al CVE-2020-7699 un score de 9.8 según la escala CVSSv3, lo que significa que se trata de una vulnerabilidad crítica. Hasta la fecha no se conoce actividad dañina en la red, ni exploits que aprovechen esta vulnerabilidad.

Componentes afectados:

  • componente npm "express-fileupload" antes de la versión 1.1.8

Solución:

  • actualizar a la versión 1.1.9. o mayor a través del siguiente enlace:

             https://www.npmjs.com/package/express-fileupload

Recomendaciones:

Los entornos más susceptibles de sufrir un ataque del tipo "Prototype Pollution" son los servidores web y los servidores de aplicaciones. Por lo tanto, como medidas de prevención, se recomienda implementar las siguientes prácticas:

  • Aplicar los parches de seguridad en cuanto se encuentren disponibles.
  • Hacer uso de Object.freeze (Object.prototype).
  • Requerir validación de esquema de entrada JSON.
  • Evitar el uso de funciones de fusión recursivas inseguras.
  • Considerar usar objetos sin prototipos (por ejemplo, Object.create(null)), para romper la cadena del prototipo y prevenir posibles ataques.
  • Como práctica recomendada, usar Map en lugar de Object.

Más información: