Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
slirp_snapshots_stateful — PoC para o post do blog «Snapshotting our way to CVE-2026-9539» | Kitploit
Ferramentas/GitHubGitHub/quarkslab/slirp_snapshots_stateful
Análise Dinâmica (Sandboxing)Análise de VulnerabilidadesFuzzingSegurança de RedeAnálise de BináriosPapers e Pesquisa
GitHubquarkslab/slirp_snapshots_stateful

slirp_snapshots_stateful

PoC para o post do blog «Snapshotting our way to CVE-2026-9539»

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Ver RepositórioSite
23há 10 diasAinda não revisado
Compartilhar

slirp_snapshots_stateful

Instalação e execução

passo 0: instalar dependências

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

Instale uma toolchain Rust.

passo 1: clonar o libafl

clone o libafl ao lado do diretório do fuzzer e faça checkout do commit correto

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

passo 2: aplicar patches ao 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: clonar o libslirp

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

passo 4: aplicar patches ao 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: compilar o alvo

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

passo 6: encontrar o offset da instrução ret do checksum

Abra o binário no IDA/Binja/ghidra para encontrar o offset da instrução ret da função cksum ou

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

subtraia o primeiro offset encontrado do segundo e substitua o valor em fuzzer/src/libslirp/hooks.rs:200

passo 7: compilar o fuzzer

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

Nota: Dependendo da sua instalação do llvm, pode ser necessário especificar a variável de ambiente LLVM_CONFIG_PATH.

passo 8: executar o fuzzer

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

Executar com ASAN e cobertura

aviso: isto não funciona em pastas compartilhadas com uma VM ou montagens de rede.

Execute o passo 6 para alterar o offset em offline_reproducer/runner/src/libslirp/hooks.rs:17. Depois compile o runner e o 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

Em um terminal execute o driver, depois em outro execute o fuzzer.

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

Cobertura

Os arquivos de cobertura serão armazenados na pasta coverage, eles podem ser abertos com bncov (binja)/lighthouse (ida/binja)/lightkeeper (ghidra). Se necessário, a mesclagem pode ser feita com drcov-merge.

Bugs conhecidos

  • O Qemu morre quando um bug é encontrado e isso mata o fuzzer (limitação do libafl).
  • O reprodutor offline não envia os crashes para a pasta de crashes.
Baixar ferramenta