CVE-2026-25940 jsPDF PoC
Uma prova de conceito para a CVE-2026-25940 demonstrando como aparências de botões de rádio AcroForm especialmente elaboradas podem acionar JavaScript incorporado em visualizadores de PDF vulneráveis (ex.: Foxit). O repositório inclui um gerador baseado em Node e um harness de visualizador em navegador para exercitar diferentes caminhos de análise.
⚠️ Use apenas em ambientes isolados, fora de produção. Os payloads de exemplo executam JavaScript intencionalmente e podem invocar requisições de rede ou programas externos. Não abra o PDF gerado com visualizadores não confiáveis em uma máquina que você valoriza.
Conteúdo do Repositório
- poc.js: Gera um PDF malicioso com múltiplas opções de botões de rádio e streams de aparência distintos para exibir diferentes comportamentos.
- viewer.html: Harness mínimo de visualizador para gerar o PoC no navegador ou carregar uma amostra existente, e renderizá-lo tanto nativamente (iframe) quanto via PDF.js.
- package.json: Declara a dependência jsPDF para o PoC em Node.
Pré-requisitos
Configuração
- Instale as dependências:
npm install
- (Opcional) Sirva o visualizador localmente para um carregamento mais limpo do HTML/JS:
npx http-server .
# depois abra http://localhost:8080/viewer.html
Gerar PDF do PoC via Node
- Execute o gerador:
node poc.js
- O script grava
test.pdf na raiz do projeto. Abra-o com o visualizador de PDF de destino para observar o comportamento. Mantenha a rede bloqueada se quiser evitar requisições de saída.
Fluxo de Trabalho do Visualizador Baseado em Navegador
- Abra viewer.html diretamente em um navegador ou via um servidor local.
- Clique em Gerar PDF do PoC para construir o documento malicioso no navegador e carregá-lo tanto no iframe (manipulador nativo/navegador) quanto no canvas do PDF.js.
- Alternativamente, escolha Carregar arquivo e selecione um PDF que você gerou com o script Node.
- Observe a atividade do console/rede para evidências de execução de JavaScript; alguns visualizadores podem suprimir alertas enquanto ainda executam ações incorporadas.
Notas
- Os payloads são ajustados para o comportamento do Foxit; outros visualizadores podem mitigá-los ou bloqueá-los parcialmente.
- Se você adaptar o payload, mantenha tamanhos semelhantes para evitar alterar offsets de objetos dos quais algumas cadeias de exploração dependem.
- Sempre teste em uma VM ou sandbox com egresso de rede restrito.