Уразливість у io_uring дозволяла користувачеві без дозволу стати root навіть у контейнерах

Останнім часом розкрита інформація про вразливість (CVE-2022-29582) у реалізації асинхронного інтерфейсу введення-виведення io_uring, включеного в ядро ​​Linux з версії 5.1, який дозволяє непривілейованому користувачеві стати адміністратором системи, навіть якщо виконується експлойт контейнера.

Варто зазначити це про згадану вразливість було повідомлено трохи більше 3 місяців тому (приблизно на початку травня цього року), але повна інформація та розкриття інформації були опубліковані лише нещодавно.

Що стосується вразливості, згадується, що це виникає при зверненні до вже звільненого блоку пам'яті, проявляється в ядрах Linux, починаючи з гілки 5.10.

Про вразливість CVE-2022-29582

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

Оновлений загальний опис io_uring уже надали інші. Вони пояснюють це в тисячу разів краще, ніж ми, тому ми просто розглянемо підсистему більш детально (перегляньте цю статтю Grapl Security і цю статтю Flatt Security для чудового вступу).

Що важливіше, поле коду операції визначає тип операції для виконання. Для кожного «коду операції», який вимагає його, поле fd визначає дескриптор файлу, на якому виконується запитаний ввід-вивід. Майже всі звичайні системні виклики введення-виведення (read, sendto тощо) мають еквівалентний асинхронний код операції. Кожне поле може виконувати різні ролі залежно від операції.

Після отримання з SQ SQE перетворюється на внутрішнє представлення, описане struct io_kiocb( зворотний виклик ядра введення/виведення). Ці об’єкти зазвичай називаються запитами.

struct io_kiocb використовується як еквівалент «готового до запуску» SQE, на якому він заснований, за допомогою якого будь-який файловий дескриптор розв’язується як struct file*s, додаються облікові дані користувача, особистість (у якому ядрі працюватимуть) тощо .

Після завершення запитуваної операції вона записується в чергу завершення (CQ) запис, який відповідає SQE. Такий запис називається записом черги завершення (CQE) і містить такі поля, як код помилки та значення результату. Програма простору користувача може опитувати CQ для нових записів, щоб визначити, чи завершилася обробка надісланих SQE і яким був їхній результат.

Згадується, що є деякі сценарії, у яких легко замінити об’єкт про прогрес. Але є два обмеження:

  • LT' має бути призначено та ініціалізовано у вікні гонки. Тобто після звільнення LT, але до досягнення точки в LT, до якої більше немає доступу.
  • LT' може бути лише іншим об'єктом struct io_kiocb. Через ізоляцію купи, де об’єкти в купі розділені відповідно до їхнього типу, надто важко перепризначити їх як інший тип об’єкта у вікні гонки.

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

Наш експлойт націлений на версію ядра 5.10.90, версію, яку на той час віддалено запускав Google. Нам довелося адаптувати наш експлойт до конкретних специфікацій сервера (4 ядра Skylake Xeon @ 2.80 ГГц, 16 ГБ оперативної пам’яті), але з деякими налаштуваннями будь-яка машина з уразливим ядром повинна бути придатною для експлуатації.

Експлойт також працює в середовищі nsjail ізольовано в дистрибутиві Google COS (Container Optimized OS) на основі ОС Chromium і використовується на Google Cloud Platform на віртуальних машинах Compute Engine. Експлойт призначений для роботи з гілками ядра від 5.10 до 5.12. Нарешті, варто згадати про це проблему виправлено в квітні в оновленнях 5.10.111, 5.15.34 і 5.17.3.

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


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: AB Internet Networks 2008 SL
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.