Розкрито техніку експлуатації вразливості в tty-підсистемі ядра Linux

Дослідники з команди Google Project Zero опублікували метод експлуатації вразливості (CVE-2020-29661) у реалізації ioctl-обробника TIOCSPGRP з tty-підсистеми ядра Linux, а також детально розглянули механізми захисту, які могли б блокувати подібні вразливості.

Помилка, що викликає проблему, була усунена в ядрі Linux ще 3 грудня минулого року. Проблема проявляється в ядрах до версії 5.9.13, але більшість дистрибутивів усунули проблему в оновленні пакетів з ядром, запропонованих ще минулого року (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Схожа вразливість (CVE-2020-29660) одночасно була знайдена в реалізації ioctl-виклику TIOCGSID, але вона також повсюдно усунена.

Проблема викликана помилкою при встановленні блокувань, що призводить до стану гонки в коді drivers/tty/tty_jobctrl.c, яке вдалося використати для створення умов звернення до пам'яті після її звільнення (use-after-free), що експлуатуються з простору користувача через маніпуляції з ioct- викликом TIOCSPGRP. Робочий експлоїт продемонстрований для підвищення привілеїв у Debian 10 з ядром 4.19.0-13-amd64.

При цьому в опублікованій статті акцент ставиться не так на техніці створення робочого експлоїту, стільки на тому, які інструменти в ядрі існують для захисту від таких уразливостей. Висновок робиться не втішний, методи типу сегментування пам'яті в купі та контролю за зверненням до пам'яті після її звільнення не застосовуються на практиці, оскільки призводять до зниження продуктивності, а захист на основі CFI (Control Flow Integrity), що блокує експлоїти на пізніх стадіях атаки, потребує доопрацювання.

При розгляді того, що могло б змінити ситуацію в довгостроковій перспективі, виділяється застосування просунутих статичних аналізаторів або використання мов, що забезпечують безпечну роботу з пам'яттю, таких як Rust та діалекти мови Сі з розширеними анотаціями (наприклад, Checked C), на етапі складання перевіряючих стан блокувань, об'єктів та покажчиків. З методів захисту також згадується активація режиму panic_on_oops, переведення структур ядра в режим лише для читання та обмеження доступу до системних викликів за допомогою таких механізмів, як seccomp.

Джерело: opennet.ru

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