Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
slirp_snapshots_stateful — PoC per il post del blog «Snapshotting our way to CVE-2026-9539» | Kitploit
Strumenti/GitHubGitHub/quarkslab/slirp_snapshots_stateful
Analisi Dinamica (Sandboxing)Analisi delle VulnerabilitàFuzzingSicurezza di ReteAnalisi di BinariPaper e Ricerca
GitHubquarkslab/slirp_snapshots_stateful

slirp_snapshots_stateful

PoC per il post del blog «Snapshotting our way to CVE-2026-9539»

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Vedi RepositorySito web
239 giorni faNon ancora revisionato
Condividi

slirp_snapshots_stateful

Installazione ed esecuzione

passo 0: installare le dipendenze

sudo apt install meson ninja-build valgrind clang-20 binutils libglib-2.0-dev cmake python3-venv

Installare un toolchain Rust.

passo 1: clonare libafl

clonare libafl accanto alla directory del fuzzer ed effettuare il checkout del commit corretto

git clone https://github.com/AFLplusplus/LibAFL.git libafl/
cd libafl
git checkout 6e7ea0da898b63c5098f84c0908a8c427a5c73ff

passo 2: applicare le patch a libafl

git apply ../patches/libafl/module_snapshot.patch
git apply ../patches/libafl/snapshot.patch
git apply ../patches/libafl/libafl_bolts_wide.patch
git apply ../patches/libafl/libafl_targets_simd.patch

passo 3: clonare libslirp

cd ..
git clone https://gitlab.freedesktop.org/slirp/libslirp.git
cd libslirp
git checkout 4ddbcd5cc4f7a14473ebfc1dcdd1afb4edf96908

passo 4: applicare le patch a libslirp

git apply ../patches/libslirp/meson_fuzzing.patch
git apply ../patches/libslirp/meson_options.patch
git apply ../patches/libslirp/meson.patch
git apply ../patches/libslirp/qemu_target.patch
git apply ../patches/libslirp/tcp_input.patch
git apply ../patches/libslirp/tcp_outpt.patch

passo 5: compilare il target

CC=clang-20 CXX=clang++-20 meson build
ninja -C build

passo 6: trovare l'offset dell'istruzione ret del checksum

Aprire il binario in IDA/Binja/ghidra per trovare l'offset dell'istruzione ret della funzione cksum oppure

nm -n build/fuzzing/qemu-target | grep cksum
objdump -d --disassemble=cksum build/fuzzing/qemu-target | grep -E '\bret[qwl]?\b'

sottrarre il primo offset trovato al secondo e sostituire il valore in fuzzer/src/libslirp/hooks.rs:200

passo 7: compilare il fuzzer

cd ../fuzzer
cargo +nightly build --release

Nota: a seconda dell'installazione di llvm potrebbe essere necessario specificare la variabile d'ambiente LLVM_CONFIG_PATH.

passo 8: eseguire il fuzzer

cp ../libslirp/build/fuzzing/qemu-target ./target/release/
cd target/release
mkdir corpus
RUST_LOG=warn ./slirp-snapshots-stateful-fuzzer

Esecuzione con ASAN e coverage

attenzione: questo non funziona in cartelle condivise con una VM o mount di rete.

Eseguire il passo 6 per modificare l'offset in offline_reproducer/runner/src/libslirp/hooks.rs:17. Poi compilare il runner e il driver

cd runner
cargo +nightly-2026-06-11 build --release
cp target/release/offline_runner ../../fuzzer/target/release
cp target/release/x86_64-unknown-linux-gnu/release/libafl_qemu_asan_host.so ../../fuzzer/target/release
cd ../driver
cargo +nightly build --release
cp target/release/offline_driver ../../fuzzer/target/release
cd ../../fuzzer/target/release
mkdir corpus coverage repro_files

In un terminale eseguire il driver, poi in un altro eseguire il fuzzer.

RUST_LOG=warn ./offline_driver
RUST_LOG=warn ./slirp-snapshots-stateful-fuzzer

Coverage

I file di coverage verranno salvati nella cartella coverage, possono essere aperti con bncov (binja)/lighthouse (ida/binja)/lightkeeper (ghidra). Se necessario, il merge può essere effettuato con drcov-merge.

Bug noti

  • Qemu termina quando viene trovato un bug e ciò uccide il fuzzer (limitazione di libafl).
  • Il reproducer offline non invia i crash nella cartella crashes.
Scarica lo strumento