A função `matchFileSnapshot` em `src/ assertions/snapshots.ts` aceitou um parâmetro `filePath` com validação zero. Quando o modo de atualização de instantâneos estava ativo (`UPDATE_SNAPSHOTS= 1 ` ou `setUpdateMode('all')`), um atacante que controla a entrada de teste pode escrever conteúdo arbitrário em qualquer caminho do sistema de arquivos a que o processo tenha acesso de gravação, incluindo a criação de diretórios intermédios. **Arquivo:** `src/assertions/snapshots.ts`, linhas 732 - 769. ``` tiposcript export function matchFileSnapshot(actual: desconhecido, filePath: string): vazio { const serializated = serialize( real); const mode = resolveUpdateMode(); const fileExists = fs.existsSync(filePath); if (!fileExists) { if (modo === 'all' (') Mode === 'novo') { const dir = path.dirname(filePath); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursivo: true }); } fs.writeFileSync(filePath, seriadizado, 'utf- 8 '); ```.

O `filePath` flui de `expect( value).toMatchFileSnapshot(filePath)` em `index.ts: 1033 - 1035 ` sem desinfectação, sem verificação de que o caminho está dentro de uma pasta esperada, e sem resolução de links simbólicos. ``` Importação de texto { espera, setUpdateMode } a partir de '@ asimétrico- esforço/ nogginlessdom'; configurar o modo Update('all'). // Escreve conteúdo arbitrário para qualquer caminho escrevible expectative('conteúdo malicioso').toMatchFileSnapshot('/ tmp/exploit/payload.txt');.

// Percurso transversal através de componentes relativos espera( 'dados'). paraMatchFileSnapshot( '../../..// tmp/ evil.txt'); // Em ambientes CI, pode sobrescrever a configuração do CI expect('injected step').toMatchFileSnapshot('/home/runner/.github/workflows/backdoor.yml'); ``` Nos ambientes CI/ CD onde os arquivos de teste podem vir de pedidos de puxação não confiados, isto permite escrever para qualquer localização do sistema de arquivos gravable com criação de diretório. Um atacante pode sobrescrever arquivos de configuração, injetar código em artefatos de construção ou modificar definições de pipeline CI.

Corrigido em commit effort/ NogginLessDom/ commit/ 785 e 6 ac 6 e 124 d 1 a 89 b 3 ccf 40 bbd 75 fc 8 e 4 cb 215 d no `main '. A função `matchFileSnapshot` agora valida que o caminho do arquivo resolvido está dentro do diretório raiz do projeto (por omissão para `process.cwd()`, configurable através do parâmetro `projectRoot` opcional). Os caminhos que se resolvem fora do diretório do projeto são rejeitados com um erro descritivo. ``` tiposcript export function matchFileSnapshot( real: desconhecido, filePath: string, projectRoot?: string, ): vade { const root = projectRoot?? process.cwd(); const resoluted = path.resolve( root, filePath); se (!resolved.startsWith( root + path.sep) && resolved! == root) { lance novo erro( `Archive snapshot path deve estar dentro do diretório do projeto: ${filePath}`, ); } //... todos os arquivos subsequentes I/O usam `resolved` em vez de `filePath` } ```` Registro de aconselhamento: GHSA- 322 x- v 876 - g 883. Não há nenhum identificador adicional listado.

Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 02 T 20: 19: 20.000 Z e lista a sua última modificação como 2026 - 07 - 02 T 20: 19: 20.000 Z. Severidade: ALTAMENTE. Dados de pontuação publicados: CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/África do Sul:N.

Software afetado e informações de versão: pacote npm @esforço assimétrico/nogginlessdom — ECOSISTEM: introduzido 0, corrigido 0.0.22. Classificação e evidência: identificadores de fraqueza CWE- 22. O registro contém 3 suporte de referências nestes tipos: WEB, PACKAGE.