
Linux LPE через snap-confine + systemd-tmpfiles, подробно объяснено
Дисклеймер: Этот репозиторий предназначен только для образовательных целей. Весь контент основан на оригинальном бюллетене безопасности, опубликованном Qualys 17 марта 2026 года. Уязвимость уже исправлена — всегда убедитесь, что ваши системы обновлены. Не используйте этот материал против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения.
CVE-2026-3888 — это уязвимость повышения привилегий на локальной системе (LPE), затрагивающая стандартную установку Ubuntu Desktop >= 24.04. Она была обнаружена и публично раскрыта компанией Qualys в марте 2026 года.
Что делает эту уязвимость особенно интересной — как отметили сами специалисты Qualys — так это то, что она не возникает из-за одного ошибочного компонента. Вместо этого она появляется в результате взаимодействия двух по отдельности безопасных программ:
| Компонент | Роль |
|---|---|
snap-confine | SUID-root бинарный файл, который создаёт пространство имён монтирования (песочницу) для snap-приложений |
systemd-tmpfiles | Демон, работающий от root, который периодически очищает устаревшие файлы в /tmp |
Ни одна из программ сама по себе не сломана. Вместе они создают эксплуатируемое окно.
Оригинальный бюллетень: https://cdn2.qualys.com/advisory/2026/03/17/snap-confine-systemd-tmpfiles.txt
Авторство: Qualys Security Research Team
cve-2026-3888/
├── README.md ← Вы здесь
├── analysis/
│ ├── 01-vulnerability.md ← Глубокое погружение в уязвимость
│ ├── 02-race-condition.md ← Как работает гонка TOCTOU
│ ├── 03-backpressure-technique.md ← Трюк с обратным давлением AF/UNIX
│ ├── 04-exploitation-steps.md ← Полное пошаговое руководство
│ └── 05-mitigations.md ← Что было исправлено и как
└── src/
├── firefox_2404.c ← Вспомогательный код для гонки (с комментариями)
└── librootshell.c ← Шеллкод динамического загрузчика (с комментариями)
| Версия Ubuntu | Возраст очистки | Время ожидания (реальное) |
|---|---|---|
| 24.04 LTS | 30 дней | 30 дней |
| > 24.04 | 10 дней | 10 дней |
Исправлено в: snapd 2.74.2
/tmp/.snap как root:root 0755/tmp активным периодическими записями, но позвольте /tmp/.snap устаретьsystemd-tmpfiles удаляет устаревший /tmp/.snap — поскольку /tmp доступен для записи всем, атакующий воссоздаёт .snap и становится его владельцемsnap-confinesnap-confine монтирует через bind библиотеки, принадлежащие атакующему, от имени root в пространство имёнld-linux-x86-64.so.2 шеллкодом — любой SUID-бинарный файл, выполненный в этом пространстве имён, запускает наш код от имени root/var/snap/firefox/common/