Версии Imager от 0.45_02 до 1.034 для Perl могут предоставлять соседние байты кучи через strlen(), пересчитываемые из записей EXIF ASCII с нулевым счетчиком в copy_string_tags.
copy_string_tags() вычисляет длину тега ASCII EXIF как `entry->size - 1`, чтобы удалить конечный NUL. Запись ASCII с нулевым счетом устанавливает для `entry->size` значение 0, а полученная длина достигает i_tags_add() как -1, что интерпретируется как запрос на вызов strlen(), сканирование записи до следующего NUL и копирование этих байтов в тег. JPEG достигает этого пути через im_decode_exif(), как и отдельный дистрибутив Imager::File::WEBP, который исправлен путем обновления Imager.
Любой вызывающий Imager->read() на изображении, предоставленном злоумышленником с такой записью, может получить тег exif_*, содержащий соседние байты кучи вместо пустой строки.
Показать оригинальное описание (EN)
Imager versions from 0.45_02 before 1.034 for Perl may expose adjacent heap bytes via strlen() over-read from zero-count ASCII EXIF entries in copy_string_tags. copy_string_tags() computes an ASCII EXIF tag's length as `entry->size - 1` to strip the trailing NUL. A zero-count ASCII entry sets `entry->size` to 0, and the derived length reaches i_tags_add() as -1, which is interpreted as a request to call strlen(), scanning past the entry to the next NUL and copying those bytes into the tag. JPEG reaches this path via im_decode_exif(), as does the separate Imager::File::WEBP distribution, which is fixed by upgrading Imager. Any caller of Imager->read() on an attacker-supplied image with such an entry may receive an exif_* tag holding adjacent heap bytes instead of an empty string.
Характеристики атаки
Последствия
Строка CVSS v3.1