
Безопасный сканер PoC и Docker-лаборатория для CVE-2023-27372 — RCE в SPIP CMS до версии 4.2.1. Проверяет уязвимость через конечную точку восстановления пароля без разрушительных действий.
# Исследовательский проект: CVE-2023-27372 — SPIP (RCE, лабораторный стенд + Safe PoC)
---
## 1) Описание
Данный репозиторий содержит:
- **`stand/`** — лабораторный стенд (уязвимая среда) на Docker: SPIP + MariaDB.
- **`poc/`** — инструмент проверки (scanner) на Python, реализующий **безопасное подтверждение** уязвимости (Safe PoC) без деструктивных действий.
Проект предназначен для демонстрации и анализа уязвимости **CVE-2023-27372** в **SPIP до 4.2.1**. Проверка выполняется через функционал восстановления пароля (endpoint `spip.php?page=spip_pass`) и подтверждается выполнением безопасной команды на стороне стенда.
---
## 2) Структура репозитория
```text
.
├── stand/ # Уязвимый стенд (SPIP + MariaDB) на Docker Compose
│ ├── docker-compose.yml
│ └── ... (Dockerfile/скрипты стенда, persist volumes и т.п.)
└── poc/ # Safe PoC scanner (Python)
├── Dockerfile
├── README.md # (опционально) локальная документация PoC
└── src/
├── scanner.py
├── utils.py
└── pyproject.toml
cd stand
docker compose up -d
docker compose ps
Сервис будет доступен по адресу:
http://127.0.0.1:8080/http://127.0.0.1:8080/spip.php?page=loginПерейдите в poc/ и соберите Docker-образ сканера:
cd ../poc
# Если в вашей среде бывают проблемы с DNS во время сборки, используйте:
docker build --network=host -t spip-poc-scanner .
Если DNS проблем нет — можно обычной командой:
docker build -t spip-poc-scanner .
Рекомендуемый запуск для локального стенда:
docker run --rm --network="host" \
-v "$(pwd)":/app/out \
spip-poc-scanner \
-i http://127.0.0.1:8080 \
-o /app/out/results.json
После выполнения появится results.json (пример структуры):
[
{
"ip": "http://127.0.0.1:8080",
"vuln": true
}
]
Если ваша реализация PoC подтверждает выполнение через создание файла (например, /tmp/pwned.txt), можно проверить это внутри web-контейнера.
Вариант без жесткого имени контейнера:
cd ../stand
WEB_CID="$(docker compose ps -q web)"
docker exec "$WEB_CID" ls -l /tmp/pwned.txt
Если файл существует — это подтверждает возможность выполнения команды в рамках стенда.
pip)spip.php?page=spip_passTemporary failure in name resolution при docker buildИспользуйте сборку с сетью хоста:
docker build --network=host -t spip-poc-scanner .
Остановить и удалить volumes:
cd stand
docker compose down -v
docker compose up -d
Проект создан исключительно для образовательного использования и легального тестирования в собственной лабораторной среде. Автор не несет ответственности за любое несанкционированное использование.
---::contentReference[oaicite:0]{index=0}