В системния код на файловата система XFS е открита уязвимост (CVE-2021-4155), която позволява на локален непривилегирован потребител да чете данни от неизползвани блокове директно от блочно устройство. Всички значителни версии на ядрото на Linux, по-стари от 5.16, които съдържат драйвера XFS, са уязвими на този проблем. Поправката беше включена в версия 5.16, както и в актуализации на ядрата 5.15.14, 5.10.91, 5.4.171, 4.19.225 и т.н. Състоянието на формирането на актуализации с отстраняване на проблема в дистрибутивите може да бъде проследено на следните страници: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch.
Уязвимостта е причинена от неправилното поведение на два специфични за XFS ioctl(XFS_IOC_ALLOCSP) и ioctl(XFS_IOC_FREESP), които са функционален аналог на общеядрената системна функция fallocate(). При увеличаване на размера на файл, който не е подравнен до размера на блока, ioctl XFS_IOC_ALLOCSP/XFS_IOC_FREESP не нулират крайния байт до следващата граница на блока. По този начин, на XFS със стандартен размер на блока от 4096 байта, нападателят може да прочете до 4095 байта от предишно записани данни. В указаните области могат да се съдържат данни от изтрити файлове, дефрагментирани файлове, а също и файлове с дедуплицирани блокове.
Можете да проверите вашата система за наличие на проблема с помощта на прост прототип на експлойт. Ако след изпълнението на предложената последователност от команди успеете да прочетете текста на Шекспир, то драйверът на файловата система е уязвим. Първоначалното монтиране на раздела XFS за демонстрация изисква права на суперпотребител.
Тъй като ioctl(XFS_IOC_ALLOCSP) и ioctl(XFS_IOC_FREESP) практически не се различават по функционалност от стандартния fallocate(), а единствената им разлика е изтичането на данни, тяхното присъствие изглежда като бекдор. Въпреки общата политика за не променяне на съществуващите интерфейси в ядрото, по предложение на Линус беше взето решение напълно да бъдат премахнати тези ioctl'и в следващата версия.
Източник: opennet.ru
