Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
slirp_snapshots_stateful — PoC pour l'article de blog « Snapshotting our way to CVE-2026-9539 » | Kitploit
Outils/GitHubGitHub/quarkslab/slirp_snapshots_stateful
Analyse Dynamique (Sandboxing)Analyse des VulnérabilitésFuzzingSécurité RéseauAnalyse de BinairesArticles et Recherche
GitHubquarkslab/slirp_snapshots_stateful

slirp_snapshots_stateful

PoC pour l'article de blog « Snapshotting our way to CVE-2026-9539 »

Voir le dépôt
21il y a 9 joursPas encore vérifié
Site web

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

slirp_snapshots_stateful

Installation et exécution

étape 0 : installer les dépendances

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

Installez une toolchain Rust.

étape 1 : cloner libafl

clonez libafl à côté du répertoire du fuzzer et positionnez-vous sur le bon commit

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

étape 2 : appliquer les patches à 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

étape 3 : cloner libslirp

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

étape 4 : appliquer les patches à 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

étape 5 : compiler la cible

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

étape 6 : trouver l'offset de l'instruction ret du checksum

Soit ouvrez le binaire dans IDA/Binja/ghidra pour trouver l'offset de l'instruction ret de la fonction cksum, soit

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

soustrayez le premier offset trouvé au second et remplacez la valeur dans fuzzer/src/libslirp/hooks.rs:200

étape 7 : compiler le fuzzer

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

Remarque : selon votre installation de llvm, vous devrez peut-être spécifier la variable d'environnement LLVM_CONFIG_PATH.

étape 8 : exécuter le fuzzer

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

Exécution avec ASAN et couverture

avertissement : cela ne fonctionne pas dans des dossiers partagés avec une VM ou des montages réseau.

Effectuez l'étape 6 pour modifier l'offset dans offline_reproducer/runner/src/libslirp/hooks.rs:17. Compilez ensuite le runner et le 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

Dans un terminal, exécutez le driver, puis dans un autre, exécutez le fuzzer.

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

Couverture

Les fichiers de couverture seront stockés dans le dossier coverage ; ils peuvent être ouverts avec bncov (binja)/lighthouse (ida/binja)/lightkeeper (ghidra). Si nécessaire, la fusion peut être effectuée avec drcov-merge.

Bugs connus

  • Qemu meurt lorsqu'un bug est trouvé et cela tue le fuzzer (limitation de libafl).
  • Le reproducteur hors ligne n'envoie pas les crashes dans le dossier crashes.
Télécharger l’outil