⚠️ SAML SSO 插件认证绕过 CVSS 9.8
CVE-2026-15981 miniOrange SAML 2.0 SSO ≤ 5.4.4 无需登录直接接管管理员
⚠️ CVSS 9.8 CRITICAL
攻击向量:网络 | 攻击复杂度:低 | 所需权限:无 | 用户交互:无
漏洞描述
WordPress 插件 miniOrange SAML 2.0 Single Sign On – SSO Login(以下简称 SAML SSO)在 ≤ 5.4.4 版本中存在严重认证绕过漏洞。
根本原因:插件在验证 SAML 响应签名时,使用了 PHP 的松散比较(loose comparison)来判断 openssl_verify() 的返回值。该函数在签名验证失败时会返回 -1,而松散比较将 -1 视为 true,导致任意构造的恶意 SAML 响应都能通过签名校验。
攻击者可构造一个特殊的 SAMLResponse 直接获取任意用户的 WordPress 会话 cookie,无需任何凭证即可登录管理员账户。
影响版本
插件:miniOrange SAML 2.0 Single Sign On – SSO Login
版本:≤ 5.4.4
类型:WordPress 插件
CWE:CWE-287(认证不当)
修复版本
SAML SSO ≥ 5.4.5
FOFA 语法
body="miniOrange" && body="saml" && body="wp-content/plugins"
漏洞分析
问题出在 mo_saml_validate_signature() 函数的签名验证逻辑中:
// PHP 代码片段
$verify = openssl_verify($data, $signature, $pubKey, OPENSSL_ALGO_SHA256);
// 松散比较:-1 被当作 true
if ($verify == true) {
// 通过验证,设置认证 cookie
wp_set_auth_cookie($user->ID, true);
}openssl_verify() 返回值说明:
1 = 签名验证通过 0 = 签名验证失败 -1 = 错误(如算法不匹配、密钥格式错误等)
使用 == true(松散比较)时,PHP 会将 -1 转换为布尔值 true。攻击者只需构造一个带有错误签名算法的 SAML 响应,使 openssl_verify() 返回 -1,即可绕过认证。
漏洞复现
攻击流程
Step 1. 构造恶意的 SAMLResponse XML
包含损坏的签名(使用无效算法或格式错误的密钥)
Step 2. POST 到 WordPress SAML 回调端点
POST /wp-login.php?action=miniorange-saml-response
SAMLResponse=<base64编码的恶意SAML响应>
Step 3. 插件调用 openssl_verify() 验证签名
由于使用了无效算法,openssl_verify() 返回 -1
Step 4. 松散比较将 -1 视为 true
if ($verify == true) → 通过!
Step 5. 插件调用 wp_set_auth_cookie()
攻击者获得管理员会话 cookie,无需密码即可登录PoC 使用
git clone https://github.com/Nxploited/CVE-2026-15981.git cd CVE-2026-15981 pip install -r requirements.txt python CVE-2026-15981.py https://target.com
PoC 仓库
https://github.com/Nxploited/CVE-2026-15981 (Nxploited)
参考链接
NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-15981 PoC: https://github.com/Nxploited/CVE-2026-15981
⚠️ 安全提示
本文仅用于安全研究与学习目的。请勿用于非法用途。请在授权环境中测试。
— EOF —
夜雨聆风