### Expansão de brace-expansão de resumo exibe tempo exponencial - O( 2 n) - comportamento no número de grupos consecutivos {} não expansivos. Uma entrada curta, de todas as-ASCII (~ 90 bytes/ 30 grupos) bloqueia o thread de chamada por minutos; uma entrada ligeiramente mais longa o pendura efetivamente indefinidamente. Como os consumidores dominantes funcionam no loop de eventos de uma única face, uma pequena entrada pode bloquear completamente um processo/operário. Em `expand_`, `post` é calculado incondicionalmente no topo da função, antes que os ramos de retorno inicial que não o usam: ```js const post = m.post.longueza? expand_(m.post, max, false): ['']; // sempre recure... se (!isSequencia & & &!isOptions) { se (m.post.match(/,?)).*\}/)) { str = m.pre + '{' + m. corpo + escFecha + m.post; devolve expand_(str, max, true); // reiniciar — `post` descartado } devolver [str]; } ```.

Para entrada como a{}, {},..., o primeiro {} não está expandindo, então o controle chega ao ramo {a}, b} de reescrita - mas o ` expand_ ' já recorreu ao post sobre toda a cauda restante, apenas para jogar o resultado fora. Cada nível, portanto, gera duas expansãos recursivas sobre essencialmente o mesmo trabalho restante: ` T(n) = 2 · T( n− 1 ) intervenção O( 2 ⁿ)`. A opção máx. não atenua isso: max limita apenas os loops de construção de saída; nem a recursão de posts nem a reescrita consultam- a.

Grupos (n) bytes de entrada tempo-------------------- 20 | 60 | 130 Ms-. 24 | 72 | 1.9 s 26 | 78 | 7.8 s 30 (PoC) 90 | ~ 2 minї ### Prova do conceito ```js const { expand } = require('brace- expansion'); // 30 grupos não- expansíveis, ~ 90 bytes — blocos por minutos: expand('a{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {} '); ```.

Qualquer aplicativo que passe por cordas influenciadas pelo atacante para o brace- expansion.expand() - diretamente ou transitivamente através de padrões de bracelete de minimatch/glob - pode ser levado para uma CPU de vários minutos para indefinido pendurada por um pequeno pedido, negando o serviço nesse thread/ processo. Atualizar para uma versão corregida. A correção: 1. Difere o post de computação até depois dos ramos de retorno inicial (e o calcula localmente no ramo $- sufixo), então o post só é expandido quando um conjunto de bracete realmente se expande e o valor é usado. Só isso remove o exponencial. 1. Converte o {a}, b} reescrever de recursão para um loop em- função, para que uma longa série de reescreveres não possa aumentar a pilha de chamadas.

Verificado: o PoC cai de ~ 2 min para 0.55 ms, 5,000 grupos completados em ~ 344 ms, e a saída é idêntica à 5.0.6 em uma suite de equivalência comportamental (seqüências, revestimento, prefixo de $, a{}, b} c, {}, a} b, x{{a, b} y, etc.). A complexidade pós-fixa é ~O(n2) nesta classe de entrada - aceitável para a correção de segurança; uma reescrita linear pode ser um acompanhamento não urgente. Se não for possível atualizar imediatamente, evite passar entrada não confiável para expandir() / glob padrões de brace ou executar tal expansão sob um tempo de saída/trabalho.

Registro de aconselhamento: GHSA- 3 jxr- 9 vmj- r 5 cp. Identificadores relacionados: CVE- 2026 - 13149. Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 20 T 20: 51: 09.000 Z e lista a sua última modificação como 2026 - 07 - 20 T 20: 51: 10.000 Z.

Severidade: ALTAMENTE. 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; CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/África do Sul:N/E:P/S:N/AU:Y/R:U/V:D/RE:M/U:Ámbar. Software afetado e informações de versão: expansão de brace-package npm — ECOSISTEM: introduzido 3.0.0, corrigido 5.0.7. npm pacote de expansão de brace — ECOSISTEM: introduzido 0, corrigido 1.1.16. npm pacote de expansão de brace — ECOSISTEM: introduzido 2.0.0, corrigido 2.1.2.

Classificação e evidência: identificadores de fraqueza CWE- 400, CWE- 407. O registro contém 12 suporte de referências nestes tipos: WEB, AVISO, EMBALAGAMENTO.