dr_libs dr_wav.h (все версии до текущего мастера) содержит целочисленное переполнение при анализе метаданных фрагмента CUE W64. В drwav__metadata_process_chunk() оценка емкости этапа 1 усекает размер 64-битного фрагмента W64 sizeInBytes до size_t перед делением на DRWAV_CUE_POINT_BYTES; в 32-разрядных сборках это усечение приводит к неправильному вычислению предварительно выделенной дополнительной емкости метаданных. Последующее чтение в drwav__read_cue_to_metadata_obj() вычисляет фактическое количество ключевых точек и размер выделения с использованием поля cuePointCount с полной точностью, контролируемого злоумышленником, без перекрестной проверки его с оценкой емкости этапа 1, и единственным ограничением полученной области памяти (drwav__metadata_get_memory()) является DRWAV_ASSERT, который компилируется в неактивный режим при -DNDEBUG (по умолчанию для выпускных сборок).
Таким образом, созданный файл WAV W64 может вызвать переполнение буфера кучи в любом 32-битном приложении, анализирующем ненадежные метаданные WAV.
Показать оригинальное описание (EN)
dr_libs dr_wav.h (all versions through current master) contains an integer overflow in W64 CUE chunk metadata parsing. In drwav__metadata_process_chunk, a stage-1 capacity estimate truncates the 64-bit W64 chunk sizeInBytes to size_t before dividing by DRWAV_CUE_POINT_BYTES; on 32-bit builds this truncation causes the pre-allocated extra metadata capacity to be computed incorrectly.
Характеристики атаки
Последствия
Строка CVSS v3.1