← Últimos artigos
💻 computer science

From Documentation to Zero-day Vulnerabilities: LLM-Driven Fuzzing of JavaScript Engines in PDF Readers

Este artigo apresenta o PDFuzzer, um novo fuzzer impulsionado por LLM que aproveita modelos de linguagem de grande escala para inferir relações de API e gerar sequências de chamadas complexas, aumentando significativamente a cobertura de código e descobrindo 31 vulnerabilidades zero-day em leitores de PDF convencionais em comparação com as ferramentas de estado da arte existentes.

Autores originais: Suyue Guo, Stijn Pletinckx, Tianle Yu, Yigitcan Kaya, Saad Ullah, Wenbo Guo, Christopher Kruegel, Giovanni Vigna

Publicado 2026-08-20
📖 7 min de leitura🧠 Leitura aprofundada

Autores originais: Suyue Guo, Stijn Pletinckx, Tianle Yu, Yigitcan Kaya, Saad Ullah, Wenbo Guo, Christopher Kruegel, Giovanni Vigna

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine um documento digital que faz mais do que apenas ficar parado em uma tela; ele pode pensar, calcular e reagir. Esta é a promessa do Formato de Documento Portátil, ou PDF, quando equipado com um programa de computador integrado chamado motor de JavaScript. Assim como um livro físico pode ter um compartimento oculto que só abre quando uma página específica é virada, um PDF pode conter código que é executado dentro do aplicativo de leitura, permitindo formulários interativos, verificação ortográfica e menus dinâmicos. No entanto, esse poder traz um risco. Se um hacker conseguir enganar esse motor para cometer um erro, ele pode potencialmente assumir o controle do computador que está lendo o arquivo, roubando dados ou instalando softwares maliciosos. Durante anos, pesquisadores de segurança tentaram encontrar essas armadilhas ocultas lançando variações aleatórias de documentos contra leitores de PDF, esperando ver o programa falhar. Mas esse método é frequentemente como lançar dardos no escuro; ele perde as sequências complexas e específicas de ações necessárias para acionar as falhas mais perigosas.

Uma equipe de pesquisadores da Universidade da Califórnia, Santa Bárbara, desenvolveu uma nova abordagem para este problema, passando do adivinhamento cego para o raciocínio inteligente. Eles criaram uma ferramenta chamada PDFuzzer, que atua menos como um lançador de dardos e mais como um estudante que estudou minuciosamente o manual de instruções antes de tentar uma tarefa. Em vez de depender de comandos simples e isolados, este sistema aprende como diferentes partes da linguagem de programação do motor de PDF dependem umas das outras. Ele entende que, para realizar uma ação específica, um usuário pode precisar configurar uma condição primeiro, ou que dois comandos diferentes devem usar exatamente o mesmo nome para trabalharem juntos. Ao ensinar um computador a ler e entender a complexa documentação escrita desses motores de software, os pesquisadores foram capazes de gerar casos de teste altamente sofisticados que ferramentas anteriores simplesmente não podiam conceber.

O cerne deste novo método reside em como ele lida com as "regras" do software. No passado, ferramentas de teste automatizado frequentemente enfrentavam dificuldades porque entendiam apenas conexões básicas, como um comando entregando um resultado ao próximo como um bastão em uma corrida de revezamento. Elas perdiam relações mais sutis, como quando dois comandos devem usar o mesmo valor específico para interagir corretamente, ou quando um comando define um estado oculto do qual um comando posterior depende. O PDFuzzer usa um modelo de linguagem de grande escala, um tipo de inteligência artificial treinada em vastas quantidades de texto, para ler os manuais oficiais e os rastros técnicos do software. Ele então constrói um mapa detalhado de como cada função se relaciona com todas as outras funções. Ele traduz essas descrições escritas em regras lógicas estritas, garantindo que, ao gerar um teste, os parâmetros correspondam perfeitamente. Por exemplo, se um comando exige que um nome específico seja usado, o sistema garante que o mesmo nome seja usado no comando subsequente que precisa dele, em vez de adivinhar aleatoriamente.

Para testar sua criação, os pesquisadores aplicaram o PDFuzzer a três dos leitores de PDF mais populares usados em todo o mundo: Adobe Acrobat Reader, Foxit PDF Reader e PDF-XChange Editor. Eles rodaram sua ferramenta por semanas, comparando seu desempenho com os melhores métodos existentes usados por especialistas em segurança hoje. Os resultados foram impressionantes. Enquanto as ferramentas mais antigas consegravam explorar apenas uma fração da lógica interna do software, o PDFuzzer alcançou significativamente mais fundo, cobrindo até 48 por cento a mais do código. Mais importante, essa exploração mais profunda levou à descoberta de 31 vulnerabilidades de segurança anteriormente desconhecidas, conhecidas como vulnerabilidades de dia zero (zero-day). Estas não eram falhas menores; muitas eram problemas sérios que poderiam permitir que um invasor executasse código arbitrário, essencialmente assumindo o controle total do computador de uma vítima, ou que vazasse informações sensíveis. Em contraste, as outras ferramentas juntas encontraram, no máximo, seis dessas vulnerabilidades durante o mesmo período.

Os pesquisadores não pararam apenas em encontrar os bugs; eles trabalharam diretamente com os fabricantes de software para corrigi-los. Através de um processo coordenado, eles divulgaram os detalhes das 31 vulnerabilidades às empresas responsáveis pelos leitores de PDF. A indústria respondeu rapidamente, com 26 dos problemas confirmados e corrigidos, e dez recebendo identificadores de segurança oficiais para alertar os usuários. Os pesquisadores também receberam recompensas financeiras, conhecidas como bug bounties, totalizando US$ 2.450 pelo seu trabalho. Este resultado destaca o valor prático de sua abordagem: ao automatizar a tarefa difícil de compreender as complexas relações de software, eles foram capazes de encontrar e corrigir perigos que especialistas humanos e ferramentas automatizadas mais antigas haviam perdido.

Uma parte fundamental do sucesso foi como a ferramenta lidou com a vasta quantidade de informações nos manuais do software. A documentação desses motores pode ter centenas de páginas, repletas de detalhes técnicos que são difíceis de serem processados automaticamente por um computador. Os pesquisadores descobriram que simplesmente pedir a uma inteligência artificial para gerar casos de teste do zero era lento e frequentemente produzia algo sem sentido. Em vez disso, eles usaram a IA para atuar como um tradutor, convertendo a linguagem natural dos manuais em regras precisas e legíveis por máquina. Eles dividiram o processo em etapas: primeiro, extraindo a estrutura básica dos comandos; segundo, inferindo os detalhes ocultos para comandos que não estavam totalmente documentados; e terceiro, usando um resolvedor matemático para garantir que os casos de teste gerados satisfizessem todas as restrições lógicas. Esta abordagem híbrida, combinando o poder de raciocínio de uma inteligência artificial com a precisão da lógica matemática, provou ser muito mais eficiente e eficaz do que depender apenas da IA.

O estudo também revelou que as vulnerabilidades mais perigosas frequentemente exigiam uma sequência específica de eventos que as ferramentas anteriores não conseguiam replicar. Por exemplo, uma falha envolvia uma situação onde um elemento da interface do usuário era criado e depois imediatamente deletado, mas um comando posterior tentava usá-lo novamente. Para acionar isso, o caso de teste precisava criar o elemento, usá-lo, deletá-lo e então tentar acessá-lo novamente, tudo isso garantindo que os nomes e valores usados em cada etapa fossem idênticos. Ferramentas mais antigas, que tratavam cada comando como um evento isolado, não conseguiam gerar essa sequência específica de eventos. O PDFuzzer, ao compreender a relação entre os comandos, pôde construir a sequência exata necessária para expor a falha. Essa capacidade de modelar dependências complexas foi o fator decisivo para encontrar a maioria das novas vulnerabilidades.

Além do sucesso imediato com leitores de PDF, os pesquisadores sugerem que seu método poderia ser aplicado a outras áreas da segurança de software onde exista documentação detalhada. Eles testaram seu pipeline na linguagem de programação usada para macros do Microsoft Word, um ambiente diferente, mas similarmente complexo, e descobriram que os mesmos tipos de relações e dependências existiam lá também. Isso indica que o desafio de compreender como os componentes de software interagem não é exclusivo dos leitores de PDF, mas sim um problema generalizado na computação moderna. A capacidade de transformar automaticamente manuais escritos em regras de teste rigorosas oferece um novo caminho para proteger o software que alimenta nossas vidas diárias.

No fim, o trabalho demonstra que o futuro da segurança de software pode residir em ensinar computadores a ler e entender as instruções que escrevemos para eles. Ao unir a lacuna entre a documentação escrita por humanos e os testes gerados por máquinas, os pesquisadores mostraram que podemos encontrar e corrigir falhas perigosas de forma mais rápida e completa do que antes. As 31 vulnerabilidades que eles descobriram servem como um lembrete de quanta complexidade permanece oculta no software que usamos todos os dias, e o quanto podemos estar mais seguros quando temos ferramentas inteligentes o suficiente para encontrar as rachaduras antes que os agentes mal-intencionados o façam. O processo não foi sobre magia ou sorte, mas sobre construir um sistema que pudesse pensar através da lógica do software, garantindo que cada caso de teste fosse uma tentativa significativa de quebrar o sistema, em vez de um palpite aleatório.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →