## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SHAMS-UL-MEHMOOD-CVE-2021-3156-PROJECT
# 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_