В кода на файловата система 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
