В утилитата e2fsck, предоставена в пакета , (), позволяваща изпълнението на код от атакуващия при проверка на файловата система, съдържаща специално форматирани директории. Проблемът с уязвимостта е потвърден в версии от 1.43.3 до 1.45.4. Уязвимостта е отстранена в актуализацията . В дистрибуциите проблемът все още остава нерешен (, , , , ).
Уязвимостта е причинена от грешка в функцията mutate_name() от файла rehash.c, използвана при преостребяване на свързаните с директорията хеш-таблици, осигуряващи съпоставяне с директорията на всички находящи се в нея файлове. Повреждането на структурата hash_entry, свързана с директорията, може да доведе до запис на данни от атакуващия в област, извън заделения буфер. При откритие в хеш-таблицата на директорията на няколко файла с едно и също име, утилитата e2fsck преименува повторените файлове, добавяйки към името ~0, ~1 и т.н. За временно съхранение на новото име при такова преименуване в стека се заделя буфер с размер 256 байта.
Размерът на копираните данни се определя от израза „entry->name_len & 0xff“, но стойността entry->name_len се зарежда от структура на диска, а не се изчислява на базата на фактическия размер на името. Ако размерът е нула, индексът на масива приема стойност -1 и се създават условия за целочислено преливане (integer underflow) и презапис на други данни в стека със стойност „~0“. За 64-битови системи експлоатацията на уязвимостта се оценява като малко вероятна и изискваща липса на ограничения на размера на стека (ulimit -s unlimited). За 32-битови системи експлоатацията се счита за възможна, но резултатът зависи много от това как е компилиран изпълнимият файл.
За провеждането на атака атакуващият трябва да повреди данните по определен начин в раздела с ФС ext2, ext3 или ext4. Тъй като тази операция изисква привилегии на суперпотребител, уязвимостта представлява заплаха при проверката на външни носители или получени от вън образи на ФС с утилитата e2fsck.
Източник: opennet.ru
