CVE-2026-46360phpMyFAQ 4.1.2之前的版本存在存储型XSS漏洞。由于SvgSanitizer中的decodeAllEntities()方法对递归实体解码限制为5次,攻击者可以利用深度嵌套的与号编码绕过此限制。拥有FAQ_EDIT权限的认证用户可上传恶意SVG文件,当其他用户查看时,将触发解码并执行任意JavaScript代码。
该漏洞的核心在于`SvgSanitizer::decodeAllEntities()`方法的递归深度限制机制。该机制将HTML实体的递归解码次数限制为5次,旨在防止复杂的攻击载荷。然而,攻击者通过构造包含深度嵌套`&`符号的数字HTML实体(例如将`javascript:`中的字符进行多层编码),可以在5次迭代后仍然还原出有效的`javascript:`协议头。拥有FAQ编辑权限的攻击者上传此类恶意SVG文件后,恶意脚本被持久化存储。当管理员或其他用户浏览包含该SVG的FAQ页面时,浏览器解析SVG链接,触发JavaScript执行,从而导致Cookie窃取或会话劫持。