Компания Qualys откри 9 уязвимости в системата за управление на достъпа AppArmor, най-опасните от които позволяват на локален непривилегирован потребител да получи права root в системата, да се измъкне от изолирани контейнери и да заобиколи ограниченията, зададени чрез AppArmor. Уязвимостите получиха кодово име CrackArmor. CVE идентификаторите все още не са назначени. Успешни примери за повишаване на привилегиите са демонстрирани в Ubuntu 24.04 и Debian 13.
Проблемите присъстват в LSM модула AppArmor от ядрото на Linux 4.11, издадено през 2017 година, и се проявяват в дистрибуции, използващи AppArmor, като Ubuntu, Debian, openSUSE и SUSE (откъдето openSUSE/SUSE 16 по подразбиране активира SELinux, но AppArmor остава опция). Патчи за отстраняване на уязвимостите са предадени на разработчиците на ядрото на Linux и в близките дни ще бъдат предложени на потребителите в състава на обновления 6.18.18, 6.19.8, 6.12.77, 6.6.130, 6.1.167, 5.15.203 и 5.10.253. Поправка е включена и в днешните обновления на пакетите с ядро за Ubuntu. Същевременно в Ubuntu са издадени обновления на пакетите sudo, sudo-ldap и util-linux (в които е включен инструментът su), в които са отстранени несъвършенства, позволяващи експлоатацията на уязвимостта в AppArmor. В Debian обновлението е в процес на подготовка.
Проблемите са предизвикани от наличието в AppArmor на фундаментална уязвимост от клас "обманут посредник" ("confused-deputy"), позволяваща на непривилегировани потребители да зареждат, заменят и изтриват произволни профили на AppArmor. Тази уязвимост може да се използва директно за деактивиране на защитата на програми и услуги от локални и отдалечени атаки (чрез запис на псевдофайлове /sys/kernel/security/apparmor/.load, .replace и .remove, например, за сваляне на ограниченията в cupsd и rsyslogd), причиняване на срив в обслужването (чрез прилагане на забранителни профили) и заобикаляне на ограниченията на имената на пространства (чрез зареждане на нов AppArmor профил "userns", например, за /usr/bin/time, позволяващ създаването на неограничени user namespace).
Възможността за замяна на профили AppArmor също така позволява получаване на root права чрез свързване на нови профили към привилегировани инструменти, като su и sudo, които блокират достъпа до определени системни повиквания. В частност, права root могат да бъдат получени чрез блокиране на операцията setuid (CAP_SETUID) за инструмента sudo в комбинация с манипулацията на променливата на средата MAIL_CONFIG за смяна на директорията с настройките за поща. сървър Postfix.
Същността на метода е, че когато възникнат проблеми, инструментът sudo изпраща писмо до администратора, стартирайки /usr/sbin/sendmail. Чрез блокиране на нулирането на привилегиите може да се постигне стартиране на този процес с права root, а поставяйки променливата на средата MAIL_CONFIG преди стартиране на sudo, може да се предадат на инструмента sendmail други настройки, включително да се посочи собствен обработчик postdrop, който да се стартира при изпращане на поща. $ mkdir /tmp/postfix $ cat > /tmp/postfix/main.cf < /tmp/postfix/postdrop <> /tmp/postfix/pwned EOF $ chmod -R 0755 /tmp/postfix $ apparmor_parser -K -o sudo.pf < /sys/kernel/security/apparmor/.replace Парола: $ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Операция не е разрешена sudo: не може да се отвори /etc/sudoers: Операция не е разрешена sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Операция не е разрешена sudo: грешка при инициализиране на модула за одит sudoers_audit $ cat /tmp/postfix/pwned uid=0(root) gid=1001(jane) groups=1001(jane),100(users)
Като други начини за повишаване на привилегиите се споменават уязвимости в кода на AppArmor, работещ на ниво Linux ядро. Показано е как да се получат права root чрез уязвимости, причинени от двойно изпълнение на функцията free() и достъп до вече освободена област на паметта (use-after-free) в кода за зареждане и замяна на профили AppArmor. Например, AppArmor запазва профила в структура aa_loaddata, паметта за която се разпределя в slab кеш kmalloc-192, като поради състоянието на гонка не е изключено достъпването на паметта, която е заемала структурата, след нейното освобождаване. Тази проблема може да се използва за получаване на контрол върху освободената памет и преразпределение на освободената страница памет за мапиране на съдържанието на файла /etc/passwd и презапис на реда с паролата root.
Източник: opennet.ru
