Вразливість у XFS, що дозволяє читати сирі дані блокового пристрою

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

Додати коментар або відгук