## https://sploitus.com/exploit?id=A7C6B521-94D9-56C1-9A49-71CB615FA65B
# vuln-labs-angara
Семь независимых Docker-стендов с уязвимыми версиями опенсорс-проектов. Каждый стенд собирается
из версии, зафиксированной по родительскому коммиту фикса, эксплуатируется одной командой и
имеет исправленную сборку для сравнения под тем же пейлоадом.
Перед началом прочитайте [DISCLAIMER.md](DISCLAIMER.md).
```bash
git clone https://github.com/Mikkkin/vuln-labs-angara
cd vuln-labs-angara && make help
```
## Стенды
| № | Класс | Идентификатор | Проект | Уязвимая версия | Фикс | Порты |
|---|---|---|---|---|---|---|
| 01 | Buffer Overflow (heap read) | WS-2021-0604 / OSS-Fuzz 40231 | AcademySoftwareFoundation/openexr | v3.1.3 | [236c4b27](https://github.com/AcademySoftwareFoundation/openexr/commit/236c4b2782d787d56ddc586ed4a313c1d31acd95) → 3.1.4 | нет |
| 02 | Stored XSS | CVE-2021-41134 | jupyter/nbdime | 3.1.0 | [e44a5cc7](https://github.com/jupyter/nbdime/commit/e44a5cc7677f24b45ebafc756db49058c2f750ea) → 3.1.1 | 18888 / 18889 |
| 03 | CSRF | CVE-2023-1033 | froxlor/froxlor | 2.0.10 | [4003a8d2](https://github.com/froxlor/froxlor/commit/4003a8d2b60728a77476d1d4f5aa5c635f128950) → 2.0.11 | 8300-8309 |
| 04 | SQL Injection | CVE-2022-3751 | owncast/owncast | v0.0.12 | [23b6e586](https://github.com/owncast/owncast/commit/23b6e5868d5501726c27a3fabbecf49000968591) → 0.0.13 | 8400-8409 |
| 05 | Command Injection | CVE-2021-41146 | qutebrowser/qutebrowser | v2.3.1 | [8f46ba3f](https://github.com/qutebrowser/qutebrowser/commit/8f46ba3f6dc7b18375f7aa63c48a1fe461190430) → 2.4.0 | 8500-8509 |
| 06 | SSRF | CVE-2023-27586 | Kozea/CairoSVG | 2.6.0 | [12d31c65](https://github.com/Kozea/CairoSVG/commit/12d31c653c0254fa9d9853f66b04ea46e7397255) → 2.7.0 | 5080 / 5081 |
| 07 | IDOR (type juggling) | CVE-2022-1176 | livehelperchat/livehelperchat | 3.95v | [72c0df16](https://github.com/livehelperchat/livehelperchat/commit/72c0df160bfe9838c618652facef29af99392ce3) → 3.96 | 8700-8709 |
## Требования
Docker и Docker Compose. Интернет на время сборки: образы тянут исходники с GitHub и пакеты из
репозиториев дистрибутивов.
## Архитектура сборки
Платформа в образах **не пиннится намеренно**. Все семь проектов собираются нативно и на amd64,
и на arm64, поэтому образ строится под архитектуру той машины, где вы набираете `docker build`.
На Arch Linux x86_64 это даст amd64 без эмуляции, и адреса в отчетах AddressSanitizer будут
привычными x86-64 — такими же, как в разборах в сети. Там, где стенд тянет готовый бинарь, а не
собирает из исходников, архитектура выбирается через `ARG TARGETARCH`.
Принудительный `--platform linux/amd64` здесь был бы вредным: под эмуляцией AddressSanitizer
ненадежен из-за резервирования теневой памяти, а QtWebEngine нестабилен.
## Запуск
```bash
make up-01 # поднять стенд
make pwn-01 # прогнать эксплойт целиком: контроль, атака, исправленная версия
make down-01 # остановить
make clean # снести все контейнеры и образы стендов
```
Или вручную, в каталоге стенда:
```bash
cd 06-ssrf-cairosvg
docker compose up -d --build
./exploit.sh
```
## Как устроен каждый стенд
Три кадра, всегда в одном порядке. Одиночный успешный эксплойт ничего не доказывает: неизвестно,
что дал бы тот же запрос без пейлоада.
1. **Негативный контроль** — то же действие без атаки. Показывает, как выглядит нормальный отказ.
2. **Эксплойт** — наблюдаемый артефакт, которого не могло появиться иначе: секрет из недостижимого
снаружи сервиса, имя функции в трейсе санитайзера, чужие данные в ответе.
3. **Исправленная версия** — тот же пейлоад против сборки с фиксом. Ничего не происходит.
Статус 200 и «запрос прошел» доказательствами не считаются.
## Расхождения с первоисточниками
При сборке выяснилось, что часть опубликованных описаний неточна. Каждое расхождение проверено
экспериментом и разобрано в README соответствующего стенда:
- **CVE-2022-1176** — это не magic hash: код ничего не хеширует. И переход на PHP 8 уязвимость
**не закрывает**, вопреки рекомендации самого исследователя.
- **CVE-2023-27586** — CSS-пейлоад из advisory в форме `@import url("...")` запроса не порождает.
Работают формы без кавычек и строковая.
- **CVE-2022-3751** — сценарий с тремя составными командами в одном запросе из отчета huntr не
воспроизводится: драйвер исполняет только последнюю команду строки.
- **CVE-2023-1033** — шаги исследователя портят один раздел, а открывают страницу другого.
- **WS-2021-0604** — уязвимый код находится в `internal_huf.c` ядра на C, а не в `ImfHuf.cpp`.
Утилиты `exrheader` и `exrmakepreview` до него не доходят.
## Структура каталога стенда
```
NN--/
Dockerfile уязвимая и исправленная сборки через build-аргумент
docker-compose.yml если стенду нужна база данных
exploit.sh весь прогон одной командой
README.md уязвимый код, разбор фикса, команды
evidence/ реально снятый вывод
```