Помилка копіювання: вразливість Linux, яка надає root-доступ через кешування сторінок

Ключові моменти:
  • Зловмисник відкриває сокет AF_ALG та запитує алгоритм автентифікації.
  • Зловмисник використовує splice() для передачі сокету сторінок з кешу цільового файлу (наприклад, /usr/bin/su). Ці сторінки потім стають частиною вихідного хеш-списку (доступними для запису).
  • Зловмисник надсилає повідомлення (sendmsg) зі зловмисно розробленими аутентифікованими даними (AAD), де байти 4-7 містять дані, які він хоче записати (наприклад, шкідливий код).
  • Коли запускається розшифрування, authencesn бере ці 4 байти з AAD та тимчасово записує їх у кінець буфера. Завдяки оптимізації на місці, цей кінець буфера вказує безпосередньо на сторінку кешу файлу.
  • Криптографічна операція завершується невдачею (зашифрований текст недійсний), але запис 4 байтів вже відбувся і ніколи не буде скасовано.
  • Зловмисник повторює процес, щоб ввести свій код. Коли виконується /usr/bin/su, ядро ​​завантажує модифіковану версію з пам'яті, виконуючи введений код з правами root.

невдача копіювання

Безпека Linux стикається з ще одним викликом після відкриття... вразливість CVE-2026-31431, що отримала назву «Помилка копіювання» дослідниками з Xint Code. Ця проблема дизайну далеко не є теоретичним недоліком, а Це дозволяє локальному користувачеві без привілеїв підвищити свої дозволи та отримати повний доступ. як суперкористувач передбачуваним та тихим чином.

Дослідники зазначають, що ця вразливість була успішно використана у провідних дистрибутивах, таких як Ubuntu, Amazon Linux, RHEL та SUSE, що підтверджує... будь-яка система з ядром версії пізнішої за 4.14 та не відставати Увімкнення підтримки сокетів AF_ALG потенційно вразливе до цієї атаки.

Операції на місці та переповнення кешу сторінок

Щодо рішення, зазначається, що це Це походить від оптимізації, запровадженої в 2017 році в криптографічному API ядра (AF_ALG). Ця модифікація Я хотів позбутися непотрібної буферизації. виконання операцій автентифікованого шифрування (AEAD) безпосередньо в тому ж просторі пам'яті, що відомо як операції "на місці".

El Критична проблема виникає при поєднанні цієї оптимізації з функцією splice(), Цей метод передає дані між файловими дескрипторами, передаючи прямі посилання на кеш сторінок ядра, замість фізичного копіювання даних. Під час запиту на розшифрування структура пам'яті була налаштована таким чином, що буфер призначення, який мав бути тимчасовим простором для користувача, зрештою був безпосередньо пов'язаний зі сторінками кешу, що містять дані системних файлів.

Аутентифікація та запис за межами пам'яті

El Остаточна причина вразливості полягає в аномальній поведінці алгоритму автентифікації. На відміну від інших криптографічних процедур, які суворо дотримуються меж своїх буферів призначення, Цей специфічний алгоритм використовує пам'ять користувача як тимчасову робочу область. (блокнот) для переупорядкування послідовностей байтів під час обчислення тегу автентифікації.

У цьому процесі алгоритм записує на чотири байти понад встановлений ліміт для області виводу. Завдяки оптимізації на місці та ланцюжку посилань, створеному splice(),Цей, здавалося б, нешкідливий текст перетинає межі пам'яті користувача. і потрапляє безпосередньо на сторінку кешу ядра, пов'язану з оброблюваним файлом.

Цей ланцюг логічних помилок Це надає зловмиснику можливість довільно перезаписати чотири байти в певних позиціях кешу. сторінок для будь-якого файлу, який він може прочитати. Надсилаючи серію обчислених запитів, зловмисник може впровадити шкідливий код у версії критично виконуваних файлів, що зберігаються в оперативній пам'яті, з встановленим бітом suid, наприклад, у інструменті перемикання користувачів.

Оскільки всі операції читання спочатку запитують кеш сторінок, то наступного разу, коли буде викликана легітимна утиліта, Система виконає введений код з пам'яті, миттєво надаючи root-права. без зміни фізичного файлу на жорсткому диску. Ще більш тривожним є те, що оскільки ізоляція контейнерів використовує кеш сторінок базового хоста, ця вразливість служить прямим шлюзом для виходу з віртуалізованих середовищ, таких як кластери Kubernetes, та компрометації основного вузла.

Аварійні виправлення та рішення для пом'якшення наслідків

З огляду на серйозність цього рішення, Команди технічного обслуговування розгорнули екстрені оновлення, де знаходиться остаточне рішення Скасувати оптимізацію на місці у файлі algif_aead.c, суворо розділивши списки пам'яті джерела та призначення щоб запобігти потраплянню кешованих сторінок у шляхи, придатні для запису.

Ці патчі вже інтегровані в ядра версій 6.18.22, 6.19.12 та 7.0, і зараз їх переносять до гілок довгострокової підтримки. Адміністраторам, які не можуть негайно перезапустити або оновити свої сервери, рекомендується вимкнути модуль ядра algif_aead, якщо він був скомпільований зовні, або суворо обмежити створення сокетів AF_ALG за допомогою політик безпеки, таких як SELinux, яка, наприклад, захищає сучасні пристрої Android від цієї загрози.

Зрештою, якщо ви зацікавлені дізнатися більше, ви можете знайти деталі за наступним посиланням.


Додати як пріоритетне джерело в Google