
Correção de segurança para CVE-2023-26136 no tough-cookie 2.5.0 - Correção da vulnerabilidade de poluição de protótipo com compatibilidade retroativa
Este projeto aborda a CVE-2023-26136, uma vulnerabilidade crítica de poluição de protótipo nas versões do tough-cookie anteriores a 4.1.3. A vulnerabilidade afeta o aplicativo web da Penguin Software Inc., que utiliza [email protected] para processamento de cookies.
A CVE-2023-26136 é uma vulnerabilidade de poluição de protótipo que ocorre quando o CookieJar é usado com rejectPublicSuffixes=false. O problema surge da inicialização inadequada de objetos na classe MemoryCookieStore, permitindo que atacantes injetem propriedades no Object.prototype por meio de domínios de cookies maliciosamente elaborados.
A vulnerabilidade existe em lib/memstore.js, onde os cookies são armazenados usando objetos JavaScript simples ({}). Como esses objetos herdam de Object.prototype, os atacantes podem explorar isso definindo cookies com domínios como __proto__, constructor ou prototype, resultando em poluição de protótipo.
A correção substitui todas as ocorrências de {} por Object.create(null) na classe MemoryCookieStore:
// Before (vulnerable)
this.idx = {};
// After (fixed)
this.idx = Object.create(null);
Essa alteração evita a poluição de protótipo ao criar objetos sem cadeia de protótipo, isolando efetivamente o armazenamento de cookies de heranças não intencionais.
lib/memstore.js: Inicialização de objetos atualizada 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
A versão corrigida está disponível 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
A suíte de testes original do tough-cookie deve passar. Para executar os testes:
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
Nota: O tough-cookie 2.5.0 original não inclui um diretório de testes nesta distribuição, mas a versão corrigida mantém compatibilidade total com a API original.
Execute o teste unitário personalizado para verificar a correção:
node test-cve-2023-26136.js
Saída esperada:
Testing CVE-2023-26136 fix...
✅ CVE-2023-26136 fix verified: No prototype pollution detected
✅ Test passed: The vulnerability has been successfully patched
O projeto inclui uma demonstração do exploit em tough-cookie/index.js:
cd tough-cookie
node index.js
Isto testará tanto a versão vulnerável original quanto a versão corrigida, mostrando:
EXPLOITED SUCCESSFULLY para a versão originalEXPLOIT FAILED para a versão corrigidaO arquivo changes.diff contém um diff compatível com git que pode ser aplicado usando:
git apply changes.diff
Este diff inclui apenas as alterações necessárias para corrigir a vulnerabilidade, sem quaisquer modificações não intencionais.
O exploit funciona da seguinte forma:
CookieJar com rejectPublicSuffixes: false__proto__Object.prototypeDanos Potenciais:
✅ Testado e verificado no Node.js 20 (LTS)
Repositório GitHub: Fork do repositório tough-cookie
Tag Git: v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - Nível especialista
Jenkins - Nível avançado
Travis CI - Nível intermediário
CircleCI - Nível intermediário
GitLab CI/CD - Nível avançado
Este projeto mantém a licença original do tough-cookie (BSD-3-Clause) enquanto adiciona a correção de segurança.
Nota: Este é um patch focado em segurança que mantém total compatibilidade retroativa enquanto elimina a vulnerabilidade CVE-2023-26136.