Mastodon Mastodon Mastodon Mastodon

Use-After-Free [UAF]

Оновлено: · CyberSecureFox Editorial Team

Use-After-Free (UAF, використання після звільнення) — вразливість роботи з пам’яттю, за якої програма продовжує звертатися до ділянки пам’яті після того, як її вже звільнено.

Як працює use-after-free

У C і C++ програма виділяє пам’ять під об’єкт, використовує його, а потім звільняє. Якщо десь лишився вказівник на цю пам’ять — так званий висячий вказівник — і код знову до нього звертається, він читає чи записує пам’ять, яка вже може належати чомусь іншому. Зловмисник навмисно спричиняє звільнення, заповнює звільнену пам’ять своїми даними (heap spraying, «вирощування» купи) і змушує програму вважати їх старим об’єктом. Коли програма викликає функцію через такий об’єкт, керування переходить туди, куди обрав зловмисник.

Слабкість описано як CWE-416. Вона особливо часто трапляється у складному ПЗ з безліччю об’єктів і зворотних викликів: браузерних рушіях, програмах для читання PDF, ядрах ОС і драйверах.

Чому це важливо

UAF — одна з найчастіших причин експлойтів нульового дня, які використовують у реальних атаках на Chrome, Safari, Firefox і ядро Windows. UAF у браузері зазвичай дає віддалене виконання коду в процесі відмальовування просто під час відкриття вебсторінки, а потім зловмисники додають вихід із пісочниці. Разом із переповненням буфера use-after-free належить до помилок роботи з пам’яттю, на які, за даними Microsoft і Google, припадає близько 70% їхніх серйозних вразливостей.

Як запобігти

  • Писати нові компоненти мовами з безпечною роботою з пам’яттю, наприклад Rust.
  • У C++ використовувати розумні вказівники й чіткі правила володіння, обнуляти вказівники після звільнення.
  • Застосовувати посилення: MiraclePtr у Chrome, захищені алокатори, теги пам’яті (ARM MTE).
  • Фазити код з AddressSanitizer, який одразу повідомляє про звернення до звільненої пам’яті.
  • Користувачам — швидко встановлювати оновлення браузера й ОС: експлойти UAF часто використовують до виходу патча або одразу після.
Синоніми:
use after free, використання після звільнення