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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2021-3156-Project — Учебная лабораторная среда для CVE-2021-3156 (Baron Samedit) с уязвимой целью sudo в Docker, заготовкой эксплойта, canary-тестом, анализом первопричины и сравнением с пропатченной версией. | Kitploit
Инструменты/GitHubGitHub/shams-ul-mehmood/cve-2021-3156-project
Повышение привилегийАнализ уязвимостейЭксплуатацияОбучение и ОбразованиеЭксплуатация Бинарных ФайловЛаборатории и Практика
GitHubshams-ul-mehmood/cve-2021-3156-project

CVE-2021-3156-Project

Учебная лабораторная среда для CVE-2021-3156 (Baron Samedit) с уязвимой целью sudo в Docker, заготовкой эксплойта, canary-тестом, анализом первопричины и сравнением с пропатченной версией.

Популярное

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

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

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

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

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

CVE-2021-3156 — Baron Samedit

Переполнение буфера в куче в sudo → локальное повышение привилегий

Департамент кибербезопасности ITSOLERA | Стажировка Red Team 2026


root@kitploit:~
  ██████╗  █████╗ ██████╗  ██████╗ ███╗   ██╗    ███████╗ █████╗ ███╗   ███╗███████╗██████╗ ██╗████████╗
  ██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗  ██║    ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
  ██████╔╝███████║██████╔╝██║   ██║██╔██╗ ██║    ███████╗███████║██╔████╔██║█████╗  ██║  ██║██║   ██║
  ██╔══██╗██╔══██║██╔══██╗██║   ██║██║╚██╗██║    ╚════██║██╔══██║██║╚██╔╝██║██╔══╝  ██║  ██║██║   ██║
  ██████╔╝██║  ██║██║  ██║╚██████╔╝██║ ╚████║    ███████║██║  ██║██║ ╚═╝ ██║███████╗██████╔╝██║   ██║
  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝    ╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚══════╝╚═════╝ ╚═╝   ╚═╝

⚠️ ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ / ИЗОЛИРОВАННЫХ ЛАБОРАТОРНЫХ ЦЕЛЕЙ Все тесты должны выполняться исключительно внутри Docker-контейнера лаборатории. Никогда не запускайте против реальных, производственных или общих систем.


Содержание

  1. Обзор CVE
  2. Что делает этот CVE особенным
  3. Структура проекта
  4. Результаты команды
  5. Быстрый старт
  6. Как работает эксплойт
  7. Канареечный тест уязвимости
  8. Использование exploit.py
  9. Сброс и снимок лаборатории
  10. Сравнение исправленной и уязвимой версий
  11. Ссылки

Обзор CVE


Что делает этот CVE особенным

Ключевой вывод: переполнение происходит в set_cmnd() — функции, которая разбирает аргументы — и выполняется до того, как sudo вообще обращается к /etc/sudoers. Учётная запись, созданная 10 секунд назад и не имеющая никаких прав, может использовать эту уязвимость.


Структура проекта

root@kitploit:~
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

Участник 2 — Разработка эксплойта (PoC-скрипт)

Примечание: рабочий код эксплойта для ядра/кучи не включён в соответствии с этическими нормами. Заглушки TODO в exploit.py ссылаются на https://github.com/blasty/CVE-2021-3156 и https://github.com/worawit/CVE-2021-3156 как на авторитетные публичные PoC, которые ваша команда может изучить и интегрировать.

Участник 3 — Анализ первопричины и исследование

ФайлОписание

Участник 4 — Сбор доказательств, отчётность и интеграция

ФайлОписание
proof/terminal_logs.txtШаблон сбора доказательств (заполните фактическим выводом лаборатории)
proof/screenshots/Каталог для 7 обязательных скриншотов
report/CVE-2021-3156_Report.docxПрофессиональный отчёт из 12 разделов: титульный лист, исполнительное резюме, описание CVE, анализ первопричины, разбор CVSS, шаги эксплуатации, объяснение кода, чек-лист доказательств, меры по смягчению, хронология, ссылки, отказ от ответственности

Быстрый старт

1. Сборка и запуск лаборатории

root@kitploit:~
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

Ожидаемый результат:

root@kitploit:~
NAME                      STATUS
baron_samedit_target      running
baron_samedit_patched     running

2. Вход в уязвимый контейнер

root@kitploit:~
docker exec -it baron_samedit_target bash

3. Подтверждение условий уязвимости

root@kitploit:~
# Inside the container as labuser

whoami                         # Expected: labuser
id                             # Expected: uid=1000(labuser)...
sudo --version                 # Expected: Sudo version 1.8.31
sudo -l                        # Expected: Sorry, user labuser may not run sudo...
sudoedit -s '\' 2>&1          # Expected: NOT "usage:" → VULNERABLE

4. Копирование и запуск эксплойта

root@kitploit:~
# From host machine
docker cp exploit/exploit.py baron_samedit_target:/home/labuser/

# Inside container
python3 exploit.py --check-only      # verify all prerequisites pass
python3 exploit.py --safe-mode       # canary only, no exploitation
python3 exploit.py --cmd "id"        # LPE → show root identity
python3 exploit.py --cmd "whoami /all" --output /tmp/proof.txt

5. Сбор доказательств

root@kitploit:~
# Inside container — before exploit
~/evidence_helper.sh > /tmp/before.txt

# After exploit
~/evidence_helper.sh > /tmp/after.txt

# Copy to host
docker cp baron_samedit_target:/tmp/before.txt proof/terminal_logs_before.txt
docker cp baron_samedit_target:/tmp/after.txt  proof/terminal_logs_after.txt

Как работает эксплойт

root@kitploit:~
Step 1: Run 'sudoedit -s <crafted_argument>'
        ↓
Step 2: sudo calls set_cmnd() to parse arguments in shell mode
        ↓
Step 3: set_cmnd() COUNTS bytes for the cmnd_args buffer (correct size)
        ↓
Step 4: set_cmnd() COPIES bytes — but reads 1 byte past the null
        terminator of any argument ending with '\'
        ↓
Step 5: Off-by-one overflow writes 1 unexpected byte beyond cmnd_args
        ↓
Step 6: Heap grooming (environment variable layout manipulation) ensures
        a valuable sudo struct sits adjacent to the overflowed buffer
        ↓
Step 7: The overflow byte corrupts a pointer in the adjacent struct
        ↓
Step 8: sudo follows the corrupted pointer → executes attacker-controlled
        command (via SUDO_EDITOR) with root privileges
        ↓
Result: uid=0(root) — from a user with ZERO sudo permissions

Корневая причина в одной строке

root@kitploit:~
size_calculation("A\") = 2 bytes  ≠  copy("A\") = writes 3 bytes → overflow

Канареечный тест уязвимости

Самый безопасный способ подтвердить наличие CVE-2021-3156 — без эксплуатации:

root@kitploit:~
sudoedit -s '\' 2>&1; echo "Exit: $?"

Использование exploit.py

root@kitploit:~
Usage: python3 exploit.py [OPTIONS]

Modes (mutually exclusive):
  --check-only        Run all pre-checks only — no exploitation
  --safe-mode         Run canary test only — confirm vulnerability
  --cmd COMMAND       Execute COMMAND as root after successful LPE

Options:
  --verbose, -v       Show detailed heap/system debug output
  --output, -o FILE   Save all output to FILE
  --no-colour         Disable ANSI colour codes (for log files)
  --help              Show this help message

Examples:
  python3 exploit.py --check-only
  python3 exploit.py --safe-mode
  python3 exploit.py --cmd "id"
  python3 exploit.py --cmd "cat /etc/shadow" --output proof/root_output.txt
  python3 exploit.py --cmd "whoami" --verbose

Выполняемые предварительные проверки


Сброс и снимок лаборатории

Быстрый сброс (сохранить контейнер, очистить временные файлы)

root@kitploit:~
docker exec baron_samedit_target bash -c "rm -f /tmp/*.txt /tmp/exploit* /home/labuser/exploit.py"

Сохранить снимок

root@kitploit:~
docker commit baron_samedit_target baron-samedit:clean-state
echo "[+] Snapshot saved as baron-samedit:clean-state"

Восстановить снимок

root@kitploit:~
docker compose down
docker run -it --name baron_samedit_target baron-samedit:clean-state bash

Полный сброс (пересборка с нуля)

root@kitploit:~
docker compose down -v
docker compose up -d --build

Сравнение исправленной и уязвимой версий

Чтобы проверить на исправленном контейнере:

root@kitploit:~
docker exec -it baron_samedit_patched bash
# Then repeat the canary test — should output "invalid argument"

Ссылки


Этическое уведомление

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│  This project was created for EDUCATIONAL PURPOSES ONLY as      │
│  part of the ITSOLERA Cybersecurity Red Team Internship 2026.   │
│                                                                 │
│  ✅ DO:  Use against the isolated Docker lab only               │
│  ✅ DO:  Study the vulnerability to understand heap exploits    │
│  ✅ DO:  Contribute findings to the team report                 │
│                                                                 │
│  ❌ DON'T: Run against any real system, VM, or cloud instance   │
│  ❌ DON'T: Share outside the internship programme               │
│  ❌ DON'T: Use for any unauthorised access                      │
└─────────────────────────────────────────────────────────────────┘

Департамент кибербезопасности ITSOLERA — стажировка Red Team, лето 2026

Скачать инструмент
СвойствоЗначение
Идентификатор CVECVE-2021-3156
ПсевдонимBaron Samedit
ТипПереполнение буфера в куче → локальное повышение привилегий
Компонентsudo — утилита привилегий Linux (set_cmnd() в src/sudo.c)
Оценка CVSS v37.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-2021-3156Типичная LPE sudo
Требует записи в sudoers❌ Нет✅ Да
Требует членства в группе sudo❌ Нет✅ Да
Требует предварительного доступа к sudo❌ Нет✅ Да
Работает с только что созданной учётной записью✅ Да❌ Нет
Использует систему разрешений❌ Полностью обходит✅ Злоупотребляет ей
Поверхность атакиПарсер аргументов (до аутентификации)Проверка разрешений
ФайлОписание
lab/DockerfileUbuntu 20.04 с зафиксированным sudo 1.8.31 (уязвимый); установлен Python 3; учётная запись labuser БЕЗ доступа к sudo
lab/docker-compose.ymlОркестрация уязвимой цели + эталонного контейнера с исправленным Ubuntu 22.04
lab/evidence_helper.shBash-скрипт для сбора состояния системы (пользователь, версия sudo, canary) до и после эксплойта
lab/SETUP.mdПошаговая инструкция: сборка → запуск → вход → проверка версии sudo → запуск canary → снимок
lab/config_notes.mdОбъясняет, почему не требуется неправильная конфигурация, настройки безопасности Docker, учётные данные
ФайлОписание
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 (структура аргументов), три стратегии кучи, шаблон журнала неудачных попыток, сигнатуры обнаружения
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.mdapt-get install --only-upgrade sudo, проверочный canary, усиление AppArmor, мониторинг auditd, таблица усиления защиты
ВыводЗначение
sudoedit: /\: not a regular file✅ УЯЗВИМ
Ошибка сегментации / Exit: 139✅ УЯЗВИМ (крах)
sudoedit: invalid argument❌ ИСПРАВЛЕНО (1.9.5p2+)
usage: sudoedit ...❌ ИСПРАВЛЕНО
ПроверкаЧто делает
Платформа (Linux)Убеждается, что мы в Linux
Наличие sudoeditИщет sudoedit в PATH
Версия sudoСравнивает с уязвимым диапазоном (1.8.2–1.8.31p2, 1.9.0–1.9.5p1)
Уже не rootПодтверждает UID ≠ 0 (LPE имеет смысл)
Информация о системеСобирает версию glibc + архитектуру для стратегии кучи
Канареечная проверка уязвимостиЗапускает sudoedit -s '\' и классифицирует ответ
ТестУязвимая версия (sudo 1.8.31)Исправленная версия (sudo 1.9.5p2+)
sudo --versionSudo version 1.8.31Sudo version 1.9.x
sudoedit -s '\'not a regular file или ошибка сегментацииinvalid argument
exploit.py --safe-modeCanary: PASS → УЯЗВИМCanary: FAIL → ИСПРАВЛЕНО
exploit.py --cmd iduid=0(root)Не проходит этап проверки
Патч установлен?Бюллетень отсутствуетПатч применён
ИсточникURL
Рекомендации Qualyshttps://blog.qualys.com/vulnerabilities-threat-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
MITRE CVEhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3156
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2021-3156
Рекомендации sudohttps://www.sudo.ws/security/advisories/unescape_overflow/
PoC blastyhttps://github.com/blasty/CVE-2021-3156
PoC worawithttps://github.com/worawit/CVE-2021-3156
ExploitDB #49521https://www.exploit-db.com/exploits/49521
Rapid7 Metasploithttps://www.rapid7.com/db/modules/exploit/linux/local/sudo_baron_samedit/
GTFOBins — sudohttps://gtfobins.github.io/gtfobins/sudo/