CVE-2025-64170sudo-rs是一个使用Rust语言编写的内存安全sudo和su实现。该漏洞存在于sudo-rs版本0.2.7至0.2.9中。当用户开始输入密码但长时间未按回车键时,系统会触发密码超时机制。在超时发生后,之前用户输入的键盘输入会被回显到控制台终端,这一行为可能导致部分密码信息被泄露。由于密码字符被显示在屏幕上,攻击者可能通过观察用户屏幕或记录终端会话来获取部分密码字符。此外,如果用户使用了命令行历史记录功能(如bash history),且终端配置不当,这些密码输入可能会被保存到历史文件中,进一步增加密码泄露的风险。攻击者可利用这些泄露的密码片段进行社会工程攻击、密码猜测或横向移动。该漏洞的利用需要攻击者能够观察到目标用户的终端输出或访问其终端会话记录,因此属于物理攻击向量(AV:P),攻击复杂度较高(AC:H),需要高权限用户触发(PR:H)并需要用户交互(UI:R)。
该漏洞的根本原因在于sudo-rs在处理密码输入超时时的实现缺陷。当用户在sudo-rs的密码提示符下输入密码时,系统会启动一个计时器来检测密码输入超时。如果用户在指定时间内未按回车键确认输入,计时器会触发超时处理逻辑。问题出在超时处理逻辑中,当检测到密码输入超时时,系统并未正确清除或忽略用户之前输入的字符缓冲区,而是将这些字符直接回显到标准输出(stdout),导致用户在终端上看到自己输入的密码字符。具体技术细节如下:1) 密码输入使用标准输入读取函数,在读取过程中维护一个输入缓冲区;2) 超时检测机制独立于输入读取进程运行;3) 当超时触发时,超时处理函数未执行安全的缓冲区清理操作;4) 残留的密码字符通过终端输出函数被回显给用户。攻击者可以通过等待目标用户执行sudo命令并故意不输入密码或延迟输入来触发此漏洞。修复方案在版本0.2.10中实现,主要改进包括:在超时处理时立即清除密码输入缓冲区,以及确保超时后不再回显任何用户输入字符。