W Netfilterze, podsystemie jądra Linux, используемой для фильтрации и модификации сетевых пакетов, выявлена уязвимость (CVE-2024-1086), позволяющая локальному пользователю выполнить код на уровне ядра и поднять свои привилегии в системе. Проблема вызвана двойным освобождением памяти (double-free) в модуле nf_tables, обеспечивающем работу пакетного фильтра nftables. Выявивший уязвимость исследователь безопасности разработал и опубликовал рабочий прототип эксплоита.
Работа эксплоита продемонстрирована в актуальных выпусках Debian и Ubuntu с ядрами Linux 5.14 — 6.6, а также в окружении с ядром KernelCTF (Capture the Flag), включающем дополнительные патчи для блокирования типовых методов работы эксплоитов и используемом компанией Google в программе выплаты вознаграждений за поиск уязвимостей. Степень успешности работы эксплоита оценивается в 99.4%. В сопроводительной статье детально разобран процесс создания сложного многоуровневого эксплоита и обход присутствующих в ядре механизмов защиты и противодействия работе эксплоитов.

Problem związany jest z błędem w funkcji nft_verdict_init(), która pozwala na użycie wartości dodatnich jako kodu błędu DROP w hookach, za pomocą którego można wywołać funkcję nf_hook_slow() w celu ponownego zwolnienia pamięci dla bufora która już została wywołana. Funkcja free() została wywołana. Problem występuje, gdy operacja NF_DROP kończy się niepowodzeniem i jądro najpierw interpretuje NF_DROP, a następnie zwalnia bufor i zwraca status NF_ACCEPT. Sytuacja ta powoduje, że pomimo zwolnienia bufora związanego z pakietem, jego przetwarzanie nie zostaje zatrzymane, lecz przekazywane do innego handlera, który z kolei wywołuje funkcję zwolnienia pamięci po raz drugi.
Уязвимость проявляется начиная с версии ядра Linux 3.15, но эксплоит работает с ядрами начиная с версии 5.14. Исправление уязвимости предложено в выпуске ядра Linux 6.8-rc1 и в конце февраля перенесено в стабильные ветки 5.15.149, 6.1.76 и 6.6.15. В дистрибутивах проследить за исправлением уязвимости можно на страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.
Дополнительно можно отметить серию уязвимостей в модуле ksmbd, предлагающем встроенную в ядро Linux реализацию файлового serwer W oparciu o protokół SMB: Luka w zabezpieczeniach CVE-2024-26592 umożliwia zdalnym, nieuwierzytelnionym atakującym wykonywanie kodu z uprawnieniami jądra w systemach z włączonym modułem ksmbd. Problem jest spowodowany sytuacją wyścigu w kodzie obsługi połączeń TCP, która występuje z powodu nieustawienia odpowiednich blokad podczas pracy z obiektem.
Podatność CVE-2023-52440 pozwala także na zdalne wykonanie własnego kodu z uprawnieniami jądra, jednak spowodowana jest przepełnieniem bufora przy przetwarzaniu nieprawidłowych kluczy sesyjnych na skutek braku odpowiedniej weryfikacji wielkości danych otrzymanych od użytkownika przed skopiowaniem ich do bufor o stałym rozmiarze.
Luki (1, 2, 3) CVE-2024-26594, CVE-2023-52442 i CVE-2023-52441 w ksmbd umożliwiają zdalne ustalenie zawartości pamięci jądra bez uwierzytelniania. Luka CVE-2024-26594 jest spowodowana błędną walidacją danych podczas przetwarzania przychodzących tokenów SMB2 Mech, co skutkuje zwracaniem danych z obszaru znajdującego się poza granicą bufora. Luka CVE-2023-52442 jest spowodowana brakiem odpowiedniej weryfikacji danych wejściowych podczas przetwarzania żądań połączonych. Luka CVE-2023-52441 jest spowodowana brakiem wymaganej weryfikacji danych wejściowych podczas przetwarzania żądań negocjacji połączenia SMB2.
Luki CVE-2024-26594 i CVE-2024-26592 zostały naprawione w jądrze 6.8 i aktualizacjach korygujących do poprzednich stabilnych gałęzi 6.1.75, 6.6.14, 6.7.2. Pozostałe luki zostały naprawione w jądrze 6.5 i aktualizacjach 5.15.145, 6.1.53, 6.4.16.
В заключение можно упомянуть активацию работы новой команды разработчиков ядра Linux, созданной для анализа наличия уязвимостей и оценки связи вносимых в ядре исправлений с проблемами безопасности. В феврале разработчиками ядра была создана собственная служба CNA (CVE Numbering Authority), которая получила полномочия самостоятельного присвоения CVE-идентификаторов уязвимостям. До этого присвоение CVE и анализ связи исправлений с возможными уязвимостями ложился на плечи разработчиков дистрибутивов, а в ядре потенциальные уязвимости не оставались выделены и фигурировали наравне с обычными исправлениями. Результаты работы новой службы превзошли все ожидания — ежедневно в ядре помечается до нескольких десятков новых уязвимостей, которые ранее не были помечены как проблемы с безопасностью. Например, 26 марта новые CVE-идентификаторы присвоены 14 уязвимостям, которые ранее не рассматривались как проблемы с безопасностью, а 25 марта — 41 уязвимости.
Źródło: opennet.ru
