Hacker News Digest

27 августа 2026 г. в 17:53 • code.ffmpeg.org • ⭐ 268 • 💬 231

OriginalHN

#division-by-zero#ffmpeg#fuzzer#sony#vpk

We found a division by zero bug in FFmpeg with a vibecoded fuzzer

В Sony PS2 VPK-демuxe vpk_read_packet происходит деление на ноль из-за отсутствия проверки количества каналов. При обработке последнего блока аудио вычисляются size и skip через деление на par->ch_layout.nb_channels, которое может быть равно нулю из-за некорректного заголовка VPK-файла. Это приводит к SIGFPE и аварийному завершению любого FFmpeg-программы, открывающей вредоносный .vpk-файл или поток. Уязвимость эксплуатируется через 21-байтовый ввод с магией VPK и нулевым полем nb_channels в заголовке, обходя валидацию в vpk_read_header из-за расхождения данных между probing и чтением пакетов в кастомном AVIO-пути фаззера. Ошибка носит детерминированный характер, требует минимальных предусловий и представляет собой надёжный отказ в обслуживании без потенциала для выполнения произвольного кода. Рекомендуется добавить проверку if (par->ch_layout.nb_channels == 0) return AVERROR_INVALIDDATA; в начале vpk_read_packet, чтобы возвращать чистую ошибку вместо генерации исключения. Для регрессионного теста предложен массив из 21 байта, соответствующий краш-входу, при котором av_read_frame должен возвращать -22 (AVERROR_INVALIDDATA) без падения.