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, использование после освобождения