This thesis presents a novel method for fuzzing Jenkins, an open-source automation server, by ghosting the network, that is, stubbing out its network interface so that HTTP requests interact directly with Jenkins's core logic. Ordinarily, fuzzers struggle with network-based applications, because sending requests over the network complicates coverage tracking. Our approach solves this by mapping requests from a headless browser (HtmlUnit) straight into Jenkins's internals, eliminating cumbersome network instrumentation and allowing coverage-guided fuzzers like Jazzer to operate effectively. A key innovation is repurposing Jenkins's existing unit tests as fuzz harnesses. Instead of crafting specialized harnesses for each feature, we make minimal tweaks, just a few lines of code, to existing tests, enabling the fuzzer to explore critical functionalities with significantly less effort. Validated during our tests for the AIxCC competition, this method proved to be both time-saving and powerful in exposing deep code paths. Finally, our technique generalizes to other Java applications using Jetty and HtmlUnit, since they share underlying design patterns. Future work includes refining the tool for broader adoption and incorporating AI-driven techniques for the generation of tests to expand coverage automatically. Overall, our approach cuts down on development burdens while accelerating real-world vulnerability discovery.

Questa tesi presenta un metodo innovativo per eseguire il fuzzing su Jenkins, un server di automazione open-source, ricorrendo a una strategia di ghosting della rete, ovvero eliminando l'interfaccia di rete così che le richieste HTTP interagiscano direttamente con la logica interna di Jenkins. In genere, i fuzzer incontrano difficoltà con applicazioni che lavorano in rete, poiché l'invio delle richieste tramite protocolli di rete rende più complesso il tracciamento della copertura di codice eseguito sul server remoto. Per superare questo ostacolo, il nostro approccio instrada le richieste da un browser headless (HtmlUnit) direttamente verso le componenti interne di Jenkins, evitando la necessità di un'infrastruttura di rete ingombrante e consentendo l'uso efficace di un coverage-guided fuzzer come Jazzer. Un punto cardine della nostra proposta è il riutilizzo degli unit test di Jenkins come fuzz harness. Anziché sviluppare harness specifici per ogni funzionalità, ci limitiamo ad apportare modifiche minime, poche linee di codice, ai test esistenti, permettendo così al fuzzer di esplorare le funzionalità più critiche con un notevole risparmio di tempo. Sperimentato durante i nostri test per la competizione AIxCC, questo approccio si è rivelato efficiente e prezioso, mettendo in evidenza tracce di esecuzione solitamente difficili da ottenere. Infine, la nostra tecnica risulta facilmente estendibile anche ad altre applicazioni Java che utilizzano Jetty e HtmlUnit, grazie alle similitudini strutturali che questi programmi condividono. Tra le prospettive future, proponiamo l'ottimizzazione dello strumento per un impiego più diffuso e l'integrazione di tecniche di intelligenza artificiale per la generazione di test, in modo tale da incrementare la copertura del codice eseguito in modo automatizzato. Nel complesso, il nostro approccio riduce l'onere di sviluppo e velocizza la scoperta di vulnerabilità in contesti reali.

Ghosting the network: Fuzzing Jenkins for AIxCC through unit tests

LUKASCH, MATTEO
2024/2025

Abstract

This thesis presents a novel method for fuzzing Jenkins, an open-source automation server, by ghosting the network, that is, stubbing out its network interface so that HTTP requests interact directly with Jenkins's core logic. Ordinarily, fuzzers struggle with network-based applications, because sending requests over the network complicates coverage tracking. Our approach solves this by mapping requests from a headless browser (HtmlUnit) straight into Jenkins's internals, eliminating cumbersome network instrumentation and allowing coverage-guided fuzzers like Jazzer to operate effectively. A key innovation is repurposing Jenkins's existing unit tests as fuzz harnesses. Instead of crafting specialized harnesses for each feature, we make minimal tweaks, just a few lines of code, to existing tests, enabling the fuzzer to explore critical functionalities with significantly less effort. Validated during our tests for the AIxCC competition, this method proved to be both time-saving and powerful in exposing deep code paths. Finally, our technique generalizes to other Java applications using Jetty and HtmlUnit, since they share underlying design patterns. Future work includes refining the tool for broader adoption and incorporating AI-driven techniques for the generation of tests to expand coverage automatically. Overall, our approach cuts down on development burdens while accelerating real-world vulnerability discovery.
KRUEGEL, CHRISTOPHER
VIGNA, GIOVANNI
ING - Scuola di Ingegneria Industriale e dell'Informazione
3-apr-2025
2024/2025
Questa tesi presenta un metodo innovativo per eseguire il fuzzing su Jenkins, un server di automazione open-source, ricorrendo a una strategia di ghosting della rete, ovvero eliminando l'interfaccia di rete così che le richieste HTTP interagiscano direttamente con la logica interna di Jenkins. In genere, i fuzzer incontrano difficoltà con applicazioni che lavorano in rete, poiché l'invio delle richieste tramite protocolli di rete rende più complesso il tracciamento della copertura di codice eseguito sul server remoto. Per superare questo ostacolo, il nostro approccio instrada le richieste da un browser headless (HtmlUnit) direttamente verso le componenti interne di Jenkins, evitando la necessità di un'infrastruttura di rete ingombrante e consentendo l'uso efficace di un coverage-guided fuzzer come Jazzer. Un punto cardine della nostra proposta è il riutilizzo degli unit test di Jenkins come fuzz harness. Anziché sviluppare harness specifici per ogni funzionalità, ci limitiamo ad apportare modifiche minime, poche linee di codice, ai test esistenti, permettendo così al fuzzer di esplorare le funzionalità più critiche con un notevole risparmio di tempo. Sperimentato durante i nostri test per la competizione AIxCC, questo approccio si è rivelato efficiente e prezioso, mettendo in evidenza tracce di esecuzione solitamente difficili da ottenere. Infine, la nostra tecnica risulta facilmente estendibile anche ad altre applicazioni Java che utilizzano Jetty e HtmlUnit, grazie alle similitudini strutturali che questi programmi condividono. Tra le prospettive future, proponiamo l'ottimizzazione dello strumento per un impiego più diffuso e l'integrazione di tecniche di intelligenza artificiale per la generazione di test, in modo tale da incrementare la copertura del codice eseguito in modo automatizzato. Nel complesso, il nostro approccio riduce l'onere di sviluppo e velocizza la scoperta di vulnerabilità in contesti reali.
File allegati
File Dimensione Formato  
2025_04_Lukasch_Executive Summary.pdf

accessibile in internet per tutti a partire dal 08/03/2026

Descrizione: Executive summary della tesi
Dimensione 718.79 kB
Formato Adobe PDF
718.79 kB Adobe PDF   Visualizza/Apri
2025_04_Lukasch_Tesi.pdf

accessibile in internet per tutti a partire dal 08/03/2026

Descrizione: Testo della tesi
Dimensione 1.85 MB
Formato Adobe PDF
1.85 MB Adobe PDF   Visualizza/Apri

I documenti in POLITesi sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/10589/236223