
Анализ эксплуатации и смягчения последствий переполнения буфера в куче CVE-2021-3156 в sudo
CVE-2021-3156, известный как Baron Samedit, представляет собой уязвимость переполнения кучи в программе sudo. Она позволяет любому непривилегированному локальному пользователю получить привилегии root на уязвимых системах без аутентификации.
Этот проект документирует полную эксплуатацию и смягчение этой уязвимости в рамках курса Уязвимости программного обеспечения: эксплуатация и смягчение в Университете Люксембурга.
OS: Ubuntu 20.04.1
sudo version: 1.8.31-1ubuntu1 (уязвимая)
libc version: 2.31
User: Учётная запись без root
Для воспроизведения уязвимого состояния:
sudo apt install sudo=1.8.31-1ubuntu1
Уязвимость срабатывает, когда sudo выполняется в режиме sudoedit с тщательно подобранными аргументами командной строки, которые переполняют внутренние буферы кучи.
Эксплойт использует четыре критических параметра, настроенных с помощью анализа памяти:
exploit_launcher.c — Основной эксплойтЗапускает уязвимость через 5 шагов:
LC_ALL для управления раскладкой памяти кучиsudoedit с вредоносными аргументами и окружениемexploit_payload.c — Вредоносная нагрузкаВыполняется автоматически при успешном срабатывании эксплойта через функцию _init:
0 (root)$ make
$ ./exploit_it
[!] CVE-2021-3156 Exploit
[+] Target: Ubuntu 20.04.1 (sudo 1.8.31, libc-2.31)
[+] Parameters: A=56, B=54, Nulls=63, LC_ALL=212
[+] Launching exploit...
[+] Exploit successful. Root privileges obtained.
# whoami
root
✅ Успешно повышены привилегии от непривилегированного пользователя до root.
Обновите sudo до исправленной версии:
sudo apt install sudo=1.8.31-1ubuntu1.5
После обновления тот же эксплойт не выполнился, и привилегии root не были получены — что подтверждает эффективность исправления.
Ключевой вывод: поддержание системных утилит, таких как
sudo, в актуальном состоянии критически важно для предотвращения атак повышения привилегий.
├── exploit_launcher.c # Основной эксплойт, запускающий переполнение кучи
├── exploit_payload.c # Вредоносная нагрузка, запускающая оболочку root
├── libnss_X/ # Вредоносная библиотека, загружаемая во время эксплуатации
└── Makefile # Конфигурация сборки
# Сборка
make
# Запуск эксплойта
./exploit_it
| Свойство | Детали |
|---|
| Идентификатор CVE | CVE-2021-3156 |
| Прозвище | Baron Samedit |
| Тип | Переполнение кучи |
| Компонент | sudo (режим sudoedit) |
| Влияние | Локальное повышение привилегий до root |
| Затронутые версии | sudo ≤ 1.8.31 (Ubuntu), ≤ 1.9.5p1 (другие) |
| Исправленная версия | sudo 1.8.31-1ubuntu1.5 |
| Оценка CVSS | 7.8 (Высокий) |
| Параметр | Размер | Назначение |
|---|
A | 56 байт | Переполнить начальный буфер |
B | 54 байта | Переполнить второй блок кучи |
Nulls | 63 байта | Выравнивание памяти структуры |
LC_ALL | 212 байт | Управление раскладкой кучи через переменную окружения |