
Parche de seguridad para CVE-2023-26136 en tough-cookie 2.5.0 - Corrección de vulnerabilidad de contaminación de prototipos con compatibilidad hacia atrás
Este proyecto aborda CVE-2023-26136, una vulnerabilidad crítica de contaminación de prototipos en versiones de tough-cookie anteriores a la 4.1.3. La vulnerabilidad afecta a la aplicación web de Penguin Software Inc., que utiliza [email protected] para el procesamiento de cookies.
CVE-2023-26136 es una vulnerabilidad de contaminación de prototipos que ocurre cuando se usa CookieJar con rejectPublicSuffixes=false. El problema surge de una inicialización inadecuada de objetos en la clase MemoryCookieStore, lo que permite a los atacantes inyectar propiedades en el Object.prototype a través de dominios de cookies maliciosamente manipulados.
La vulnerabilidad existe en lib/memstore.js donde las cookies se almacenan usando objetos JavaScript simples ({}). Dado que estos objetos heredan del Object.prototype, los atacantes pueden explotar esto estableciendo cookies con dominios como __proto__, constructor o prototype, lo que provoca contaminación de prototipos.
La corrección reemplaza todas las instancias de {} con Object.create(null) en la clase MemoryCookieStore:
// Before (vulnerable)
this.idx = {};
// After (fixed)
this.idx = Object.create(null);
Este cambio previene la contaminación de prototipos al crear objetos sin cadena de prototipos, aislando efectivamente el almacenamiento de cookies de herencias no deseadas.
lib/memstore.js: Inicialización de objetos actualizada para usar Object.create(null)├── README.md # This file
├── changes.diff # Git-compatible diff file
├── test-cve-2023-26136.js # Unit test for the fix
├── tough-cookie/
│ ├── index.js # Exploit demonstration
│ ├── Original v2.5.0/ # Original vulnerable version
│ ├── v2.5.0-PATCHED/ # Patched version
│ │ └── tough-cookie-2.5.0.tgz # Packed version
│ └── package.json
└── mission.txt # Original mission requirements
La versión parcheada está disponible como tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz.
Para instalar:
npm install ./tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz
El conjunto de pruebas original de tough-cookie debería pasar. Para ejecutar las pruebas:
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
Nota: La versión original de tough-cookie 2.5.0 no incluye un directorio de pruebas en esta distribución, pero la versión parcheada mantiene total compatibilidad con la API original.
Ejecute la prueba unitaria personalizada para verificar la corrección:
node test-cve-2023-26136.js
Salida esperada:
Testing CVE-2023-26136 fix...
✅ CVE-2023-26136 fix verified: No prototype pollution detected
✅ Test passed: The vulnerability has been successfully patched
El proyecto incluye una demostración del exploit en tough-cookie/index.js:
cd tough-cookie
node index.js
Esto probará tanto la versión original vulnerable como la versión parcheada, mostrando:
EXPLOITED SUCCESSFULLY para la versión originalEXPLOIT FAILED para la versión parcheadaEl archivo changes.diff contiene un diff compatible con git que se puede aplicar usando:
git apply changes.diff
Este diff incluye solo los cambios necesarios para corregir la vulnerabilidad sin modificaciones no deseadas.
El exploit funciona de la siguiente manera:
CookieJar con rejectPublicSuffixes: false__proto__Object.prototypeDaño potencial:
✅ Probado y verificado en Node.js 20 (LTS)
Repositorio de GitHub: Repositorio fork de tough-cookie
Git Tag: v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - Nivel experto
Jenkins - Nivel avanzado
Travis CI - Nivel intermedio
CircleCI - Nivel intermedio
GitLab CI/CD - Nivel avanzado
Este proyecto mantiene la licencia original de tough-cookie (BSD-3-Clause) mientras añade la corrección de seguridad.
Nota: Este es un parche centrado en la seguridad que mantiene la compatibilidad total hacia atrás mientras elimina la vulnerabilidad CVE-2023-26136.