
Corrige o pacote de código aberto que usa tough-cookie 2.5.0 - CVE-2023-26136,
As versões do pacote tough-cookie anteriores à versão 4.1.3 são vulneráveis a Prototype Pollution devido ao tratamento inadequado de Cookies ao usar CookieJar no modo rejectPublicSuffixes=false. Esse problema surge da maneira como os objetos são inicializados.
https://nvd.nist.gov/vuln/detail/CVE-2023-26136
Prototype Pollution é uma vulnerabilidade que afeta JavaScript. Prototype Pollution refere-se à capacidade de injetar propriedades em protótipos de construções existentes da linguagem JavaScript, como objetos. JavaScript permite que todos os atributos de Object sejam alterados, incluindo seus atributos mágicos como proto, constructor e prototype. Um atacante manipula esses atributos para sobrescrever, ou poluir, o protótipo do objeto base de uma aplicação JavaScript, injetando outros valores. As propriedades em Object.prototype são então herdadas por todos os objetos JavaScript através da cadeia de protótipos. Quando isso acontece, isso leva a uma negação de serviço ao disparar exceções JavaScript, ou interfere no código-fonte da aplicação para forçar o caminho de código que o atacante injeta, levando à execução remota de código.
Existem duas maneiras principais pelas quais a poluição de protótipos ocorre:
nota importante: https://github.com/salesforce/tough-cookie/issues/282 https://security.snyk.io/package/npm/tough-cookie/2.5.0
=> Para corrigir a vulnerabilidade na classe MemoryCookieStore, você precisa modificar o método putCookie para evitar prototype pollution quando cookie.domain estiver definido como proto.
https://github.com/salesforce/tough-cookie/pull/283
a. Altere tough_cookie_2.5.0\node_modules\tough-cookie\lib\memstore.js
Todas as ocorrências de criação de novos objetos em memstore.js foram alteradas de {} Object.create(Object.prototype) para Object.create(null)
para que estejamos usando instâncias de objeto que não possuem uma propriedade de protótipo que possa ser poluída.
b. Criado um novo arquivo, /node_modules/tough-cookie/lib/test-unit.js usado em vanillajs para isso encontrado na pasta de testes no arquivo cookie_jar_test.js "Issue #282 - Prototype pollution"
Comando: node test-unit.js
c. Criado um novo arquivo, /node_modules/tough-cookie/lib/testVerifyVulnerable.js verificar se o comportamento vulnerável foi corrigido.
Comando: node testVerifyVulnerable.js
change.diff : https://github.com/ronmadar/Open-Source-Seal-Security/blob/cf768f1932f087c30ebec7fe60c3fca323b4e54b/change.diff
a. Pacote normal tough-cookie V 2.5.0
Comando: npm install [email protected] && node index.js
b. Pacote compactado tough-cookie V 2.5.0 em formato tgz com alterações
Comando: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
c.
Prototype Pollution: Ao adicionar propriedades diretamente ao Object. prototype, existe o risco de poluir toda a cadeia de protótipos. Isso pode levar a comportamentos inesperados em toda a aplicação, pois qualquer objeto que percorra a cadeia de protótipos pode ser afetado.
Riscos de Segurança: Em um contexto de aplicação web, a prototype pollution pode ser explorada por atacantes para manipular objetos e propriedades, potencialmente levando a vulnerabilidades de segurança como escalada de privilégios, vazamento de informações.
Problemas de Compatibilidade: Modificar protótipos principais como Object. prototype pode introduzir problemas de compatibilidade com outras bibliotecas ou frameworks que dependem do comportamento padrão. Isso pode causar erros ou comportamentos inesperados ao integrar ou atualizar dependências.
d. escrito acima.
Como instalar este projeto