In der asynchronen E/A-Schnittstelle io_uring, die vom Kernel bereitgestellt wird Linux, выявлена уязвимость (CVE-2024-0582), позволяющая непривилегированному пользователю получить права root в системе. Для эксплуатации уязвимости достаточно обычного локального доступа к системе, без необходимости манипуляций с пространствами имён. В настоящее время публично доступен работающий эксплоит, а также подробно описана вторая техника эксплуатации уязвимости.
Die Schwachstelle wird durch den Zugriff auf einen bereits freigegebenen Speicherblock (use-after-free) im io_uring-Subsystem verursacht, der beim Registrieren und Freigeben eines Ringpuffers auftritt, der mit dem Flag IORING_REGISTER_PBUF_RING erstellt wurde. Wenn die mmap()-Operation auf einen Puffer angewendet wird, bleibt sie im Benutzerbereich erhalten, nachdem die Freigabeoperation ausgeführt wurde (IORING_UNREGISTER_PBUF_RING). Mit dieser Funktion kann ein Angreifer Daten auf Speicherseiten lesen und schreiben, die an das Kernel-Speicherzuordnungssystem zurückgegeben werden.
Проблема проявляется начиная с выпуска ядра Linux 6.4 и устранена в выпусках 6.7 и 6.6.5, а также в пакете с ядром 6.5.0-21, подготовленным для Ubuntu 22.04 и 23.10. Примечательно, что в основном ядре проблема была исправлена в декабре 2023 года, проект Google Zero открыл доступ к сигнализирующему о наличии уязвимости сообщению об ошибке 8 января, а пакет с исправленным ядром 6.5 для Ubuntu был сформирован лишь 22 февраля 2024 года. В других дистрибутивах проследить за исправлением и подверженностью уязвимости можно на страницах: Debian, Gentoo, RHEL, SUSE, Fedora, Arch.
Der erste Exploit manipuliert die Erstellung einer großen Anzahl von Angreifern kontrollierter Speicherseiten, um das Speicherlayout im Kernel zu bestimmen und auf benachbarte physische Speicherseiten zuzugreifen, indem er den Inhalt speziell gefüllter Netzwerk-Socket-Strukturen als Beacons nutzt. Um den Code auszuführen, verwendet der Exploit ein „Gadget“ (eine im Kernel vorhandene Befehlsfolge), das zur Ausführung der Funktion call_usermodehelper_exec führt, die dazu dient, Prozesse im Benutzerbereich vom Kernel aus zu starten.
Der zweite Exploit basiert auf der Tatsache, dass, wenn alle Slab-Blöcke im Cache erschöpft sind (z. B. wenn eine Datei mehrmals geöffnet wird), freie Speicherseiten, auf die der Angreifer noch Zugriff hat, vom Speicherzuweisungssystem zum Erstellen verwendet werden Ein neuer Slab-Block und alle neuen Dateistrukturen werden in diesem Block platziert. Dementsprechend landen einige Dateistrukturen in Speicherseiten, die von einem Angreifer gelesen und geschrieben werden können. Der Vorgang besteht in diesem Fall darin, den Eintrag der gewünschten Datei in den Dateicache zu organisieren und das Feld f_mode in den zugehörigen Dateistrukturen zu ersetzen, das die Zugriffsrechte bestimmt und es Ihnen ermöglicht, die gewünschte Systemdatei, beispielsweise /etc/, zu erstellen. passwd, beschreibbar.
Source: opennet.ru
