Изследователи от екипа на Google Project Zero публикуваха наскоро чрез публикация в блог нов метод за използване на уязвимости (CVE-2020-29661) при внедряването на ioctl манипулатора TIOCSPGRP на Подсистема tty на ядрото на Linux, както и подробни защитни механизми, които биха могли да блокират тези уязвимости.
В публикацията се споменава, че проблемът е причинен от грешка в настройките за заключване, което води до състояние на състезание в кода на /tty/tty_jobctrl.c, което беше използвано за създаване на условия за достъп до паметта след стартиране (use-after-free), използвано от потребителското пространство чрез манипулация с ioct- чрез извикване на TIOCSPGRP.
В допълнение към публикуваната информация, също беше извършена демонстрация на функционален експлоат за ескалация на привилегии в Debian 10 с ядро 4.19.0-13-amd64 и което също не изключва, че може да засегне различни дистрибуции, сред които разбира се са тези, базирани и извлечени от Debian.
Много от индивидуалните техники за експлоатация и опциите за смекчаване, които описвам тук, не са нови. Въпреки това мисля, че си струва да ги напишем заедно, за да покажем как различните смекчавания взаимодействат с доста нормален експлойт без следа.
Кодовите фрагменти в тази публикация в блога, които са свързани с експлойта, са взети от предишната версия 4.19.160, тъй като на това се основава целевото ядро на Debian; някои други кодови фрагменти са от основната линия на Linux.
В същото време в публикуваната статия, акцентът не е толкова върху техниката за създаване на функционален експлойт, а върху това кои инструменти има в ядрото за да се предпазите срещу подобни уязвимости.
Заключението е разочароващо, тъй като се споменава, че методи като сегментиране на паметта в хепа и контролиране на достъпа до паметта след нейното освобождаване не се прилагат на практика, тъй като водят до влошаване на производителността и защита, базирана на CFI (Control Flow Integrity), която блокира експлойтите в по-късните етапи на атака, изисква подобрения.
Специален тип терминално устройство са псевдотерминалите, които се използват, когато например отваряте терминално приложение в графична среда или се свързвате към отдалечена машина чрез SSH. Докато други терминални устройства са свързани към някакъв вид хардуер, двата края на псевдотерминал се контролират от потребителско пространство и псевдотерминалите могат да бъдат свободно създадени от потребителското пространство (без привилегии).
Всеки път, когато се отвори / dev / ptmx (съкратено от "псевдотерминален мултиплексор"), полученият файлов дескриптор представлява страната на устройството (посочена в документацията и източниците на ядрото като "главният псевдотерминал") на устройството. new pseudo -терминал.
Съответното терминално устройство (към което обикновено се свързва шел) се създава автоматично от ядрото под /dev/pts/ .
Когато разглеждаме какво би могло да направи разлика в дългосрочен план, акцентът е върху използването на усъвършенствани статични анализатори или използването на безопасни за паметта езици като Rust и C диалекти с разширени анотации (като доказан C) за изграждане на проверки на състоянието, заключвания, обекти и указатели. Методите за защита също споменават активиране на режим panic_on_oops, което прави структурите на ядрото само за четене и ограничава достъпа до системни повиквания чрез механизми като seccomp.
Грешката, причиняваща проблема беше коригиран в ядрото на Linux на 3 декември миналата година. Проблемът проявява се в ядрата преди версия 5.9.13, но повечето дистрибуции отстраниха проблема в актуализациите на пакета на ядрото, които бяха предложени миналата година.
Също така се споменава подобна уязвимост (CVE-2020-29660), която беше открита едновременно при внедряването на TIOCGSID ioctl повикването, но също беше премахната навсякъде.
Накрая Ако се интересувате да научите повече за това, можете да проверите подробностите В следващия линк.