CVE-2026-102823 Russh 通道生命周期事件校验缺失漏洞
影响恶意 SSH 服务端可触发客户端 panic 或破坏命令退出码跟踪
Russh 是 Rust 语言的 SSH 客户端与服务端库。在 0.63.1 之前,客户端处理已认证加密通道数据时,未校验 ChannelId 是否属于本客户端已打开并建立的通道,即将通道生命周期事件转发给公开的 client::Handler 回调。恶意 SSH 服务端可借此发送伪造通道事件。
影响范围
Russh 0.63.1 之前的版本。具体受影响版本范围暂无更细公开信息。
漏洞详情
漏洞类型为输入校验缺失(通道归属校验不足)。成因是 client_read_authenticated 在处理 CHANNEL_DATA、CHANNEL_EOF、CHANNEL_CLOSE、CHANNEL_OPEN_FAILURE、CHANNEL_SUCCESS/FAILURE、CHANNEL_REQUEST(exit-status、exit-signal、xon-xoff)等消息时,未确认对应 ChannelId 属于客户端已打开并建立的通道。攻击者作为 SSH 服务端可针对预测的、未打开、未确认或已释放的通道 ID 发送事件,导致应用 panic 或命令完成状态与退出码跟踪被破坏。
利用条件与风险
利用前提是客户端连接由攻击者控制的恶意 SSH 服务端。实战中可造成客户端进程崩溃(拒绝服务)或命令执行结果与退出码被错误记录,影响依赖退出码判断的自动化流程。
修复建议
升级至 Russh 0.63.1 或更高版本。临时缓解措施暂无公开信息,建议避免连接不可信 SSH 服务端。
Russh is a Rust SSH client and server library. Prior to 0.63.1, client_read_authenticated in russh/src/client/encrypted.rs forwards CHANNEL_DATA, CHANNEL_EXTENDED_DATA, CHANNEL_EOF, CHANNEL_CLOSE, CHANNEL_OPEN_FAILURE, CHANNEL_SUCCESS, CHANNEL_FAILURE, and CHANNEL_REQUEST subtypes exit-status, exit-signal, and xon-xoff to public client::Handler callbacks without confirming that the ChannelId belongs to a channel the client opened and established. A malicious SSH server can send lifecycle events for predicted, unopened, unconfirmed, or released channel identifiers, causing application panics or corrupting command completion and exit-code tracking. This issue is fixed in version 0.63.1.