Portada » Home » Aplicaciones de Node.js se abren a prototipos de ataques

Aplicaciones de Node.js se abren a prototipos de ataques

Una función de transferencia de JavaScript de node-forge contiene una vulnerabilidad que podría permitir a los atacantes realizar prototipos de ataques de contaminación contra aplicaciones, según un aviso en GitHub.

Node-forge , utilizado por más de 3.5 millones de repositorios, implementa varias utilidades de criptografía, el protocolo TLS y herramientas para desarrollar aplicaciones web.

La contaminación de prototipos es un error peligroso que permite a los atacantes manipular el comportamiento de una aplicación modificando su código en tiempo de ejecución.

Por lo general, se lleva a cabo a través de entradas maliciosas y, según los componentes vulnerables, puede conducir a una variedad de ataques, incluida la denegación de servicio o incluso la ejecución remota de código ( RCE ).

El culpable de node-forge fue util.setPath () , una función que existía desde las primeras versiones de la biblioteca antes de que se centrara en la criptografía.


“Util.setPath tenía un problema potencial de seguridad de contaminación del prototipo cuando se usaba con entradas inseguras”, escribe el registro de cambios de node-forge. setPath es una función de propósito general que permite a los desarrolladores cambiar las propiedades de los objetos pasando cadenas de texto.

El error se informó por primera vez a Snyk , que reveló sus hallazgos después de que los mantenedores de node-forge lanzaron un parche.

La vulnerabilidad ha recibido una puntuación de alta gravedad de 9,8 en Snyk y 7,3 por la Base de datos nacional de vulnerabilidades. Una prueba de concepto publicada en el sitio web de Snyk muestra que setPath puede usarse para contaminar la propiedad __prototype__ del Objeto base, lo que resulta en modificaciones en toda la aplicación.

Los mantenedores de node-forge sugieren usar otras bibliotecas que tengan funcionalidades similares de establecimiento de propiedades, como lodash , pero también advierten sobre posibles vulnerabilidades de contaminación de prototipos en esas bibliotecas.

¿Qué es la contaminación prototipo?

JavaScript está basado en prototipos: cuando se crean nuevos objetos, estos transfieren las propiedades y métodos del prototipo de “objeto”, que contiene funcionalidades básicas como toString, constructor y hasOwnProperty.

La herencia basada en objetos le da a JavaScript la flexibilidad y eficiencia que a los programadores web les encanta, pero también lo hace vulnerable a la manipulación.

Los actores malintencionados pueden realizar cambios en toda la aplicación en todos los objetos modificando el objeto, de ahí el nombre contaminación de prototipo.

Curiosamente, los atacantes ni siquiera necesitan modificar directamente el objeto; pueden acceder a él a través de la propiedad ‘ __proto__ ‘ de cualquier objeto JavaScript. Y una vez que realiza un cambio en el objeto, se aplica a todos los objetos JavaScript en una aplicación en ejecución, incluidos los creados después de la manipulación.

Aquí hay un ejemplo simple de cómo funciona la contaminación prototipo. El siguiente código cambia el valor de la función toString en el prototipo a un código arbitrario:

let customer = {name: «person», address: «here»}
console.log (customer.toString ())
// output: «[object Object]»

cliente .__ proto __. toString = () => {alerta («contaminado»)}
console.log (cliente.toString ())
// aparece el cuadro de alerta: «contaminado»

More Reading

Post navigation