
Эксплойты уязвимости 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 (этот процесс будет описан в следующих абзацах). Таким образом, непривилегированный локальный пользователь может использовать эту ошибку для перезаписи/записи в страницы страничного кэша, поддерживаемые файлами, доступными только для чтения, и тем самым повысить свои привилегии в системе.
Итак, для эксплуатации уязвимости необходимо выполнить следующие шаги:
Скомпилируйте всё следующей командой:
make
./exploit-1
Эксплойт 1, находящийся в файле exploit-1.c репозитория, заключается в перезаписи пароля пользователя root в файле /etc/passwd (этот файл содержит информацию об учётной записи пользователя, например зашифрованный пароль) и, наконец, в предоставлении терминала с доступом root. Для этого потребовалось:
/etc/passwd./etc/passwd в pipe и перезаписать содержимое этого файла новым известным паролем root (как показано на этапах 4 и 5, описанных выше).find / -perm -4000 2>/dev/null
./exploit-2 <path-of-suid-binary>
Эксплойт 2, находящийся в файле exploit-2.c репозитория, заключается в перезаписи/перехвате SUID-бинарника (этот тип атаки описан в разделе 3.5.2) и, наконец, в предоставлении терминала с доступом root. Для этого потребовалось:
/tmp/sh), который, в свою очередь, создаёт shell-терминал с доступом root./tmp/sh, упомянутый на этапе 1, запускается, открывая новый shell с доступом root../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.