
Уязвимость в обработке сообщений протокола SSH: злоумышленник может получить несанкционированный доступ к уязвимым системам и выполнить произвольные команды без действительных учётных данных на SSH-сервере Erlang/OTP
✅ ПОДТВЕРЖДЁН RCE ДО АУТЕНТИФИКАЦИИ — Эксплойт успешно продемонстрирован.
📄 Технический блог (PDF):CVE-2025-32433-Technical-Blog.pdf
📸 Визуальные доказательства:screenshots/
🔍 Детали proof of concept:docs/PROOF_OF_CONCEPT.md
CVE-2025-32433 — это уязвимость уровня CVSS 10.0 Critical в демоне SSH Erlang/OTP. Неаутентифицированный атакующий может открывать SSH-каналы и выполнять произвольные команды до завершения аутентификации — учётные данные не требуются.
Эта лаборатория предоставляет полностью рабочую изолированную среду для воспроизведения уязвимости, запуска эксплойта, его проверки и тестирования механизмов обнаружения — всё на вашей локальной машине.
Перед началом убедитесь, что у вас установлено следующее:
| Инструмент | Минимальная версия | Команда проверки |
|---|---|---|
| Docker Desktop | 4.x+ | docker --version |
| Docker Compose | v2.20+ | docker compose version |
| Python | 3.10+ | python --version |
Также вам понадобится библиотека Python paramiko для набора средств обнаружения:
pip install paramiko
Тег образа
erlang:26.2.5в Docker Hub был незаметно перезаписан исправленным релизом26.2.5.11после раскрытия CVE-2025-32433. Загрузка его из Docker Hub даёт вам исправленную версию, а не уязвимую.
lab/Dockerfileв этой лаборатории компилирует OTP 26.2.5 напрямую из официального tarball релиза Erlang на GitHub, чтобы гарантировать подлинную уязвимую среду выполнения. Первая сборка занимает ~10 минут.
┌──────────────────────────────────────────┐
│ Isolated Docker Bridge │
│ (cve-lab-bridge) │
└────┬────────────────────────────┬────────┘
│ │
┌───────────────┴─────────────┐┌─────────────┴──────────────┐
│ target_vulnerable ││ target_patched │
│ OTP 26.2.5 (source-built) ││ erlang:26.2.5.11 │
│ Host Port: 127.0.0.1:2222 ││ Host Port: 127.0.0.1:2223 │
└─────────────────────────────┘└─────────────────────────────┘
│
┌──────────────┴──────────────┐
│ attacker │
│ Python 3 + Scapy/Paramiko │
│ Workdir: /work │
└─────────────────────────────┘
| Контейнер | Порт | Версия OTP | Статус |
|---|---|---|---|
cve-2025-32433-vulnerable | 127.0.0.1:2222 | 26.2.5 (ERTS 14.2.5) | ❌ Уязвим |
cve-2025-32433-patched | 127.0.0.1:2223 | 26.2.5.11 (ERTS 14.2.5.15) | ✅ Исправлен |
cve-2025-32433-attacker | Только внутренний | Инструменты Python 3 | Набор инструментов атакующего |
git clone https://github.com/damnkrishna/CVE-2025-32433-LAB.git
cd CVE-2025-32433-LAB
⏱️ Это занимает ~10 минут — происходит компиляция Erlang/OTP 26.2.5 из исходного кода на C. Это ожидаемо. Не прерывайте процесс.
docker compose build --no-cache target_vulnerable
Вы увидите вывод компилятора, например make[1]: Leaving directory '/tmp/otp_src_26.2.5/lib/...' —
это нормально. Он заканчивается так:
✔ Image ine_cyber_assignment_job-target_vulnerable Built
docker compose build --no-cache target_patched
docker compose up -d target_vulnerable target_patched
docker compose ps
I'm ready to translate chunk 17 of 69. Please provide the source content you'd like me to translate into Russian.
NAME STATUS PORTS
cve-2025-32433-vulnerable Up (healthy) 127.0.0.1:2222->2222/tcp
cve-2025-32433-patched Up (healthy) 127.0.0.1:2223->2222/tcp
Оба контейнера должны показывать (healthy), прежде чем продолжить.
Убедитесь, что контейнер действительно запускает OTP 26.2.5 (а не исправленную версию):
docker exec cve-2025-32433-vulnerable cat /usr/local/otp/lib/erlang/releases/RELEASES
Ожидаемый вывод — должен показывать 14.2.5 БЕЗ суффикса .15:
[{release,"Erlang/OTP","26","14.2.5",
[{kernel,"9.2.4",...},
Если вы видите 14.2.5.15 — образ контейнера неверный. Пересоберите с --no-cache.
Подключитесь как легитимный пользователь, чтобы убедиться, что сервер принимает стандартную аутентификацию:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 [email protected]
При появлении запроса введите пароль: LabPass2026!Secured
Вы попадёте в оболочку Erlang:
Eshell V14.2.5 (press Ctrl+G to abort, type help(). for help)
1>
Попробуйте несколько команд в оболочке Erlang:
ls().
file:write_file("test.txt", "hello").
file:read_file("test.txt").
Чтобы выйти из оболочки Erlang:
q().
Перед запуском эксплойта откройте второй терминал PowerShell и отслеживайте серверный лог:
Get-Content -Path .\logs\target_vulnerable\ssh.log -Wait -Tail 20
Оставьте этот терминал открытым. События подключения будут появляться в реальном времени.
Это proof of concept удалённого выполнения кода до аутентификации. Учётные данные не используются.
cd attacker_work\exploit
python payload.py
I'm ready to translate chunk 17 of 69. Please provide the source content you'd like me to translate into Russian.
[*] Connecting to SSH server...
[+] Received banner: SSH-2.0-Erlang/5.1.4
[*] Sending SSH_MSG_KEXINIT...
[*] Sending SSH_MSG_CHANNEL_OPEN...
[*] Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
[✓] Exploit sent! If the server is vulnerable, it should have written to /lab.txt.
[+] Received response: 000003d4...
Баннер должен показывать SSH-2.0-Erlang/5.1.4 (без суффикса .15), чтобы подтвердить, что вы попали на уязвимый сервер.
docker exec cve-2025-32433-vulnerable cat /lab.txt
I'm ready to translate chunk 17 of 69. Please provide the source content you'd like me to translate into Russian.
pwned
Если вы видите pwned — CVE-2025-32433 pre-authentication RCE подтверждён.
Эксплойт записал данные в файловую систему контейнера без каких-либо учётных данных.
Запустите тот же эксплойт против исправленного контейнера на порту 2223:
Отредактируйте attacker_work\exploit\payload.py, строка 6:
PORT = 2223 # change from 2222 to 2223
Запустите эксплойт:
python payload.py
Затем проверьте наличие файла:
docker exec cve-2025-32433-patched cat /lab.txt
I'm ready to translate chunk 17 of 69. Please provide the source content you'd like me to translate into Russian.
cat: /lab.txt: No such file or directory