
Проект исследования безопасности фаззинга libpng с помощью OSS-Fuzz. Включает анализ начального корпуса, пользовательские фаззеры для чтения/записи и доказательство концепции эксплуатации уязвимости CVE-2014-9495.
Групповой проект по исследованию безопасности
О фаззинге: Фаззинг — это автоматизированная техника тестирования ПО, при которой на вход программы подаются недопустимые, неожиданные или случайные данные для обнаружения ошибок и уязвимостей. Фаззинг с управлением покрытием использует обратную связь по покрытию кода для интеллектуального исследования различных путей выполнения.
Об OSS-Fuzz: OSS-Fuzz — это служба непрерывного фаззинга Google для открытого ПО. Она использует LibFuzzer и другие движки фаззинга для автоматического тестирования критически важных открытых проектов и сообщения об уязвимостях.
Этот проект демонстрирует фаззинг с управлением покрытием, анализ покрытия кода и эксплуатацию уязвимостей с использованием фреймворка Google OSS-Fuzz на библиотеке libpng.
Цель: libpng v1.6.48 (фаззинг), v1.5.20 (эксплуатация)
Подробная методология и полный отчёт: см. report.pdf
Полные инструкции: см. Instructions.md
| Метрика | С корпусом | Без корпуса | Улучшение |
|---|---|---|---|
| Покрытие строк | 41.83% | 24.76% | +17.07% |
| Покрытие ветвлений | 35.49% | 21.03% | +14.46% |
| Покрытие функций | 50.75% | 34.75% | +16.00% |

Улучшение 1 — Улучшенный фаззер чтения (submit_improve1)
pngread.c, +73 строки в pngtrans.cУлучшение 2 — Фаззер записи (submit_improve2)

Успешно эксплуатировано переполнение кучи в libpng v1.5.20:
part4/run.poc.sh├── part1/ # Анализ влияния начального корпуса
│ ├── run.w_corpus.sh # Запуск с начальным корпусом
│ ├── run.w_o_corpus.sh # Запуск без начального корпуса
│ └── report/ # Отчёты о покрытии
├── part3/ # Улучшения собственных фаззеров
│ ├── improve1/ # Улучшенный фаззер чтения
│ └── improve2/ # Новый фаззер записи
└── part4/ # Эксплуатация CVE-2014-9495
├── run.poc.sh # Запуск эксплойта
└── write_exploit.c # Код PoC
# Part 1: Fuzzing experiments (4 hours each)
cd part1
./run.w_corpus.sh # or ./run.w_o_corpus.sh
# Part 3: Test improvements (4 hours each)
cd part3/improve1 && ./run.improve1.sh
cd part3/improve2 && ./run.improve2.sh
# Part 4: Exploit CVE
cd part4 && ./run.poc.sh
Просмотр отчётов о покрытии:
firefox part1/report/w_corpus/linux/index.html
Этот проект по исследованию безопасности выполнен в соавторстве: