← Nieuwste papers
💻 computer science

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

Dit artikel introduceert PDFuzzer, een nieuwe door LLM gedreven fuzzer die gebruikmaakt van grote taalmodellen om API-relaties af te leiden en complexe aanroepsequenties te genereren, waardoor de codecoverage aanzienlijk wordt verbeterd en 31 zero-day kwetsbaarheden in mainstream PDF-readers worden ontdekt vergeleken met bestaande state-of-the-art tools.

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

Gepubliceerd 2026-08-20
📖 7 min leestijd🧠 Diepgaand

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

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Stel je een digitaal document voor dat meer doet dan alleen op een scherm staan; het kan denken, berekenen en reageren. Dit is de belofte van het Portable Document Format, of PDF, wanneer het is uitgerust met een ingebouwde computerprogramma genaamd een JavaScript-engine. Net zoals een fysiek boek een verborgen compartiment kan hebben dat pas opent wanneer een specifieke pagina wordt omgeslagen, kan een PDF code bevatten die binnen de lezerapplicatie draait, wat zorgt voor interactieve formulieren, spellingcontrole en dynamische menu's. Deze kracht brengt echter een risico met zich mee. Als een hacker de engine kan misleiden om een fout te maken, kan hij potentieel de controle over de computer die het bestand leest overnemen, gegevens stelen of kwaadaardige software installeren. Jarenlang hebben beveiligingsonderzoekers geprobeerd deze verborgen vallen te vinden door willekeurige variaties van documenten naar PDF-lezers te werpen, in de hoop dat het programma vastloopt. Maar deze methode is vaak als het gooien met pijltjes in het donker; het mist de complexe, specifieke sequenties van acties die nodig zijn om de meest gevaarlijke gebreken te triggeren.

Een team van onderzoekers aan de Universiteit van Californië, Santa Barbara, heeft een nieuwe aanpak voor dit probleem ontwikkeld, waarbij ze de stap maken van blind gokken naar intelligente redenering. Ze creëerden een hulpmiddel genaamd PDFuzzer, dat minder lijkt op een pijltjeswerper en meer op een student die de instructiehandleiding grondig heeft bestudeerd voordat hij aan een taak begint. In plaats van te vertrouwen op eenvoudige, geïsoleerde commando's, leert dit systeem hoe verschillende onderdelen van de programmeertaal van de PDF-engine van elkaar afhankelijk zijn. Het begrijpt dat om een specifieke actie uit te voeren, een gebruiker eerst een bepaalde conditie moet instellen, of dat twee verschillende commando's exact dezelfde naam moeten gebruiken om samen te werken. Door een computer te leren de complexe, geschreven documentatie van deze software-engines te lezen en te begrijpen, waren de onderzoekers in staat om zeer geavanceerde testgevallen te genereren die voorheen ondenkbaar waren voor andere tools.

De kern van deze nieuwe methode ligt in de manier waarop het de "regels" van de software afhandelt. In het verleden hadden geautomatiseerde testtools vaak moeite omdat ze alleen basisverbindingen begrepen, zoals wanneer één commando een resultaat aan het volgende doorgeeft als een estafettestokje. Ze misten subtielere relaties, zoals wanneer twee commando's dezelfde specifieke waarde moeten gebruiken om correct met elkaar te interageren, of wanneer een commando een verborgen status instelt waar een later commando op vertrouwt. PDFuzzer gebruikt een large language model, een type kunstmatige intelligentie dat is getraind op enorme hoeveelheden tekst, om de officiële handleidingen en technische sporen van de software te lezen. Het construeert vervolgens een gedetailleerde kaart van hoe elke functie met elke andere functie samenhangt. Het vertaalt deze geschreven beschrijvingen naar strikte logische regels, waardoor het gegarandeerd wordt dat de parameters bij het genereren van een test perfect overeenkomen. Als een commando bijvoorbeeld vereist dat er een specifieke naam wordt gebruikt, zorgt het systeem ervoor dat diezelfde naam wordt gebruikt in het daaropvolgende commando dat deze nodig heeft, in plaats van willekeurig te gokken.

Om hun creatie te testen, pasten de onderzoekers PDFuzzer toe op drie van de meest populaire PDF-lezers die wereldwijd worden gebruikt: Adobe Acrobat Reader, Foxit PDF Reader en PDF-XChange Editor. Ze lieten hun tool wekenlang draaien en vergeleken de prestaties met de beste bestaande methoden die vandaag de dag door beveiligingsexperts worden gebruikt. De resultaten waren opmerkelijk. Terwijl de oudere tools slechts een fractie van de interne logica van de software verkenden, bereikte PDFuzzer aanzienlijk dieper, met een dekking die tot 48 procent hoger lag. Belangrijker nog, deze diepere exploratie leidde tot de ontdekking van 31 voorheen onbekende beveiligingslekken, ook wel zero-day kwetsbaarheden genoemd. Dit waren geen kleine foutjes; velen waren ernstige problemen die een aanvaller in staat zouden stellen om willekeurige code uit te voeren, wat in feite neerkomt op het overnemen van de volledige controle over de computer van een slachtoffer, of om gevoelige informatie te lekken. In tegenstelling hiertoe vonden de andere tools tijdens dezelfde periode samen maximaal zes dergelijke kwetsbaarheden.

De onderzoekers stopten niet bij het vinden van de bugs; ze werkten rechtstreeks samen met de softwarefabrikanten om ze te repareren. Via een gecoördineerd proces deelden zij de details van de 31 kwetsbaarheden met de bedrijven die verantwoordelijk zijn voor de PDF-lezers. De sector reageerde snel, waarbij 26 van de problemen werden bevestigd en gepatcht, en tien officiële beveiligingsidentificatoren ontvingen om gebruikers te waarschuwen. De onderzoekers ontvingen ook financiële beloningen, bekend als bug bounties, ter waarde van in totaal $2.450 voor hun werk. Deze uitkomst onderstreept de praktische waarde van hun aanpak: door de moeilijke taak van het begrijpen van complexe softwarerelaties te automatiseren, waren zij in staat om gevaren te vinden en te herstellen die menselijke experts en oudere geautomatiseerde tools hadden gemist.

Een cruciaal onderdeel van het succes was hoe het hulpmiddel omging met de enorme hoeveelheid informatie in de softwarehandleidingen. De documentatie voor deze engines kan honderden pagina's lang zijn, vol technische details die moeilijk automatisch door een computer te verwerken zijn. De onderzoekers ontdekten dat het simpelweg vragen aan een kunstmatige intelligentie om vanuit het niets testgevallen te genereren traag was en vaak onzin produceerde. In plaats daarvan gebruikten ze de AI als een vertaler om de natuurlijke taal van de handleidingen om te zetten in precieze, machineleesbare regels. Ze braken het proces op in stappen: eerst het extraheren van de basisstructuur van de commando's; ten tweede het afleiden van de verborgen details voor commando's die niet volledig gedocumenteerd waren; en ten derde het gebruik van een wiskundige solver om te garanderen dat de gegenereerde testgevallen aan alle logische beperkingen voldeden. Deze hybride aanpak, die het redeneervermogen van kunstmatige intelligentie combineert met de precisie van wiskundige logica, bleek veel efficiënter en effectiever dan het vertrouwen op de AI alleen.

De studie onthulde ook dat de gevaarlijkste kwetsbaarheden vaak een specifieke sequentie van gebeurtenissen vereisten die eerdere tools niet konden repliceren. Zo betrof één fout een situatie waarin een gebruikersinterface-element werd aangemaakt en vervolgens onmiddellijk werd verwijderd, maar een later commando probeerde het opnieuw te gebruiken. Om dit te triggeren, moest het testgeval het element creëren, het gebruiken, het verwijderen en vervolgens proberen er opnieuw toegang toe te krijgen, terwijl er tegelijkertijd werd gewaarborgd dat de namen en waarden die in elke stap werden gebruikt identiek waren. Oudere tools, die elk commando als een geïsoleerde gebeurtenis behandelden, konden deze specifieke keten van gebeurtenissen niet genereren. PDFuzzer, door de relatie tussen de commando's te begrijpen, kon de exacte sequentie construeren die nodig was om het gebrek bloot te leggen. Dit vermogen om complexe afhankelijkheden te modelleren was de beslissende factor bij het vinden van de meerderheid van de nieuwe kwetsbaarheden.

Naast het directe succes met PDF-lezers suggereren de onderzoekers dat hun methode kan worden toegepast op andere gebieden van softwarebeveiliging waar gedetailleerde documentatie aanwezig is. Ze testten hun pipeline op de programmeertaal die wordt gebruikt voor Microsoft Word-macro's, een andere maar vergelijkbaar complexe omgeving, en vonden dat daar ook dezelfde soorten relaties en afhankelijkheden bestonden. Dit geeft aan dat de uitdaging van het begrijpen van hoe softwarecomponenten met elkaar interageren niet uniek is voor PDF-lezers, maar een wijdverbreid probleem is in de moderne computing. Het vermogen om geschreven handleidingen automatisch om te zetten in rigoureuze testregels biedt een nieuwe weg voorwaarts voor het beveiligen van de software die ons dagelijks leven aandrijft.

Uiteindelijk toont het werk aan dat de toekomst van softwarebeveiliging kan liggen in het leren van computers om de instructies te lezen en te begrijpen die wij voor hen schrijven. Door de kloof tussen menselijke documentatie en machinegegenereerde testen te overbruggen, hebben de onderzoekers laten zien dat we gevaarlijke gebreken sneller en grondiger kunnen vinden en herstellen dan voorheen. De 31 kwetsbaarheden die zij blootlegden, dienen als een herinnering aan hoeveel complexiteit er verborgen blijft in de software die we dagelijks gebruiken, en hoeveel veiliger we kunnen zijn wanneer we tools hebben die slim genoeg zijn om de barsten te vinden voordat de kwaadwillenden dat doen. Het proces ging niet over magie of geluk, maar over het bouwen van een systeem dat de logica van de software kon doordenken, waardoor elke testcase een betekenisvolle poging werd om het systeem te breken, in plaats van een willekeurige gok.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →