CVE-2021-3156 (Sudo Baron Samedit)
Этот репозиторий содержит эксплойт для CVE-2021-3156, нацеленный на Linux x64. Подробный разбор доступен по ссылке https://datafarm-cybersecurity.medium.com/exploit-writeup-for-cve-2021-3156-sudo-baron-samedit-7a9a4282cb31
Благодарность Браону Самедиту из Qualys за оригинальный отчёт.
Файлы
Эксплойт для glibc с поддержкой tcache
- exploit_nss.py автоматически определяет все требования и количество записей в /etc/nsswitch.conf
- exploit_nss_manual.py упрощённая версия exploit_nss.py для лучшего понимания эксплойта
- exploit_timestamp_race.c перезаписывает def_timestamp и использует состояние гонки для изменения /etc/passwd
Эксплойт для glibc без поддержки tcache
- exploit_defaults_mailer.py эксплойт перезаписывает struct defaults для изменения пути к бинарнику почтовой программы. Требует sudo, скомпилированный без disable-root-mailer, например CentOS 6 и 7.
- exploit_userspec.py эксплойт перезаписывает struct userspec для обхода аутентификации и добавления нового пользователя в /etc/passwd. Поддерживает только версии sudo 1.8.9-1.8.23.
- exploit_cent7_userspec.py упрощённая версия exploit_userspec.py для понимания, но нацелена только на CentOS 7 с конфигурацией по умолчанию
- exploit_nss_d9.py перезаписывает struct service_user на Debian 9, но поддерживает только /etc/nsswith.conf по умолчанию
- exploit_nss_u16.py перезаписывает struct service_user на Ubuntu 16.04, но поддерживает только /etc/nsswith.conf по умолчанию
- exploit_nss_u14.py перезаписывает struct service_user на Ubuntu 14.04, но поддерживает только /etc/nsswith.conf по умолчанию
Прочее
- asm/ библиотека tinyelf и исполняемый файл для встраивания в эксплойт на Python
- gdb/ скрипты, используемые для отладки кучи sudo
Выбор эксплойта
Для дистрибутивов Linux, где glibc имеет поддержку tcache и она включена (CentOS 8, Ubuntu >= 17.10, Debian 10):
- сначала попробуйте exploit_nss.py
- Если ошибка не связана с tcache в glibc, можно попробовать exploit_timestamp_race.c
Для дистрибутивов Linux, где glibc не поддерживает tcache:
- если цель — Debian 9, Ubuntu 16.04 или Ubuntu 14.04, сначала попробуйте exploit_nss_xxx.py для конкретной версии
- далее попробуйте exploit_defaults_mailer.py. Если вы знаете, что целевой sudo скомпилирован с --disable-root-mailer, этот эксплойт можно пропустить. Эксплойт пытается проверить флаг root mailer в бинарнике sudo. Но права sudo в некоторых дистрибутивах Linux — 4711 (-rws--x--x), что невозможно проверить на целевой системе. (Известно, что работает на CentOS 6 и 7)
- в последнюю очередь попробуйте exploit_userspec.py