
Este repositorio contiene una solución para la vulnerabilidad 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 inadecuado de cookies cuando se usa CookieJar en modo rejectPublicSuffixes=false. Este problema surge por la forma en que se inicializan los objetos.
Este proyecto tiene como objetivo proporcionar una versión parcheada de [email protected] que elimine la vulnerabilidad CVE-2023-26136 garantizando al mismo tiempo la compatibilidad hacia atrás.
Para corregir la vulnerabilidad, modificamos memstore.js para asegurar que las cookies se almacenen en un objeto sin riesgos de contaminación de prototipos, reemplazando la inicialización estándar de objetos por Object.create(null). Esto evita la manipulación del prototipo mediante nombres de cookies maliciosamente diseñados.
En el directorio tough-cookie/ podemos encontrar dos directorios adicionales que contienen las versiones original y parcheada de tough-cookie:
Original v2.5.0/) – tough-cookie 2.5.0 sin modificar, que es vulnerable.v2.5.0-PATCHED/) – Una versión modificada que incluye una corrección para CVE-2023-26136.Para instalar la versión original vulnerable:
npm install [email protected]
El parche aplicado cambia la forma en que se almacenan las cookies: this.idx = {}; se cambió a: this.idx = Object.create(null);
Esto evita que los atacantes inyecten propiedades en la cadena de prototipos y exploten la vulnerabilidad.
La vulnerabilidad en tough-cookie (CVE-2023-26136) surge debido al uso de un objeto JavaScript plano {} para almacenar cookies. Dado que {} hereda de Object.prototype, puede ser explotado inyectando propiedades como proto, lo que conduce a la contaminación de prototipos. Esto podría permitir a un atacante manipular el comportamiento de la aplicación o causar problemas de seguridad.
Para mitigar esto, el parche reemplaza {} con Object.create(null), que crea un objeto sin prototipo ([[Prototype]]: null). Esto garantiza que el objeto no herede ninguna propiedad de Object.prototype, impidiendo que los atacantes inyecten propiedades maliciosas.
Al usar Object.create(null), aislamos eficazmente el almacén de cookies de la herencia de prototipos no deseada, haciéndolo más seguro frente a ataques de contaminación de prototipos.
Para instalar la versión parcheada localmente, sigue estos pasos:
tar -tzf tough-cookie-2.5.0.tgz
Si es necesario, extráelo:
tar -xzf tough-cookie-2.5.0.tgz
npm install ./tough-cookie-2.5.0.tgz
node index.js
Salida esperada:
EXPLOITED SUCCESSFULLY - para la versión original
EXPLOIT FAILED - para la versión parcheada
La versión parcheada ha sido probada en Node.js 20 (LTS) para garantizar la compatibilidad con el entorno de ejecución estable más reciente.
El repositorio original de tough-cookie (Salesforce) se encuentra actualmente en la versión 5.1.1. Dado que estamos trabajando con la versión 2.5.0, no es posible hacer un fork directo del repositorio principal. En su lugar, creamos un repositorio separado que contiene tanto la versión original como la parcheada. Puedes encontrarlo aquí:
Repositorio de GitHub - Versión bifurcada
Para más detalles, visita la página oficial de CVE: CVE-2023-26136 - NVD