CVE-2026-4336WordPress插件The Ultimate FAQ Accordion在2.4.7及之前版本中存在存储型跨站脚本(XSS)漏洞。该漏洞源于插件在渲染FAQ内容时调用html_entity_decode()函数,将HTML实体编码转换回可执行的HTML,且输出时缺乏足够的转义处理。由于该插件的自定义文章类型支持REST API,拥有Author及以上权限的认证攻击者可以通过REST API提交恶意编码的HTML载荷。这些载荷在保存时绕过了WordPress的kses过滤,但在渲染时被解码并执行,导致任意Web脚本注入。
该漏洞的技术核心在于插件对用户输入的处理逻辑存在双重缺陷。首先,插件注册了ufaq自定义文章类型,并设置show_in_rest为true,且默认使用post的权限类型,这使得Author级别的用户可以通过REST API创建和发布FAQ。其次,在View.FAQ.class.php文件的set_display_variables()函数中(第746行),插件对post_content调用了html_entity_decode()。这意味着攻击者提交的经过HTML实体编码的恶意载荷(如<img src=x onerror=alert()>)在保存时会被WordPress的kses机制视为普通文本而放过。然而,当FAQ页面被访问时,插件在faq-answer.php模板中直接输出经过html_entity_decode()解码后的内容,且未使用wp_kses_post()进行二次过滤。这种解码与输出逃逸的结合,使得存储在数据库中的实体编码被还原为可执行的HTML/JavaScript代码,从而触发存储型XSS。