Выявлена возможность обхода ограничений доступа к "user namespace" в Ubuntu

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3972
Зарегистрирован: 20.08.2022

#

Выявлена возможность обхода ограничений доступа к "user namespace" в Ubuntu
Дата публикации:Fri, 28 Mar 2025 15:07:14 +0300




Исследователи безопасности из компании Qualys выявили три способа обхода применяемых в Ubuntu ограничений доступа к пространству имён идентификаторов пользователя (user namespace). Начиная с выпуска 23.10 в Ubuntu применяется дополнительный слой изоляции, не позволяющий обычным непривилегированным пользователям создавать "user namespace". Сам по себе доступ к "user namespace" не является уязвимостью и многие дистрибутивы предоставляют его из коробки, так как он требуется в системах контейнерной изоляции и используется для sendbox-ограничений (например применяется для sandbox-изоляции браузеров).



Пространства имён (namespace) в ядре Linux позволяют привязать к разным процессам разные представления ресурсов, например, процесс может быть помещён в окружение со своими точками монтирования, IPC, PID и сетевым стеком, которые не пересекаются с окружением других процессов. При помощи "user namespace" непривилегированный процесс в контексте изолированного контейнера может обращаться к подсистемам ядра, в обычных условиях требующих повышенных привилегий, но оставаться при этом непривилегированным вне контейнера.



Проблема в том, что изначально многие подсистемы ядра были написаны с расчётом на то, что работать с ними может только пользователь root, и проблемы в подобных подсистемах не рассматривались как уязвимость, так как непривилегированные пользователи не могли к ним обращаться. После того, как появился "user namespace" ошибки в подобных подсистемах стали иметь иное значение - эксплуатация уязвимости в ядре из изолированного окружения приводила к выполнению кода на уровне ядра и позволяла получить привилегированный доступ ко всей системе.




В Ubuntu в качестве дополнительного уровня защиты была реализована гибридная схема, выборочно оставляющая некоторым программам возможность создавать "user namespace" при наличии профиля AppArmor с правилом "allow userns create" или прав CAP_SYS_ADMIN. Подобная защита позволяла уменьшить риск эксплуатации уязвимостей в подсистемах ядра (сократить поверхность атаки), но при этом сохранить возможность полноценной sendbox-изоляции в избранных приложениях.




Создание "user namespace" с привилегированным доступом внутри контейнера представляет угрозу только если в системе не установлены все доступные обновления и в ядре присутствует известная неисправленная уязвимость. Выявлено три способа обхода механизма ограничения доступа к "user namespace", позволяющих непривилегированному локальному пользователю создать "user namespace" c привилегиями администратора внутри, достаточными для выполнения эксплоитов, требующих прав CAP_SYS_ADMIN или CAP_NET_ADMIN:
  • Атакующий может использовать утилиту aa-exec, входящую в базовую поставку, для применения к себе имеющихся в системе профилей AppArmor, среди прочего и тех, что разрешают доступ к "user namespace". Например, можно применить к своему процессу профили от chrome, flatpak и trinity.

    $ aa-exec -p trinity -- unshare -U -r -m /bin/sh


    Атакующий может запустить командную оболочку из пакета busybox, поставляемого по умолчанию и снабжённого профилем AppArmor, допускающим создание "user namespace".

    $ busybox sh
    ~$ /usr/bin/unshare -U -r -m /bin/sh

    Атакущий может использовать переменную окружения LD_PRELOAD для загрузки своей библиотеки в контексте любой программы, имеющей AppArmor-профиль для доступа к "user namespace". Например, подобные права имеет файловый менеджер nautilus в Ubuntu Desktop.

    LD_PRELOAD=./shell.so /usr/bin/nautilus


Для блокирования найденных лазеек разработчики Ubuntu рекомендуют отключить возможность изменения профилей AppArmor утилитой aa-exec, выставив настройку "sysctl kernel.apparmor_restrict_unprivileged_unconfined=1". Также рекомендовано деактивировать профили AppArmor у приложений, имеющих доступ к "user namespace". В поставке по умолчанию подобные профили присутствуют у busybox и nautilus, а для проверки наличия отдельно установленных программ с подобными правами можно использовать команду "sudo aa-status --filter.mode=unconfined". Для отключения AppArmor-профилей busybox и nautilus (если не требуется использование утилит busybox с "user namespace" и можно обойтись без генерации миниатюр в nautilus) следует использовать команды:

sudo ln -s /etc/apparmor.d/busybox /etc/apparmor.d/disable
sudo apparmor_parser -R /etc/apparmor.d/busybox
sudo ln -s /etc/apparmor.d/nautilus /etc/apparmor.d/disable
sudo apparmor_parser -R /etc/apparmor.d/nautilus





Дополнительно можно отметить раскрытие сведений об уязвимости (CVE-2025-0927) в драйвере HFS+, позволяющей получить root-привилегии в системе. Проблема вызвана переполнением буфера, возникающем при обработке специально сформированных образов ФС. Для эксплуатации уязвимости требуется доступ к созданию "user namespace" или монтированию дисковых образов (например, пользователям Ubuntu с активным локальным сеансом polkit предоставляет право создания loop-устройств и монтирования блочных устройств, применяемые для автоподключения USB Flash). Проблема проявляется только в ядрах Linux до версии 6.12. Опубликован рабочий эксплоит, использование которого продемонстрировано в Ubuntu 22.04 с ядром 6.5.0-18-generic.



Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=62970

Жизнь за Нер'зула!

Ответить