
Corrige el paquete de código abierto que usa tough-cookie 2.5.0 - CVE-2023-26136,
Las versiones del paquete tough-cookie anteriores a la 4.1.3 son vulnerables a la contaminación de prototipos (Prototype Pollution) debido al manejo incorrecto de las cookies cuando se usa CookieJar en el modo rejectPublicSuffixes=false. Este problema surge de la forma en que se inicializan los objetos.
https://nvd.nist.gov/vuln/detail/CVE-2023-26136
La contaminación de prototipos es una vulnerabilidad que afecta a JavaScript. La contaminación de prototipos se refiere a la capacidad de inyectar propiedades en los prototipos de las construcciones existentes del lenguaje JavaScript, como los objetos. JavaScript permite que todos los atributos de Object sean alterados, incluidos sus atributos mágicos como proto, constructor y prototype. Un atacante manipula estos atributos para sobrescribir, o contaminar, el prototipo del objeto base de una aplicación JavaScript inyectando otros valores. Las propiedades de Object.prototype son entonces heredadas por todos los objetos JavaScript a través de la cadena de prototipos. Cuando esto ocurre, da lugar a una denegación de servicio al provocar excepciones de JavaScript, o a la manipulación del código fuente de la aplicación para forzar la ruta de código que inyecta el atacante, lo que conduce a la ejecución remota de código.
Hay dos formas principales en las que ocurre la contaminación de prototipos:
nota importante: https://github.com/salesforce/tough-cookie/issues/282 https://security.snyk.io/package/npm/tough-cookie/2.5.0
=> Para corregir la vulnerabilidad en la clase MemoryCookieStore, necesitas modificar el método putCookie para prevenir la contaminación de prototipos cuando cookie.domain esté establecido en proto.
https://github.com/salesforce/tough-cookie/pull/283
a. Cambiar tough_cookie_2.5.0\node_modules\tough-cookie\lib\memstore.js
Todas las apariciones de creación de nuevos objetos en memstore.js se han cambiado de {} Object.create(Object.prototype) a Object.create(null)
de modo que estamos usando instancias de objetos que no tienen una propiedad de prototipo que pueda ser contaminada.
b. Se creó un nuevo archivo, /node_modules/tough-cookie/lib/test-unit.js úsalo en vanillajs; se encuentra en la carpeta tests, archivo cookie_jar_test.js "Issue #282 - Contaminación de prototipos"
Comando: node test-unit.js
c. Se creó un nuevo archivo, /node_modules/tough-cookie/lib/testVerifyVulnerable.js verifica que el comportamiento vulnerable fue corregido.
Comando: node testVerifyVulnerable.js
change.diff : https://github.com/ronmadar/Open-Source-Seal-Security/blob/cf768f1932f087c30ebec7fe60c3fca323b4e54b/change.diff
a. Paquete normal tough-cookie V 2.5.0
Comando: npm install [email protected] && node index.js
b. Paquete comprimido tough-cookie V 2.5.0 en formato tgz con los cambios
Comando: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
c.
Contaminación de prototipos: Al añadir propiedades directamente a Object. prototype, existe el riesgo de contaminar toda la cadena de prototipos. Esto puede provocar comportamientos inesperados en toda la aplicación, ya que cualquier objeto que recorra la cadena de prototipos puede verse afectado.
Riesgos de seguridad: En el contexto de una aplicación web, la contaminación de prototipos puede ser explotada por atacantes para manipular objetos y propiedades, lo que puede conducir a vulnerabilidades de seguridad como la escalada de privilegios y la fuga de información.
Problemas de compatibilidad: Modificar prototipos centrales como Object. prototype puede introducir problemas de compatibilidad con otras bibliotecas o marcos de trabajo que dependen del comportamiento estándar. Esto puede causar errores o comportamientos inesperados al integrar o actualizar dependencias. d. escrito anteriormente.
Cómo instalar este proyecto