Уязвимости в ядрото на Linux, позволяващи повишаване на привилегиите чрез nf_tables и ksmbd

В Netfilter, подсистемата на ядрото на Linux, използвана за филтриране и модифициране на мрежови пакети, е открита уязвимост (CVE-2024-1086), която позволява на локален потребител да изпълни код на ниво ядро и да повиши привилегиите си в системата. Проблемът е причинен от двойно освобождаване на паметта (double-free) в модула nf_tables, който осигурява работата на пакетния филтър nftables. Изследователят по сигурността, който е открил уязвимостта, е разработил и публикувал работен прототип на експлоит.

Работата на експлоита е демонстрирана в актуални версии на Debian и Ubuntu с ядрa на Linux 5.14 — 6.6, както и в среда с ядрото KernelCTF (Capture the Flag), включваща допълнителни пачове за блокиране на типичните методи на работа на експлоитите и използвана от компанията Google в програмата за възнаграждения за откриване на уязвимости. Степента на успешност на работата на експлоита е оценена на 99.4%. В съпроводителната статия подробно е разгледан процесът на създаване на сложен многостепенен експлоит и начините за заобикаляне на механизмите за защита и противодействие, налични в ядрото.

Уязвимости в ядрото на Linux, позволяващи повишаване на привилегиите чрез nf_tables и ksmbd

Проблемата е свързана с грешка във функцията nft_verdict_init(), която допуска използването на положителни стойности като код за грешка за отхвърляне на пакети (DROP) в hook-ове, което може да се използва за повторно освобождаване на паметта за буфера, за който вече е била извикана функцията free() в функцията nf_hook_slow(). Проблемът възниква, когато операцията NF_DROP се формира с грешка и ядрото първоначално интерпретира NF_DROP, но след това освобождава буфера и връща статус NF_ACCEPT. Тази ситуация води до това, че въпреки освобождаването на свързания с пакета буфер, обработката му не спира, а се предава на друг обработващ, който от своя страна втори път извиква функцията за освобождаване на паметта.

Уязвимостта се проявява от версия на ядрото 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 решение за файлово сървър на базата на протокола SMB: Уязвимост CVE-2024-26592 позволява отдалечен достъп до изпълнение на код с правата на ядрото на системи с активиран модул ksmbd без необходимост от удостоверяване. Проблемът е причинен от състезателно състояние в кода за обработка на TCP-съединения, което възниква заради липсата на адекватни блокировки при работа с обекта.

Уязвимост CVE-2023-52440 също така позволява отдалечено изпълнение на код с правата на ядрото, но е предизвикана от преливане на буфера при обработката на неправилни сесийни ключове заради липсата на адекватна проверка на размера на данните получени от потребителя преди копирането им в буфер с фиксиран размер.

Уязвимостите (1, 2, 3) CVE-2024-26594, CVE-2023-52442 и CVE-2023-52441 в ksmbd дават възможност за отдалечен достъп до съдържанието на ядрото без необходимост от удостоверяване. Уязвимостта CVE-2024-26594 е причинена от неправилна проверка на данните при обработка на получените токени SMB2 Mech, водеща до връщане на данни извън пределите на буфера. Уязвимостта CVE-2023-52442 е причинена от липсата на адекватна проверка на входящите данни при обработка на свързани (chained) заявки. Уязвимостта CVE-2023-52441 е предизвикана от липсата на необходима проверка на входящите данни при обработката на заявки за установяване на връзки SMB2.

Уязвимостите CVE-2024-26594 и CVE-2024-26592 са отстранени в ядрото 6.8 и в коригиращите актуализации на предишните стабилни версии 6.1.75, 6.6.14, 6.7.2. Останалите уязвимости са отстранени в ядрото 6.5 и актуализациите 5.15.145, 6.1.53, 6.4.16.

В заключение можем да споменем активирането на работата на новия екип от разработчици на ядро Linux, създаден за анализ на наличието на уязвимости и оценка на връзката между внасяните в ядро корекции и проблемите със сигурността. През февруари разработчиците на ядро създадоха собствена служба CNA (CVE Numbering Authority), която получи правомощията да присвоява CVE идентификатори на уязвимости самостоятелно. Преди това присвояването на CVE и анализът на връзката между корекциите и потенциалните уязвимости падаше на гърба на разработчиците на дистрибуции, а в ядрото потенциалните уязвимости не се отбелязваха отделно и фигурираха наред с обикновените корекции. Резултатите от работата на новата служба надминаха всички очаквания — ежедневно в ядрото се отбелязват до няколко десетки нови уязвимости, които преди това не са били обозначени като проблеми със сигурността. Например, на 26 март нови CVE идентификатори бяха присвоени на 14 уязвимости, които преди не са били разглеждани като проблеми със сигурността, а на 25 март — 41 уязвимости.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster