В утилита 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
