Skip to content

NGRsoftlab/java_fuzz_workshop

This branch is up to date with lenix123/java_fuzz_workshop:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8a30d6d · Feb 22, 2025

History

4 Commits
Feb 21, 2025
Feb 22, 2025
Feb 22, 2025
Feb 22, 2025

Repository files navigation

Fuzzing pdfbox

Подготовка окружения

Собираем docker образ:

git clone https://github.com/lenix123/java_fuzz_workshop.git && cd java_fuzz_workshop
docker build --tag=pdfbox_workshop_img .

Запускаем контейнер:

docker run -it -v "$(pwd)/artifacts:/home/fuzz/artifacts:ro" --name=pdfbox_fuzz pdfbox_workshop_img

Применяем патч:

cd /home/fuzz/pdfbox
git apply ../artifacts/pdfbox.patch

Подготовка корпуса

Подготавливаем входной корпус:

mkdir pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/PDFStreamParserTestInputs
cp /home/fuzz/artifacts/corpus/* pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/PDFStreamParserTestInputs

Собираем тесты и запускаем фаззинг FuzzTestPDFParser:

mvn clean install -DskipTests
cd /home/fuzz/pdfbox/pdfbox
JAZZER_FUZZ=1 mvn test -Dtest=PDFStreamParserTest#FuzzTestPDFParser

Наработанный корпус хранится в /home/fuzz/pdfbox/pdfbox/.cifuzz-corpus/

Фаззинг java кода с помощью jazzer

Cобираем обёртку для pdfbox:

cd /home/fuzz/pdfbox
mkdir fuzz && cd fuzz
cp -r /home/fuzz/artifacts/* .
javac -cp ../pdfbox/target/classes/ ./PDFStreamParserFuzzer.java

Запускаем фаззинг PDF парсера:

jazzer --cp=.:../pdfbox/target/classes/:../io/target/classes/:/home/fuzz/log4j/log4j-api-2.24.3.jar:/home/fuzz/log4j/commons-logging-1.2/commons-logging-1.2.jar --target_class=PDFStreamParserFuzzer -dict=pdf.dict -close_fd_mask=3 -- corpus

Сбор покрытия

Прогоняем наработанный корпус:

cd /home/fuzz/pdfbox/fuzz
jazzer --cp=.:../pdfbox/target/classes/:../io/target/classes/:/home/fuzz/log4j/log4j-api-2.24.3.jar::/home/fuzz/log4j/commons-logging-1.2/commons-logging-1.2.jar --target_class=PDFStreamParserFuzzer -close_fd_mask=3 --coverage_dump=coverage.exec -runs=1 -- corpus

Генерируем html отчёт с помощью jacococli:

java -jar /home/fuzz/jacoco/lib/jacococli.jar report coverage.exec --classfiles ../pdfbox/target/pdfbox-3.0.4.jar --html report --sourcefiles ../pdfbox/src/main/java/

Копируем папку с html отчётом на хост:

docker cp pdfbox_fuzz:/home/fuzz/pdfbox/fuzz/report .

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dockerfile 83.4%
  • Java 16.6%