Skip to content

ADR-012: Risco Aceito — SheetJS (xlsx) sem patch disponível

ADR-012: Risco Aceito — SheetJS (xlsx) sem patch disponível

Section titled “ADR-012: Risco Aceito — SheetJS (xlsx) sem patch disponível”

Status: Accepted (Risco Aceito com Controles Compensatórios)
Data: 2026-05-26
Decisor: Engineering + Security
Contexto: §10 Security Sign-Off — Production Go-Live Checklist


Durante o security audit pré-go-live (pnpm audit), foram identificadas duas vulnerabilidades no pacote xlsx (SheetJS) versão 0.18.5:

CVETipoSeveridadePatched
GHSA-4r6h-8v6p-xvh6Prototype PollutionHigh❌ Sem patch npm
GHSA-2mfr-m8pp-9cxvReDoSHigh❌ Sem patch npm

O pacote xlsx no npm foi abandonado após a versão 0.18.x. A SheetJS migrou para um modelo de distribuição privado (cdn.sheetjs.com) para versões superiores, que requer licença comercial.


O xlsx é usado exclusivamente em:

  • packages/scf-core/src/importers/xlsx-importer.ts — importação do arquivo SCF spreadsheet
  • Endpoint: POST /api/v1/admin/scf/import-runs (payload source_type: "xlsx")
ControleStatus
Endpoint restrito a platform_admin + admin:write
Validação de assinatura ZIP antes do parse✅ (EICAR test + magic bytes)
Limite de tamanho de arquivo (10MB)
Execução server-side em sandbox Cloudflare Workers
Sem execução de macros ou conteúdo ativo
SCF import é operação de ingestão, não exposição de dados
  • Prototype Pollution: Requer que um atacante faça upload de um arquivo XLSX malicioso via endpoint platform_admin. Um atacante com platform_admin já tem controle total da plataforma — o vetor de ataque não agrega risco incremental significativo.
  • ReDoS: Requer upload de conteúdo especialmente crafted. Mesmo que ocorra, é limitado ao Worker da importação (isolado, sem afetar outros tenants).

Conclusão: Risco baixo dada a superfície de ataque limitada.


Aceitar o risco com os controles compensatórios existentes e as seguintes ações adicionais:

  1. Monitorar releases de xlsx no npm e atualizações de CVE
  2. Avaliar migração para exceljs (MIT, ativamente mantido, sem CVEs conhecidos) como tarefa P2
  3. Revalidar este ADR a cada 6 meses ou quando surgir novo CVE high/critical

  • Prós: MIT, mantido, sem CVEs conhecidos, API similar
  • Contras: Requer reescrita do xlsx-importer.ts (estimativa: 1-2 dias de eng), regressão do pipeline de importação SCF
  • Decisão: Diferido para P2 (pós go-live)
  • Prós: Versões recentes com patches
  • Contras: Custo de licença, mudança de distribuição, acoplamento comercial
  • Decisão: Não adotado
  • Prós: Elimina o risco
  • Contras: Remove funcionalidade crítica de importação do SCF
  • Decisão: Não viável

  • xlsx 0.18.5 permanece em produção com controles compensatórios
  • Issue criada para migração para exceljs: ver backlog post-MVP
  • pnpm audit continuará reportando estas vulnerabilidades — são conhecidas e aceitas
  • Adicionar ao docs/operations/go-live-status.md como risco documentado