IPBUF安全漏洞报告
English
CVE-2026-34974 CVSS 5.4 中危

CVE-2026-34974 phpMyFAQ SVG清洗绕过致XSS漏洞

披露日期: 2026-04-02

漏洞信息

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

相关标签

XSSphpMyFAQSVGBypassPrivilege EscalationCVE-2026-34974

漏洞概述

phpMyFAQ 4.1.1之前的版本中,基于正则的SVG清洗程序存在安全缺陷。攻击者可以通过在SVG文件的`<a href>`属性中使用HTML实体编码的`javascript:` URL来绕过清洗机制。拥有编辑FAQ权限(`edit_faq`)的用户可上传恶意SVG文件,当管理员或其他用户查看该文件时,将触发任意JavaScript代码执行,进而导致权限提升,从普通编辑者接管为管理员权限。

技术细节

该漏洞的根本原因在于phpMyFAQ项目中的`SvgSanitizer.php`文件使用了不完善的正则表达式来过滤SVG内容。攻击者可以利用HTML实体编码技术(例如将`javascript:`编码为`&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;`)来绕过这种基于字符串匹配的检测机制。当具备`edit_faq`权限的攻击者上传精心构造的恶意SVG文件时,服务器端的清洗器无法识别出经过编码的恶意模式,因此允许文件存储。然而,当管理员或其他用户在浏览器中访问并渲染该SVG文件时,浏览器的HTML解析引擎会自动解码这些实体,还原出原始的`javascript:`伪协议并执行其中的Payload。这种存储型XSS攻击使得攻击者能够窃取受害者的Session Cookie,或者利用管理员权限执行恶意操作,从而实现从低权限编辑者向系统管理员的权限提升。

攻击链分析

STEP 1
步骤1
攻击者注册或获取一个具有编辑FAQ权限(edit_faq)的低权限账户。
STEP 2
步骤2
攻击者构造一个包含HTML实体编码的javascript URL的恶意SVG文件,用于绕过正则清洗。
STEP 3
步骤3
攻击者利用编辑权限,将构造好的恶意SVG文件上传至phpMyFAQ服务器。
STEP 4
步骤4
诱导管理员或其他高权限用户查看包含该恶意SVG的FAQ页面。
STEP 5
步骤5
受害者浏览器解析SVG时解码HTML实体并执行恶意JS代码,攻击者以此劫持会话或提升权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- PoC: Malicious SVG file to bypass sanitizer --> <svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"> <!-- HTML entity encoded 'javascript:' string --> <a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;"> <rect width="100%" height="100%" fill="red"/> <text x="50%" y="50%" font-size="20" text-anchor="middle" fill="white">Click Me</text> </a> </svg>

影响范围

phpMyFAQ < 4.1.1

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用SVG文件上传功能,或对上传的SVG文件进行严格的二次人工审核和隔离处理。

参考链接

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