Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Dirty-Pipe-Exploits — Эксплойты уязвимости CVE-2022-0847(Dirty Pipe). | Kitploit
Инструменты/GitHubGitHub/gustavo-nogueira/dirty-pipe-exploits
Повышение привилегийАнализ уязвимостейЭксплуатацияОбучение и ОбразованиеЭксплуатация Бинарных ФайловЛаборатории и Практика
GitHubgustavo-nogueira/dirty-pipe-exploits

Dirty-Pipe-Exploits

Эксплойты уязвимости CVE-2022-0847(Dirty Pipe).

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий
2123 лет назадЕщё не проверено

Эксплойты CVE-2022-0847

Dirty Pipe

Что это?

Обнародованная 7 марта 2022 года Максом Келлерманом[2], CVE-2022-0847 — это уязвимость в ядре Linux (версии от 5.8 до 5.16.11), которая позволяет злоумышленникам перезаписывать файлы, доступные только для чтения или неизменяемые, и повышать свои привилегии в системе жертвы. CVE-2022-0847 получила название Dirty Pipe и имеет оценку CVSS 7,8 (считается высокой).

Как работает эксплуатация уязвимости?

Уязвимость Dirty Pipe описывается как недостаток в том, как атрибут flags структуры pipe_buffer[7] не получал надлежащей инициализации в функциях copy_page_to_iter_pipe и push_pipe в ядре Linux и, следовательно, мог содержать устаревшие значения. Один из флагов, который может быть установлен в атрибуте flags структуры pipe_buffer, — это флаг PIPE_BUF_FLAG_CAN_MERGE. Он указывает, разрешено ли слияние дополнительных данных в pipe_buffer. Таким образом, когда данные копируются в pipe_buffer, к pipe_buffer можно добавить больше данных, если скопированная страница имеет размер менее 4096 байт.

Внедрив PIPE_BUF_FLAG_CAN_MERGE в ссылку на страничный кэш, стало возможным перезаписывать данные в страничном кэше, просто записывая новые данные в специально подготовленный pipe (этот процесс будет описан в следующих абзацах). Таким образом, непривилегированный локальный пользователь может использовать эту ошибку для перезаписи/записи в страницы страничного кэша, поддерживаемые файлами, доступными только для чтения, и тем самым повысить свои привилегии в системе.

Итак, для эксплуатации уязвимости необходимо выполнить следующие шаги:

  1. Создайте pipe.
  2. Заполните pipe произвольными данными (чтобы установить флаг PIPE_BUF_FLAG_CAN_MERGE во всех записях циклического массива).
  3. Осушите pipe (оставив флаг PIPE_BUF_FLAG_CAN_MERGE установленным во всех экземплярах struct pipe_buffer циклического массива). Обычно флаг должен сбрасываться. Однако из-за уязвимости Dirty Pipe флаг остаётся установленным в 1.
  4. Передайте файл, доступный только для чтения, в pipe с помощью системного вызова splice.
  5. Измените файл, доступный только для чтения. Поскольку системный вызов splice использует метод передачи по ссылке (pass-by-reference), злоумышленник может перезаписать файл из-за флага PIPE_BUF_FLAG_CAN_MERGE.

Эксплойты

Скомпилируйте всё следующей командой:

root@kitploit:~
make

Эксплойт 1 - Перезапись файлов, доступных только для чтения

Запуск

root@kitploit:~
./exploit-1

Описание

Эксплойт 1, находящийся в файле exploit-1.c репозитория, заключается в перезаписи пароля пользователя root в файле /etc/passwd (этот файл содержит информацию об учётной записи пользователя, например зашифрованный пароль) и, наконец, в предоставлении терминала с доступом root. Для этого потребовалось:

  1. Создать резервную копию файла /etc/passwd.
  2. Подготовить pipe (как показано на этапах 1, 2 и 3, описанных выше) с флагом PIPE_BUF_FLAG_CAN_MERGE.
  3. Передать файл /etc/passwd в pipe и перезаписать содержимое этого файла новым известным паролем root (как показано на этапах 4 и 5, описанных выше).
  4. Создать сеанс root с использованием заданного нового пароля.
  5. Затем пароль восстанавливается до исходного значения из резервной копии, не оставляя следов.
  6. Наконец, всё ещё находясь в установленном root-сеансе, открывается терминал shell с доступом root.

Эксплойт 2 - Перехват (Hijacking) SUID-бинарников

Поиск SUID-бинарников

root@kitploit:~
find / -perm -4000 2>/dev/null

Запуск

root@kitploit:~
./exploit-2 <path-of-suid-binary>

Описание

Эксплойт 2, находящийся в файле exploit-2.c репозитория, заключается в перезаписи/перехвате SUID-бинарника (этот тип атаки описан в разделе 3.5.2) и, наконец, в предоставлении терминала с доступом root. Для этого потребовалось:

  1. Подготовить исполняемый код ELF (Executable and Linking Format), который будет использоваться для перезаписи SUID-бинарника, передаваемого в качестве параметра. В эксплойте используемый ELF-исполняемый файл создаёт новый исполняемый файл (/tmp/sh), который, в свою очередь, создаёт shell-терминал с доступом root.
  2. Получить путь к SUID-бинарнику в качестве параметра.
  3. Создать резервную копию полученного бинарника.
  4. Подготовить pipe (как показано на этапах 1, 2 и 3, описанных выше) с флагом PIPE_BUF_FLAG_CAN_MERGE.
  5. Передать полученный бинарник в pipe и перезаписать содержимое этого файла ELF-исполняемым файлом, упомянутым на этапе 1 (как показано на этапах 4 и 5, описанных выше).
  6. Затем полученный бинарник восстанавливается до исходного содержимого из резервной копии, не оставляя следов.
  7. Наконец, исполняемый файл /tmp/sh, упомянутый на этапе 1, запускается, открывая новый shell с доступом root.

Эксплойт 3 - Добавление ключа для удалённого доступа

Запуск

root@kitploit:~
./exploit-3

Описание

Эксплойт 3, находящийся в файле exploit-3.c репозитория, использует те же шаги, что и эксплойт 1, для получения доступа к root-шеллу. Разница в том, что эксплойт 3 после получения доступа к root-шеллу загружает открытый SSH-ключ (Secure Shell) злоумышленника в файл /root/.ssh/authorized_keys и создаёт TCP-туннель (Transmission Control Protocol) для удалённого доступа к SSH с использованием платформы Ngrok.

Ссылки

[1] AHMED, Alexis. Privilege Escalation Techniques: Learn the art of exploiting Windows and Linux systems. Birmingham: Packt Publishing, октябрь 2021.

[2] KELLERMANN, Max. The Dirty Pipe Vulnerability. Доступно на: https://dirtypipe.cm4all.com/. Дата обращения: 23 июля 2022.

[3] Exploit Database. Доступно на: https://www.exploit-db.com/. Дата обращения: 03 августа 2022.

[4] Traitor: Automatically exploit low-hanging fruit to pop a root shell. Доступно на: https://github.com/liamg/traitor. Дата обращения: 03 августа 2022.

[5] PayloadsAllTheThings. Linux - Privilege Escalation. Доступно на: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Linux%20-%20Privilege%20Escalation.md#cve-2022-0847-dirtypipe. Дата обращения: 03 августа 2022.

[6] Репозиторий ядра Linux - Struct pipe_inode_info. Доступно на: https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L76. Дата обращения: 03 августа 2022.

[7] Репозиторий ядра Linux - Struct pipe_buffer. Доступно на: https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L26-L32. Дата обращения: 03 августа 2022.

[8] ARNTZ, Pieter. Linux "Dirty Pipe" vulnerability gives unprivileged users root access. Malwarebytes Lab. Доступно на: https://www.malwarebytes.com/blog/news/2022/03/linux-dirty-pipe-vulnerability-gives-unprivileged-users-root-access. Дата обращения: 03 августа 2022.

[9] Picus Security. Linux “Dirty Pipe” CVE-2022-0847 Vulnerability Exploitation Explained. Доступно на: https://www.picussecurity.com/resource/linux-dirty-pipe-cve-2022-0847-vulnerability-exploitation-explained. Дата обращения: 03 августа 2022.

[10] Exploit Database - Local Privilege Escalation (Dirty Pipe). Доступно на: https://www.exploit-db.com/exploits/50808. Дата обращения: 03 августа 2022.

Скачать инструмент