Медиаплеер VLC вычисляет размер буфера изображения с помощью 32-битной арифметики и выделяет его из обернутого результата. В AllocatePicture в src/misc/picture.c промежуточная сумма накапливается как i_bytes += p->i_pitch * p->i_lines, а оба поля plane_t объявлены int в include/vlc_picture.h, поэтому умножение оценивается как 32 бита и переносится перед расширением до аккумулятора size_t. Предшествующая ей проверка переполнения выполняет 64-битное арифметическое деление и, следовательно, не ограничивает результат, а последующее сравнение с PICTURE_SW_SIZE_MAX проверяет уже завернутое значение, поэтому обе защиты проходят.
Align_alloc затем резервирует небольшой завернутый размер, в то время как декодер записывает строки развертки, размер которых соответствует исходным размерам. Созданный PNG, IHDR которого объявляет большую ширину и высоту, достигает этого пути через демультиплексор изображений, чей единственный контроль размера зависит от количества байтов входного файла, а не от объявленных размеров, а декодер в модулях/кодек/png.c записывает за конец выделения длину и содержимое, зависящие от злоумышленника. Достаточно открыть файл напрямую или через запись в списке воспроизведения, без каких-либо настроек, отличных от настроек по умолчанию.
Показать оригинальное описание (EN)
VLC media player versions 3.0.0 through 3.0.23 contain a memory-safety vulnerability reachable when processing crafted media. Exploitation requires user interaction and may result in application termination or code execution with the privileges of the VLC process.
Характеристики атаки
Последствия
Строка CVSS v4.0