Sploitus

Exploit for CVE-2021-3156-Project

kitploit · 2026-08-25

Exploit Code

MARKDOWN351 lines
## 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_