
Оружиезированный локальный эксплойт повышения привилегий для CVE-2026-7867 в udisks2, использующий подмену монтирования as-user для обхода PolicyKit и получения root-оболочки.
as-user → обход авторизации → монтирование в root-контексте → LPECVE-2026-7867 — это локальная уязвимость повышения привилегий в udisks2, связанная с D-Bus-методом Filesystem.Mount, опцией as-user, потоками монтирования, управляемыми через fstab, и ошибочной обработкой авторизации.
Этот приватный репозиторий содержит технические исследовательские заметки и PoC-скрипты, использованные для проверки проблемы в контролируемой лабораторной среде.
Уязвимость была обнаружена, и о ней было сообщено:
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
Проблеме был присвоен идентификатор:
CVE-2026-7867
Уязвимость вызвана ошибочными доверительными отношениями между реальным UID вызывающего D-Bus процесса и вычисляемым/эффективным UID, формируемым опцией монтирования as-user.
В уязвимых сценариях непривилегированный локальный пользователь может повлиять на путь выполнения монтирования таким образом, что монтирование файловой системы выполняется в привилегированном/root-контексте без ожидаемого поведения авторизации PolicyKit.
Суть ошибки не просто в «контролируемых пользователем опциях монтирования».
Настоящая проблема в следующем:
udisks2не может последовательно различать исходную идентичность вызывающего процесса и вычисляемую идентичностьas-userпри авторизации и выполнении монтирования через fstab.
Уязвимая логика связана с путём обработки монтирования через fstab внутри udisks2, особенно когда запрос на монтирование включает:
Filesystem.Mount
as-user
x-udisks-auth
user
users
Критичные с точки зрения безопасности области:
D-Bus caller identity
↓
as-user option handling
↓
fstab authorization logic
↓
PolicyKit decision flow
↓
root-context mount execution
┌─────────────────────────────┐
│ Unprivileged Local User │
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ with as-user influence
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ privileged system daemon │
└──────────────┬──────────────┘
│
│ fstab logic evaluates
│ user/auth options
▼
┌─────────────────────────────┐
│ Authorization Gap │
│ mount_other_user not │
│ enforced in skipped path │
└──────────────┬──────────────┘
│
│ root-context branch reached
▼
┌─────────────────────────────┐
│ Filesystem Mounted │
│ without expected auth flow │
└──────────────┬──────────────┘
│
│ impact depends on mount flags
▼
┌─────────────────────────────┐
│ Local Privilege Escalation │
│ controlled lab validation │
└─────────────────────────────┘
Уязвимое поведение возникает из-за ошибки путаницы идентичности.
В системе существует несколько концепций идентичности:
real D-Bus caller UID
computed as-user UID
effective mount UID
udisksd daemon privilege context
Уязвимый поток не обеспечивает согласованное соблюдение этих идентичностей.
В частности:
mount_other_user может стать истинным, потому что используется as-userx-udisks-auth, user или users, могут влиять на путь авторизацииmount_other_user надёжно не применяется вне этого блокаРезультатом является обход локальной границы привилегий.
x-udisks-authОпция x-udisks-auth должна принудительно запускать административный поток авторизации PolicyKit.
Ожидаемое поведение:
mount request
↓
attempt mount as caller
↓
permission/auth failure
↓
PolicyKit filesystem-fstab check
↓
admin approval
↓
mount as authorized privileged action
Уязвимое поведение:
mount request with as-user influence
↓
computed identity affects execution
↓
mount succeeds too early
↓
PolicyKit auth path is not reached as expected
↓
privileged mount state is achieved
Это делает модель безопасности вокруг x-udisks-auth ненадёжной в уязвимом пути.
Ожидаемая модель:
Unprivileged user
↓
D-Bus mount request
↓
PolicyKit / fstab authorization
↓
restricted mount behavior
Нарушенная модель:
Unprivileged user
↓
D-Bus mount request with as-user spoofing
↓
authorization logic mismatch
↓
root-context mount execution
Ошибка особенно серьезна, потому что затронутый сервис работает с повышенными привилегиями.
Успешная эксплуатация может позволить локальному непривилегированному пользователю монтировать файловую систему через udisks2 в пути выполнения с root-контекстом без ожидаемого запроса авторизации.
В зависимости от файловой системы и флагов монтирования последствия могут включать:
Это локальная уязвимость.
Соответствующие условия включают:
.
├── README.md
├── disk2root.sh ← main exploit (self-contained LPE)
└── poc/
├── setup_lpe_env.sh ← lab environment setup
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.shАвтономный «боевой» эксплойт. Собирает собственный SUID-payload для root, создаёт подготовленный образ диска, монтирует его через обход polkit с помощью as-user=root и открывает root-оболочку.
Вариант 1 — запуск от root (работает везде, включая SSH):
./disk2root.sh
Скрипт автоматически:
uid=0 mode=4755 через debugfsx-udisks-authsuFilesystem.Mount с as-user=root (обход polkit)Чтобы указать, от имени какого пользователя выполнять повышение привилегий:
./disk2root.sh testuser
Если пользователь не указан, скрипт выбирает первого обычного пользователя в системе или создаёт временного.
Вариант 2 — запуск от непривилегированного пользователя (рабочий стол / активная сессия):
./disk2root.sh
В системах с активной polkit-сессией (вход на рабочий стол, GNOME/KDE) скрипт полностью автономен — он создаёт собственное loop-устройство через udisksctl или D-Bus LoopSetup, монтирует через as-user=root и повышает привилегии без какой-либо предварительной настройки.
Вариант 3 — запуск от непривилегированного пользователя (SSH, после подготовки):
Если среда уже была подготовлена (например, запуском poc/setup_lpe_env.sh от root или предыдущим запуском ./disk2root.sh от root), любой непривилегированный пользователь может повторить эксплуатацию:
./disk2root.sh
Скрипт автоматически обнаруживает уязвимые записи fstab и использует их.
./disk2root.sh --cleanup
Удаляет все артефакты: запись fstab, loop-устройство, точку монтирования, временного пользователя.
При запуске от непривилегированного пользователя скрипт последовательно перебирает несколько путей:
[A] Self-contained
build payload → create ext4 image → debugfs inject SUID binary
→ loop-setup (python3 GIO / udisksctl) → mount as-user=root
✓ works on desktop sessions
[B] Fstab fallback
scan /etc/fstab for x-udisks-auth / user / users entries
→ mount as-user=root → find SUID binary on mounted fs
✓ works on SSH when environment is prepared
╔═════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ udisks2 as-user polkit bypass → LPE root shell ║
╚═════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — exploiting...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
mounted: /mnt/disk2root
nosuid: not set
suid: pwn (4755 root:root)
╔═════════════════════════════════════════════════════╗
║ dropping into root shell — type 'exit' to return ║
╚═════════════════════════════════════════════════════════╝
[+] root shell — uid=0 euid=0
root@target:/tmp#
poc/)Отдельные проверочные скрипты, использованные в ходе исследования. Это строительные блоки, которые привели к созданию disk2root.sh.
1. Run poc/setup_lpe_env.sh as root
2. su - testuser
3. Run poc/f2_mount_as_user_bypass.sh
4. Run poc/f2_final.sh for full validation
5. Run poc/cleanup_lpe_env.sh as root
Или просто используйте disk2root.sh, который объединяет всё вышеперечисленное.
Примитив, продемонстрированный этим исследованием:
as-user option spoofing inside privileged mount orchestration
Критический переход:
unprivileged D-Bus caller
↓
spoofed/computed mount identity
↓
authorization path confusion
↓
root-context mount execution
Именно поэтому проблема квалифицируется как уязвимость локального повышения привилегий.
udisks2 обычно рассматривается как доверенный привилегированный демон управления хранилищами.
Ошибка в этом слое имеет высокое влияние, поскольку он находится между:
desktop/session users
D-Bus method calls
PolicyKit authorization
filesystem mount operations
root daemon privileges
Ошибка в обработке идентичности здесь может напрямую повлиять на локальные границы привилегий.
Защитники могут отслеживать подозрительную активность монтирования udisks2 с участием as-user.
Полезные источники телеметрии:
udisksd logs
D-Bus method calls
PolicyKit logs
mount table changes
/proc/mounts
/etc/fstab
journalctl
Полезные команды:
findmnt
mount
cat /proc/mounts
journalctl -u udisks2
journalctl | grep -i udisks
journalctl | grep -i polkit
Подозрительные признаки:
non-root user triggering Filesystem.Mount
as-user=root usage
unexpected mount without PolicyKit prompt
mounts lacking nosuid/noexec/nodev
setuid execution from recently mounted filesystems
unexpected loop device mounts
udisks2Примените исправление от вендора, как только оно станет доступно.
Планируемый релиз с исправлением:
udisks 2.11.2
Проверьте записи, использующие:
x-udisks-auth
user
users
Особое внимание уделите файловым системам, которые могут содержать исполняемый или setuid-контент.
Поскольку это локальная уязвимость, ограничение недоверенного локального доступа снижает уровень подверженности риску.
Отслеживайте неожиданные операции монтирования через:
udisksd
особенно когда они инициируются не-root пользователями.
Там, где это применимо, используйте:
nosuid
noexec
nodev
Эти флаги могут снизить последствия после монтирования.
Пересмотрите правила PolicyKit, связанные с действиями монтирования udisks.
Убедитесь, что непривилегированные пользователи не могут инициировать чувствительные пути монтирования без явной авторизации.
Надёжное исправление должно гарантировать, что:
as-user не заменяет идентичность вызывающего при авторизацииmount_other_user всегда запускает надлежащие проверки PolicyKitx-udisks-auth последовательно обеспечивает аутентификациюПосле снятия эмбарго этот репозиторий может быть преобразован в публичный исследовательский репозиторий со следующей структурой:
docs/
├── technical-analysis.md
├── root-cause.md
├── lab-setup.md
├── exploit-flow.md
├── detection.md
└── mitigation.md
Рекомендуемые дополнения для публичной версии:
Этот репозиторий предназначен только для авторизованных исследований безопасности, координации с вендором и защитной проверки.
PoC-скрипты предназначены для изолированных тестовых сред.
Не запускайте эти скрипты на системах, которые вам не принадлежат или на тестирование которых у вас нет явного разрешения.
Авторы не несут ответственности за неправомерное использование этого исследования.
CVE-2026-7867
Исследование локального повышения привилегий в udisks2
| Поле | Значение |
|---|
| CVE | CVE-2026-7867 |
| Продукт | udisks2 |
| Компонент | Filesystem.Mount |
| Тип атаки | Локальное повышение привилегий |
| Примитив | подмена as-user |
| Граница безопасности | идентичность вызывающего D-Bus → привилегированное выполнение монтирования |
| Уровень авторизации | авторизация монтирования PolicyKit / fstab |
| Вендор | Red Hat / апстрим udisks |
| Статус | Исправление в работе / скоординированное раскрытие |
| Планируемый релиз с исправлением | udisks 2.11.2 |
| Условие | Требуется |
|---|
| Локальный доступ пользователя | Да |
Уязвимая версия udisks2 | Да |
Наличие функциональности as-user | Да |
| Подходящая цель монтирования через fstab | Да |
| Уязвимый путь авторизации | Да |
| Удалённый доступ | Нет |
| Инструмент | Назначение | Требуется |
|---|
busctl | D-Bus-вызов монтирования | Да |
gcc | компиляция SUID-payload | Да (запасной вариант — копия bash) |
mke2fs | создание ext4-образа | Да (автономный режим) |
debugfs | внедрение бинарника с uid=0 | Да (автономный режим) |
python3-gi | D-Bus LoopSetup с передачей fd | Опционально (режим рабочего стола) |
udisksctl | настройка loop-устройства | Опционально (режим рабочего стола) |
| Скрипт | Назначение |
|---|
setup_lpe_env.sh | Подготовка лабораторной среды (loop-устройство, fstab, тестовый пользователь) |
f2_mount_as_user_bypass.sh | Проверка обхода Filesystem.Mount с as-user=root |
f2_check_nosuid.sh | Проверка флагов nosuid/noexec/nodev при обходном монтировании |
f2_suid_test.sh | Тестирование выполнения SUID-бинарника на смонтированной файловой системе |
f2_final.sh | Полный PoC: подготовка → обход → проверка euid=0 |
cleanup_lpe_env.sh | Восстановление тестовой среды |
| Дата | Событие |
|---|
2026-04-21 | Отчёт отправлен в Red Hat Product Security |
2026-04-21 | Red Hat подтвердила получение |
2026-04-28 | Вендор подтвердил ошибочную логику |
2026-04-28 | Вендор запросил PoC-скрипты |
2026-04-30 | Вендор запросил выделение CVE |
2026-04-30 | PoC-скрипты отправлены вендору |
2026-05-03 | Передан первоначальный патч вендора |
2026-05-05 | Передан обновлённый патч вендора |
2026-05-05 | CVE-2026-7867 зарезервирован |
2026-05-05 | Тикет помечен как решённый |
2026-05-07 | Вендор сообщил, что исправление планируется в udisks 2.11.2 |
| Исследователь | GitHub | Роль |
|---|---|---|
| Azizcan Daştan | azqzazq1 | Обнаружение, анализ, разработка PoC, координация с вендором |
| Özlem Ozan | oz7oz7 | Совместное исследование и указание в раскрытии |