The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимость в OverlayFS, позволяющая повысить свои привилегии

24.03.2023 11:12

В ядре Linux в реализации файловой системы OverlayFS выявлена уязвимость (CVE-2023-0386), которую можно использовать для получения root-доступа на системах, в которых установлена подсистема FUSЕ и разрешено монтирование разделов OverlayFS непривилегированным пользователем (начиная с ядра Linux 5.11 с включением непривилегированных user namespace). Проблема устранена в ветке ядра 6.2. Публикацию обновлений пакетов в дистрибутивах можно проследить на страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.

Атака производится через копирование файлов с флагами setgid/setuid из раздела, примонтированного в режиме nosuid, в раздел OverlayFS, имеющий слой, связанный с разделом, допускающим выполнение suid-файлов. Уязвимость близка к проблеме CVE-2021-3847, выявленной в 2021 году, но отличается более низкими требованиями к эксплуатации - в старой проблеме требовались манипуляции с xattrs, которые ограничены при использования пространств имён идентификаторов пользователя (user namespace), а в новой проблеме используются биты setgid/setuid, которые специально не обрабатываются в user namespace. Для тестирования подготовлен рабочий прототип эксплоита.

Алгоритм совершения атаки:

  • При помощи подсистемы FUSE монтируется ФС, в которой имеется принадлежащий пользователю root исполняемый файл с флагами setuid/setgid, доступным всем пользователям на запись. При монтировании FUSE выставляет режим "nosuid".
  • Отменяются (unshare) пространства имён пользователей и точек монтирования (user/mount namespace).
  • Монтируется OverlayFS с указанием ранее созданной в FUSE ФС в качестве нижнего слоя и верхним слоем на базе каталога, допускающего возможность записи. Каталог верхнего слоя должен размещаться в ФС, при монтировании которой не используется флаг "nosuid".
  • Для suid-файла в FUSE-разделе утилитой touch меняется время модификации, что приводит к его копированию в верхний слой OverlayFS.
  • При копировании ядро не убирает флаги setgid/setuid, что приводит к тому, что файл появляется в разделе, допускающем обработку setgid/setuid.
  • Для получения прав root достаточно запустить файл с флагами setgid/setuid из каталога, прикреплённого к верхнему слою OverlayFS.

Дополнительно можно отметить раскрытие исследователями из команды Google Project Zero сведений о трёх уязвимостях, которые были исправлены в основной ветке ядра Linux 5.15, но не были перенесены в пакеты с ядром из RHEL 8.x/9.x и CentOS Stream 9.

  • CVE-2023-1252 - обращение к уже освобождённой области памяти в структуре ovl_aio_req при одновременном совершении нескольких операций в OverlayFS, развёрнутой поверх ФС Ext4. Потенциально уязвимость позволяет повысить свои привилегии в системе.
  • CVE-2023-0590 - обращение к уже освобождённой области памяти в функции qdisc_graft(). Предполагается, что эксплуатация ограничивается аварийным завершением.
  • CVE-2023-1249 - обращение к уже освобождённой области памяти в коде записи coredump, возникающее из-за пропущенного вызова mmap_lock в file_files_note. Предполагается, что эксплуатация ограничивается аварийным завершением.


  1. Главная ссылка к новости (https://bugzilla.redhat.com/sh...)
  2. OpenNews: Критическая уязвимость в OverlayFS, позволяющая поднять свои привилегии в Ubuntu
  3. OpenNews: Уязвимость в cgroups v1, позволяющая выйти из изолированного контейнера
  4. OpenNews: Уязвимость в firejail, позволяющая получить root-доступ в системе
  5. OpenNews: В ядре Linux выявлены эксплуатируемые уязвимости в POSIX CPU timer, cls_route и nf_tables
  6. OpenNews: Код OverlayFS принят в состав ядра Linux 3.18
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/58857-overlayfs
Ключевые слова: overlayfs, kernel, linux, fuse
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (35) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.20, Анонн (?), 13:35, 24/03/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Перемудрили они конечно с этими setgid/setuid. Такое количество абстракций, что не удивительно что где-то логику не продумали.
     
     
  • 2.23, Аноним (23), 14:57, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    setuid/setgid это вообще чудовищный костыль родом из 80-х. Целый механизм файловой системы поддерживается уже 40 лет, но используется только для одной программы - sudo.
     
     
  • 3.24, Аноним (24), 15:49, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Справедливости ради, судо вообще костыль и мало где применим. Это механизм для запуска бинаря с чужими правами, поэтому применятся пользователями в многопользовательских конфигурациях, а не то, что ты подумал. Как это может использовать софт, по-твоему? Ну вот стим например от другого пользователя запускаешь, что файрвол мог его контролировать.
     
     
  • 4.26, Аноним (23), 16:02, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > судо вообще костыль

    Костыль, да. Но удобный, и исключительно поэтому еще жив.

    > и мало где применим

    В каком смысле? Он применим везде, где его применяют.

    Дальнейший ваш поток сознания у меня расшифровать не получилось.

     
     
  • 5.28, Аноним (24), 16:07, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Ни разу в жизни не использовал судо. Чем он удобный? Костыль костыльный, есть 100 способов сделать нормально не создавая уязвимость.
     
     
  • 6.29, Аноним (23), 16:10, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Назовите хотя бы два из этих 100.
     
     
  • 7.32, Аноним (24), 16:14, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не проблема: libcap и libcap-ng, policykit и т.д.
     
     
  • 8.34, Аноним (23), 16:46, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Поддержка libcap должна быть предусмотрена заранее, произвольный бинарник так не... текст свёрнут, показать
     
     
  • 9.43, Аноньимъ (ok), 20:44, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Должна Вообще ненужно его запускать ... текст свёрнут, показать
     
  • 8.35, Аноним (35), 16:55, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Год назад в polkit была уязвимость CVE-2021-4034, до сих пор название помню, т ... текст свёрнут, показать
     
     
  • 9.49, n00by (ok), 07:56, 25/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Если скорректировать причинно-следственные связи, то это ядру нужно знать, приви... текст свёрнут, показать
     
  • 4.39, Аноним (39), 19:30, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    А почему костыль то? Костыль - это обходное временное решение взамен нормального. Судо вполне самодостаточное решение, решающее свою задачу.
     
     
  • 5.40, Аноним (24), 19:44, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Так это и есть дёшево и сейчас, переложив целиком всю заботу вон на тех ребят, мол, не наши проблемы. Из убунтят уже выросли поколения хипстеров по песню "коко под рутом низя работать лучше  вот вам ALL=(ALL) NOPASSWD: ALL".
     
  • 3.25, birdie (ok), 15:57, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Не только sudo.

    /usr/sbin/pam_timestamp_check
    /usr/sbin/unix_chkpwd
    /usr/sbin/userhelper
    /usr/sbin/mount.davfs
    /usr/sbin/grub2-set-bootflag
    /usr/sbin/usernetctl
    /usr/lib/polkit-1/polkit-agent-helper-1
    /usr/bin/fusermount
    /usr/bin/at
    /usr/bin/sudo
    /usr/bin/chfn
    /usr/bin/pkexec
    /usr/bin/firejail
    /usr/bin/mount
    /usr/bin/chage
    /usr/bin/crontab
    /usr/bin/chsh
    /usr/bin/passwd
    /usr/bin/umount
    /usr/bin/gpasswd
    /usr/bin/su
    /usr/bin/newgrp
    /usr/bin/fusermount3
    /usr/libexec/dbus-1/dbus-daemon-launch-helper
    /usr/libexec/ddccontrol/ddcpci
    /usr/libexec/qemu/qemu-bridge-helper
    /usr/libexec/Xorg.wrap
    /opt/google/chrome/chrome-sandbox

     
     
  • 4.27, Аноним (23), 16:03, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    chrome-sandbox? Ему-то нафига setuid?
     
     
  • 5.30, Аноним (30), 16:13, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Очевидно, что бы повышать привилегии
     
  • 4.36, Карлос Сношайтилис (ok), 17:56, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > /opt/google/chrome/chrome-sandbox

    как иронично

     
     
  • 5.38, dannyD (?), 18:14, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    да,зачот.
     
     
  • 6.44, Аноним (44), 21:58, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Хром для изоляции запускает контейнер, а для запуска контейнера во многих дистрибутивах требуются права рута (а в тех, где не требуются, для этого используются USER_NS, которые тоже то ещё минное поле в плане безопасности). Поэтому эта песочница получает права рута через setuid, запускает контейнер, после чего сразу же лишает себя и прав рута, и возможности получить их снова. Это стандартный подход, и setuid почти всегда используется именно так: сразу после запуска получил права рута -> открыл ресурс, необходимый для работы, но доступный только руту -> лишил себя прав рута и возможности получить их снова, но ресурс сохранил -> начал работать.
     
     
  • 7.45, dannyD (?), 22:15, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    эт всё понятно, но недоверие к методам корпорации бобра у меня уже лет пятнацт.
     
  • 4.52, Аноним (52), 11:33, 25/03/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А в правельных дистрибутивах так:



    ls -l /sbin/unix_chkpwd
    -rwx--x--x 1 root root 38624 Feb 23  2020 /sbin/unix_chkpwd
    getcap /sbin/unix_chkpwd
    /sbin/unix_chkpwd = cap_dac_override+i



    /etc/security/capability.conf:



    cap_dac_override    vasya
    none  *



     
  • 3.31, lucentcode (ok), 16:13, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну, без этого костыля было бы сложно apache запускать cgi/fast_cgi от имени пользователя, а не apache/www-data. А так есть апачик, который дёргает suexec(приложуху, что имеет setuid и запускает fastcgi от нужного юзверя), и у нас апачик от одного юзера работает, а обработчики php от другого запускаются. И таких приколов, когда костыль нужен, много. Емнип, у exim бинарь с подобными правами. Запускается от одного юзера процесс, выполняется от имени другого.
     
     
  • 4.37, Аноним (37), 18:10, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Шёл 2023-й год, а люди всё еще обсуждают проблемы shared hosting.

    Ещё 10 лет назад эта проблема решалась запуском динамических php-fpm-пулов, по пулу на пользователя, и mod_fcgid (хотя в большинстве случаев - если это не невменоз с километром реврайтов в htaccess - достаточно nginx).

    Сейчас же проще просто назапускать контейнеров.

     
  • 4.41, Аноним (41), 20:31, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Что удобно, так это то, что этот же suexec позволял запустить от другого пользователя не только php. Незаменимая вещь, когда рута от сервака нет, а поадминить хочется.
     
  • 3.50, Аноним (50), 08:43, 25/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > используется только для одной программы

    Это не так. В разных дистрах по разному. Многие уже используют CAP. В многопользовательских системах subit на группу необходим для некоторых каталогов, для ACL нужен.

    SUID оказывается и CAP необходим для понижения привилегий root: https://www.opennet.ru/openforum/vsluhforumID10/5622.html#12

    По теме, в нормальных дистрах монтирование дисков в режиме записи, на рабочей системе, запрещено.

     
     
  • 4.51, Аноним (51), 11:22, 25/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >  в нормальных дистрах монтирование дисков в режиме записи, на рабочей системе, запрещено.

    Как и OverlayFS с FUSE.

     
  • 3.53, anonymous (??), 12:58, 27/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > но используется только для одной программы - sudo

    Если ты не в курсе, что chromium устанавливает setuid бинарь. И много кто ещё, тот же firejail к примеру или xorg.

     

  • 1.21, Аноним (21), 14:01, 24/03/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А в openwrt можно где-то посмотреть публикацию обновления пакетов?
     
     
  • 2.42, Аноним (41), 20:32, 24/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    У тебя на OpenWRT есть пользователи, которые могут монтировать файловые системы.
     
     
  • 3.54, Аноним (54), 15:10, 30/03/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Звучит жутковато
     

  • 1.22, YetAnotherOnanym (ok), 14:43, 24/03/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Не уберегли, не досмотрели...
    Бывает, чо...
     
  • 1.33, Аноним (-), 16:30, 24/03/2023 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.46, Аноним (46), 23:52, 24/03/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    0 дней без уязвимости в непривилегированных user namespace
     
  • 1.47, Аноним (47), 03:14, 25/03/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >принадлежащий пользователю root исполняемый файл с флагами setuid/setgid, доступным всем пользователям на запись

    Чего вы все привязались к setuid/setgid? Есть ли идиоты, у которых в системе исполняеме файлы "доступные всем пользователям на запись"?

     
     
  • 2.48, Аноним (48), 06:06, 25/03/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Идея в том, чтобы создать образ ФС с такими файлами на другой машине, где есть root, а потом скопировать на другую, примонтировать его через FUSE и дальше по инструкции в новости.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру