
Este repositório contém uma solução para a vulnerabilidade CVE-2023-26136.
Versões do pacote tough-cookie anteriores a 4.1.3 são vulneráveis a Prototype Pollution devido ao manuseio incorreto de cookies ao usar CookieJar no modo rejectPublicSuffixes=false. Esse problema surge da forma como os objetos são inicializados.
Este projeto visa fornecer uma versão corrigida do [email protected] que elimina a vulnerabilidade CVE-2023-26136 garantindo compatibilidade reversa.
Para corrigir a vulnerabilidade, modificamos o memstore.js para garantir que os cookies sejam armazenados em um objeto sem riscos de prototype pollution, substituindo a inicialização padrão de objetos por Object.create(null). Isso impede a manipulação do protótipo por meio de nomes de cookies maliciosamente elaborados.
No diretório tough-cookie/, podemos encontrar dois diretórios adicionais contendo as versões original e corrigida do tough-cookie:
Original v2.5.0/) – tough-cookie 2.5.0 sem modificações, que é vulnerável.v2.5.0-PATCHED/) – Uma versão modificada que inclui uma correção para CVE-2023-26136.Para instalar a versão original vulnerável:
npm install [email protected]
O patch aplicado altera a forma como os cookies são armazenados: this.idx = {}; foi alterado para: this.idx = Object.create(null);
Isso impede que atacantes injetem propriedades na cadeia de protótipos e explorem a vulnerabilidade.
A vulnerabilidade no tough-cookie (CVE-2023-26136) surge devido ao uso de um objeto JavaScript simples {} para armazenar cookies. Como {} herda de Object.prototype, ele pode ser explorado injetando propriedades como proto, levando à prototype pollution. Isso poderia permitir que um atacante manipulassse o comportamento da aplicação ou causasse problemas de segurança.
Para mitigar isso, o patch substitui {} por Object.create(null), que cria um objeto sem protótipo ([[Prototype]]: null). Isso garante que o objeto não herde nenhuma propriedade de Object.prototype, impedindo que atacantes injetem propriedades maliciosas.
Ao usar Object.create(null), isolamos efetivamente o armazenamento de cookies de heranças de protótipo não intencionais, tornando-o mais seguro contra ataques de prototype pollution.
Para instalar a versão corrigida localmente, siga estas etapas:
tar -tzf tough-cookie-2.5.0.tgz
Se necessário, extraia:
tar -xzf tough-cookie-2.5.0.tgz
npm install ./tough-cookie-2.5.0.tgz
node index.js
Saída esperada:
EXPLOITED SUCCESSFULLY - para a versão original
EXPLOIT FAILED - para a versão corrigida
A versão corrigida foi testada no Node.js 20 (LTS) para garantir compatibilidade com o ambiente de execução estável mais recente.
O repositório original do tough-cookie (Salesforce) está atualmente na versão 5.1.1. Como estamos trabalhando com a versão 2.5.0, um fork direto do repositório principal não é possível. Em vez disso, criamos um repositório separado contendo as versões original e corrigida. Você pode encontrá-lo aqui:
Repositório GitHub - Versão Forkada
Para mais detalhes, visite a página oficial do CVE: CVE-2023-26136 - NVD