
Prova de conceito para CVE-2026-21717, uma vulnerabilidade de colisão de hash de strings no V8 do Node.js que causa negação de serviço por meio de payloads JSON elaborados.
Vulnerabilidade de Colisão Previsível no Hash de Strings do V8 do Node.js que Leva a Negação de Serviço
Uma vulnerabilidade crítica no mecanismo de hash de strings do V8 permite que atacantes causem degradação severa de desempenho em aplicações Node.js. Strings semelhantes a inteiros são transformadas em hash para seu valor numérico, tornando colisões de hash trivialmente previsíveis. Ao criar entrada maliciosa que causa muitas colisões na tabela interna de strings do V8, um atacante pode degradar significativamente o desempenho ou causar uma negação de serviço.
A vulnerabilidade decorre do processo de internalização de strings do V8. Quando ocorre o parsing de JSON, strings curtas são automaticamente internalizadas em uma tabela de hash. Strings semelhantes a inteiros colidem de forma previsível porque são transformadas em hash para seus valores numéricos, permitindo que atacantes forcem cadeias de sondagem quadrática que degradam severamente o desempenho.
O gatilho mais comum é qualquer endpoint que chame em entrada controlada pelo atacante, pois o parsing de JSON internaliza automaticamente strings curtas na tabela de hash afetada.
JSON.parse()Este repositório contém uma prova de conceito demonstrando a vulnerabilidade:
# Use a versão do Node.js afetada pela CVE-2026-21717
nvm use
npm install
node poc.js
O PoC cria um payload com:
JSON.parse()JSON.parse() na entrada não confiável// Limite o tamanho do payload
app.use(express.json({ limit: '100kb' }));
// Adicione tempo limite para o parsing
const parseWithTimeout = (str, timeout = 1000) => {
return Promise.race([
Promise.resolve(JSON.parse(str)),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Parse timeout')), timeout)
)
]);
};
Este repositório é apenas para fins educacionais e de pesquisa. Não use este código para fins maliciosos ou contra sistemas que você não possui ou para os quais não tem permissão explícita para testar.