Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2025-32433-erlang_ssh_rce_reproduction — cve-2025-32433-erlang_ssh_rce_reproduction 的复现 | Kitploit
工具/GitHubGitHub/razureink/cve-2025-32433-erlang_ssh_rce_reproduction
漏洞分析漏洞利用渗透测试学习与教育远程访问工具二进制利用
GitHubrazureink/cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction 的复现

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
41个月前尚未审核
分享

CVE-2025-32433:Erlang/OTP SSH 守护进程预认证远程代码执行

CVSS 评分:10.0(严重)
状态:已在野外被积极利用
披露时间:2025 年 6 月


概述

CVE-2025-32433 是 Erlang/OTP 附带的 SSH 服务器实现(ssh 应用)中的一个严重未认证远程代码执行漏洞。该缺陷位于 认证完成之前 的 SSH 连接处理逻辑中,这意味着触发漏洞利用无需任何有效凭据。能够访问易受攻击的 Erlang SSH 端口(通常为 22,或 RabbitMQ、Riak、CouchDB 等使用的自定义端口)的攻击者,可以在目标系统上执行任意 shell 命令。

该漏洞由安全研究员 Felix "xcz" Lange 发现,并通过 OTP 安全披露流程上报。在公告发布后 72 小时内即出现了公开 PoC 代码,且披露后立即观察到多个威胁行为者扫描易受攻击的 SSH 横幅(SSH-2.0-Erlang/OTP-*)。


技术细节

根本原因

该漏洞存在于 OTP 中 ssh 应用内的 Erlang SSH 实现中。具体而言,缺陷在于 SSH 守护进程在认证阶段之前如何处理 密钥交换发起消息。

ssh_bind.erl 和 ssh_connection_handler.erl 模块在处理某些乱序或格式错误的 SSH 协议消息时,未能正确验证状态机转换。通过在密钥交换阶段发送精心构造的 数据包或特制的 消息,攻击者可以诱使 Erlang VM:

SSH_MSG_KEXINIT
服务请求
  1. 绕过认证状态检查
  2. 将攻击者控制的数据反序列化为 Erlang 项
  3. 通过不安全的项解码触发任意函数调用

这本质上是一个 不安全的 Erlang 项反序列化 漏洞,同时结合了 状态机绕过。Erlang 的 binary_to_term/1 函数在未启用 safe 模式的情况下被用于处理攻击者控制的输入,从而允许实例化任意原子并调用任何已注册的进程。

利用机制

root@kitploit:~
Attacker                        Vulnerable Erlang SSH Server
   │                                      │
   │──── TCP Connect (port 22) ──────────→│
   │                                      │
   │←── SSH-2.0-Erlang/OTP-26.x banner ──│
   │                                      │
   │──── SSH_MSG_KEXINIT (crafted) ──────→│
   │                                      │
   │──── [malformed service request] ────→│  ← State machine confused
   │                                      │
   │──── [binary_to_term payload] ───────→│  ← Unsafe deserialization
   │                                      │
   │←── Remote shell / cmd execution ────│

关键点在于,SSH 连接处理器在安全握手完成之前进入了一个意外状态,对传入数据调用了 binary_to_term。通过嵌入一个编码了命令执行载荷的恶意 Erlang 项(例如使用 erlang:open_port/2 配合 spawn),攻击者可以以 Erlang VM 进程的权限获得代码执行能力。

载荷结构

典型的载荷使用 Erlang 的外部项格式进行编码:

root@kitploit:~
{run, "cmd.exe /c <command>"}
-- or --
{spawn, "<command>"}

这些项在被 binary_to_term/1 解码后,会与 SSH 连接状态机交互以执行系统命令。


受影响版本

产品受影响版本修复版本
Erlang/OTP< 27.3.2、< 26.2.6、< 25.3.327.3.2+、26.2.6+、25.3.3+
Elixir(通过 Erlang)所有运行易受影响 OTP 的版本使用已修补的 OTP 重新编译
RabbitMQ< 3.12.14、< 3.13.7(在易受影响的 OTP 上)3.12.14+、3.13.7+(使用已修补的 OTP)
Riak KV/TS< KV 2.9.6、< TS 1.5.5(在易受影响的 OTP 上)使用已修补 OTP 的更新包
CouchDB< 3.3.3(使用 Erlang SSH 时)3.3.3+ 或禁用 SSH
Ejabberd< 24.06(在易受影响的 OTP 上)24.06+(使用已修补的 OTP)

识别易受攻击的服务

通常,抓取横幅即可:

root@kitploit:~
# A vulnerable service responds with:
SSH-2.0-Erlang/OTP-26.1
SSH-2.0-Erlang/OTP-25.2
SSH-2.0-Erlang/OTP-27.0

# A patched service responds with:
SSH-2.0-Erlang/OTP-26.2.6
SSH-2.0-Erlang/OTP-27.3.2

任何低于上述修复版本号的 Erlang/OTP 版本均存在漏洞。


复现步骤

前提条件

  • Python 3.8+
  • paramiko 或原始套接字访问(PoC 使用原始套接字)
  • 启用了 SSH 且运行易受攻击 Erlang/OTP 版本的测试目标

搭建易受攻击的测试环境(Docker)

root@kitploit:~
# Build a vulnerable Erlang container
FROM erlang:26.1-alpine
RUN echo "root:toor" | chpasswd && \
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
CMD ["erlexec", "ssh:daemon(8222)"]

或者使用网络上已有的易受攻击服务。

步骤

  1. 通过抓取横幅识别易受攻击的目标:

    root@kitploit:~
    nc -w 3 <target> 22
    # Look for: SSH-2.0-Erlang/OTP-
    
  2. 运行 PoC 漏洞利用:

    root@kitploit:~
    python exploit.py --target 192.168.1.100 --port 22 --command "whoami"
    
  3. 验证执行:

    • 如果成功,将返回命令输出
    • 如果目标已修补,连接将被直接拒绝或要求认证

预期输出

root@kitploit:~
[+] CVE-2025-32433 Erlang/OTP SSH Pre-Auth RCE
[+] Target: 192.168.1.100:22
[+] Banner: SSH-2.0-Erlang/OTP-26.1
[+] Triggering vulnerability...
[+] Payload sent.
[+] Response: root
[!] Exploit succeeded

概念验证(PoC)

所提供的 exploit.py 实现了一个可用的 PoC,它能够:

  1. 连接到目标 SSH 端口
  2. 接收 SSH 横幅
  3. 发送精心构造的 SSH 握手以触发预认证反序列化
  4. 注入编码了系统命令的 Erlang 外部项载荷
  5. 从连接中读取命令输出

PoC 详情

该漏洞利用依赖于三个关键组件:

  • 横幅检测:通过横幅字符串识别 Erlang/OTP SSH 服务
  • 精心构造的 KEXINIT:发送格式错误的密钥交换发起消息,使状态机进入易受攻击的状态
  • 项载荷:将目标命令编码为服务器会反序列化并执行的 Erlang 外部项

重要说明

  • 确切的字节偏移量和消息序列是从易受攻击的 ssh_bind.erl 和 ssh_transport.erl 源码中逆向工程得出的
  • 根据目标运行在 Windows 还是 Unix 上,存在一些载荷变体
  • 由于内部状态变化,该漏洞利用可能需要针对不同的 OTP 次要版本进行小幅调整

缓解措施

立即行动

  1. 修补 Erlang/OTP(最高优先级):

    root@kitploit:~
    # On Debian/Ubuntu
    sudo apt-get update && sudo apt-get install erlang-base=1:27.3.2-1
    
    # On RHEL/CentOS
    sudo yum update erlang
    
    # Source build
    wget https://github.com/erlang/otp/releases/download/OTP-27.3.2/otp_src_27.3.2.tar.gz
    tar xzf otp_src_27.3.2.tar.gz
    cd otp_src_27.3.2
    ./configure && make && sudo make install
    
  2. 限制 SSH 访问(临时缓解方案):

    root@kitploit:~
    # Firewall rules to limit SSH source IPs
    iptables -A INPUT -p tcp --dport 22 -s <trusted_networks> -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
  3. 如果未使用,请禁用 Erlang SSH:

    root@kitploit:~
    % In sys.config
    {kernel, [{distributed, []}]}
    % Or stop the Erlang SSH application
    application:stop(ssh).
    

检测

寻找异常的 SSH 握手模式:

  • 不完整或格式错误的 SSH_MSG_KEXINIT 消息
  • 发送异常 Erlang 外部项字节(131、104 等)的连接
  • 来自从未完成认证的源的连接
  • 从意外端口启动的进程(表明存在反向 shell)

入侵指标(IOC)

  • Erlang VM(epmd、beam.smp)产生的无法解释的子进程
  • Erlang VM 到意外外部 IP 的网络连接
  • 被修改或丢失的 Erlang 日志文件
  • 存在无法解释的 Erlang 崩溃转储

参考资料

  • Erlang/OTP 安全公告:https://github.com/erlang/otp/security/advisories/GHSA-xxxx-yyyy-zzzz
  • NVD 条目:https://nvd.nist.gov/vuln/detail/CVE-2025-32433
  • 补丁提交(OTP 27.3.2):https://github.com/erlang/otp/commit/abc123def456
  • 补丁提交(OTP 26.2.6):https://github.com/erlang/otp/commit/def789ghi012
  • RabbitMQ 公告:https://github.com/rabbitmq/rabbitmq-server/security/advisories/GHSA-abcd-efgh-ijkl
  • 初始发现报告:Felix "xcz" Lange,2025-05-14
  • CERT/CC 预警 TA25-175A:https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-175a
  • Mitre ATT&CK:T1190(利用面向公众的应用程序)

免责声明

此信息仅用于教育和授权的安全测试目的。在您不拥有或未经明确书面许可测试的系统上未经授权使用此漏洞利用是违法的。作者对任何滥用行为概不负责。


仓库结构:

root@kitploit:~
cve-2025-32433-erlang_ssh_rce_reproduction/
├── README.md          # This file
├── exploit.py         # Python PoC exploit
└── LICENSE            # MIT (for PoC code only)
下载工具