CVE-2021-3156 — Baron Samedit
Переполнение буфера в куче в sudo → локальное повышение привилегий
Департамент кибербезопасности ITSOLERA | Стажировка Red Team 2026
██████╗ █████╗ ██████╗ ██████╗ ███╗ ██╗ ███████╗ █████╗ ███╗ ███╗███████╗██████╗ ██╗████████╗
██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗ ██║ ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
██████╔╝███████║██████╔╝██║ ██║██╔██╗ ██║ ███████╗███████║██╔████╔██║█████╗ ██║ ██║██║ ██║
██╔══██╗██╔══██║██╔══██╗██║ ██║██║╚██╗██║ ╚════██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ██║██║ ██║
██████╔╝██║ ██║██║ ██║╚██████╔╝██║ ╚████║ ███████║██║ ██║██║ ╚═╝ ██║███████╗██████╔╝██║ ██║
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═╝ ╚═╝
⚠️ ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ / ИЗОЛИРОВАННЫХ ЛАБОРАТОРНЫХ ЦЕЛЕЙ
Все тесты должны выполняться исключительно внутри Docker-контейнера лаборатории.
Никогда не запускайте против реальных, производственных или общих систем.
Содержание
- Обзор CVE
- Что делает этот CVE особенным
- Структура проекта
- Результаты команды
- Быстрый старт
- Как работает эксплойт
- Канареечный тест уязвимости
- Использование exploit.py
- Сброс и снимок лаборатории
- Сравнение исправленной и уязвимой версий
- Ссылки
Обзор CVE
| Свойство | Значение |
|---|
| Идентификатор CVE | CVE-2021-3156 |
| Псевдоним | Baron Samedit |
| Тип | Переполнение буфера в куче → локальное повышение привилегий |
| Компонент | sudo — утилита привилегий Linux (set_cmnd() в src/sudo.c) |
| Оценка CVSS v3 | 7.8 (высокая) |
| Вектор | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Уязвимые версии | sudo 1.8.2 – 1.8.31p2 и 1.9.0 – 1.9.5p1 |
| Исправленные версии | sudo 1.9.5p2 (ветка 1.9) / sudo 1.8.32 (ветка 1.8) |
| Целевая версия в лаборатории | sudo 1.8.31 на Ubuntu 20.04 |
| Бюллетень / Рекомендации | SA: https://www.sudo.ws/security/advisories/unescape_overflow/ |
| Обнаружено | Qualys Research Team |
| Дата раскрытия | 2021-01-26 |
| В дикой природе с (код) | ~2011-07-09 (sudo 1.8.2) — ~10 лет без обнаружения |
| Требуется аутентификация | Только локальный пользователь — права sudo НЕ нужны |
Что делает этот CVE особенным
| Свойство | CVE-2021-3156 | Типичная LPE sudo |
|---|
| Требует записи в sudoers | ❌ Нет | ✅ Да |
| Требует членства в группе sudo | ❌ Нет | ✅ Да |
| Требует предварительного доступа к sudo | ❌ Нет | ✅ Да |
| Работает с только что созданной учётной записью | ✅ Да | ❌ Нет |
| Использует систему разрешений | ❌ Полностью обходит | ✅ Злоупотребляет ей |
| Поверхность атаки | Парсер аргументов (до аутентификации) | Проверка разрешений |
Ключевой вывод: переполнение происходит в set_cmnd() — функции, которая
разбирает аргументы — и выполняется до того, как sudo вообще обращается к /etc/sudoers.
Учётная запись, созданная 10 секунд назад и не имеющая никаких прав, может использовать эту уязвимость.
Структура проекта
CVE-2021-3156-Project/
│
├── README.md ← you are here
│
├── lab/ ← Member 1: Lab Environment
│ ├── Dockerfile ← Ubuntu 20.04 + sudo 1.8.31 (pinned)
│ ├── docker-compose.yml ← vulnerable target + patched reference
│ ├── evidence_helper.sh ← pre/post-exploit state capture
│ ├── SETUP.md ← step-by-step VM/Docker guide
│ └── config_notes.md ← CVE conditions & container details
│
├── exploit/ ← Member 2: Exploit Development
│ ├── exploit.py ← Python LPE framework + canary test
│ └── payloads.txt ← heap overflow research notes
│
├── docs/ ← Member 3: Research & Documentation
│ ├── root_cause_analysis.md ← set_cmnd() deep dive + off-by-one
│ ├── references.md ← all sources, PoCs, CWE mapping
│ └── mitigation.md ← sudo upgrade + hardening checklist
│
├── proof/ ← Member 4: Evidence Collection
│ ├── screenshots/ ← exploitation screenshots
│ └── terminal_logs.txt ← command output template + logs
│
└── report/
└── CVE-2021-3156_Report.docx ← Member 4: Final professional report
Результаты команды
Участник 1 — Лабораторная среда и проверка CVE
| Файл | Описание |
|---|
lab/Dockerfile | Ubuntu 20.04 с зафиксированным sudo 1.8.31 (уязвимый); установлен Python 3; учётная запись labuser БЕЗ доступа к sudo |
lab/docker-compose.yml | Оркестрация уязвимой цели + эталонного контейнера с исправленным Ubuntu 22.04 |
lab/evidence_helper.sh | Bash-скрипт для сбора состояния системы (пользователь, версия sudo, canary) до и после эксплойта |
lab/SETUP.md | Пошаговая инструкция: сборка → запуск → вход → проверка версии sudo → запуск canary → снимок |
lab/config_notes.md | Объясняет, почему не требуется неправильная конфигурация, настройки безопасности Docker, учётные данные |
Участник 2 — Разработка эксплойта (PoC-скрипт)
| Файл | Описание |
|---|
exploit/exploit.py | Полный фреймворк на Python: check_platform(), check_sudo_version(), run_canary_test(), get_system_info() + три TODO-заглушки для эксплойта (select_heap_strategy, build_overflow_argument, trigger_overflow_and_escalate) с подробными ссылками на PoC blasty/worawit |
exploit/payloads.txt | Концепции переполнения кучи, эквивалент COMPRESSION_TRANSFORM (структура аргументов), три стратегии кучи, шаблон журнала неудачных попыток, сигнатуры обнаружения |
Примечание: рабочий код эксплойта для ядра/кучи не включён в соответствии с этическими нормами.
Заглушки TODO в exploit.py ссылаются на https://github.com/blasty/CVE-2021-3156
и https://github.com/worawit/CVE-2021-3156 как на авторитетные публичные PoC,
которые ваша команда может изучить и интегрировать.
Участник 3 — Анализ первопричины и исследование
| Файл | Описание |
|---|
docs/root_cause_analysis.md | Подробно: несоответствие размера и копирования в set_cmnd(), ошибка off-by-one с примерами кода, diff патча, цепочка эксплойта, разбор метрики CVSS 7.8 по пунктам, хронология 10 лет, таблица влияния на дистрибутивы |
docs/references.md | Рекомендации Qualys, MITRE, NVD, проект sudo, PoC blasty, PoC worawit, ExploitDB, GTFOBins, сопоставление CWE |
docs/mitigation.md | apt-get install --only-upgrade sudo, проверочный canary, усиление AppArmor, мониторинг auditd, таблица усиления защиты |
Участник 4 — Сбор доказательств, отчётность и интеграция
| Файл | Описание |
|---|
proof/terminal_logs.txt | Шаблон сбора доказательств (заполните фактическим выводом лаборатории) |
proof/screenshots/ | Каталог для 7 обязательных скриншотов |
report/CVE-2021-3156_Report.docx | Профессиональный отчёт из 12 разделов: титульный лист, исполнительное резюме, описание CVE, анализ первопричины, разбор CVSS, шаги эксплуатации, объяснение кода, чек-лист доказательств, меры по смягчению, хронология, ссылки, отказ от ответственности |
Быстрый старт
1. Сборка и запуск лаборатории
cd CVE-2021-3156-Project/lab/
# Build the vulnerable image (downloads Ubuntu 20.04, pins sudo 1.8.31)
docker compose build
# Start both containers
docker compose up -d
# Confirm containers are running
docker compose ps
Ожидаемый результат:
NAME STATUS
baron_samedit_target running
baron_samedit_patched running
2. Вход в уязвимый контейнер