##
# Грязная труба (CVE-2022-0847): Практическая демонстрация эксплуатации в Docker
. Она позволяла локальному непривилегированному пользователю **перезаписывать данные в произвольных файлах, доступных только для чтения**.
Последствия серьезны: перезаписывая чувствительный файл, такой как `/etc/passwd` или SUID-бинарный файл, злоумышленник мог легко повысить свои привилегии до `root`, получив полный контроль над системой. Эта уязвимость была особенно опасна, поскольку она обходила стандартные проверки разрешений файлов — фундаментальный механизм безопасности в Linux.
## 2\. Архитектура проекта: Использование Docker для безопасной лаборатории
Этот проект использует Docker для создания безопасной, изолированной и намеренно уязвимой среды. Это позволяет любому изучать эксплойт без риска для хост-машины.
* **`Dockerfile`** : Определяет план нашего уязвимого контейнера. Он использует старый базовый образ (`debian:bullseye-20210927-slim`), известный наличием ядра, уязвимого к Dirty Pipe, и автоматизирует процесс настройки.
* **`exploit.c`** : Код на C, реализующий логику эксплойта, основанный на оригинальном доказательстве концепции Макса Келлерманна.
* **`Makefile`** : Простой makefile для компиляции кода на C в исполняемый бинарный файл внутри контейнера.
## 3\. Практическая демонстрация: От пользователя к root
Это пошаговое руководство проведет вас через сборку среды и выполнение эксплойта.
**Предварительные требования:** У вас должен быть установлен и запущен **Docker**.
Откройте терминал и клонируйте этот проект.
git clone
### Шаг 2: Сборка уязвимого Docker-образа
Используйте команду `docker build` для создания образа контейнера. `Dockerfile` обработает все зависимости и скомпилирует код эксплойта.
### Шаг 3: Запуск контейнера и выполнение эксплойта
Теперь запустите контейнер в интерактивном режиме. Флаг `--rm` гарантирует удаление контейнера при выходе, а `-it` предоставляет интерактивную оболочку.
Вы попадете в оболочку внутри контейнера под непривилегированным пользователем (`hacker@...:/$`).
Теперь выполните предварительно скомпилированный эксплойт:
# Вы сейчас непривилегированный пользователь.
# Ваше приглашение выглядит так: hacker@ :/$
**Успех!** Эксплойт перезаписывает SUID-бинарный файл, чтобы предоставить вам root-оболочку. Приглашение терминала изменится с `$` на `#`, что означает получение **прав root**.
## 4\. Ключевые выводы и уроки по безопасности
Этот проект — не просто запуск скрипта; это практическая демонстрация критически важных принципов безопасности, актуальных для моей работы как инженера по облачной безопасности:
* **Эксплойты ядра обходят безопасность на уровне приложений:** Это показывает, что даже с идеальными разрешениями файлов уязвимость ядра может подорвать всю модель безопасности операционной системы, доказывая необходимость эшелонированной защиты (defense-in-depth).
* **Безопасность контейнеров — это безопасность хоста:** Это дает осязаемое доказательство того, что контейнеры используют ядро хоста. Эксплойт ядра, выполненный внутри контейнера, может привести к полному «выходу» и компрометации хост-машины. Это подчеркивает важность использования профилей seccomp, gVisor или оптимизированных для контейнеров ОС в production.
* **Критичность управления патчами:** Это наглядный пример того, почему своевременные обновления ядра являются обязательной практикой безопасности в любой производственной среде, особенно на хост-машинах контейнеров.
* **Понимание поверхности атаки:** Создавая среду для эксплуатации, я получил более глубокое понимание того, как атакующие анализируют системы и используют, казалось бы, незначительные ошибки в управлении памятью (например, каналы и кэш страниц) для полной компрометации системы.
Этот проект и его код предназначены **только для образовательных и исследовательских целей**. Не пытайтесь использовать этот эксплойт в любой системе, на которую у вас нет явного разрешения.
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
