乐于分享
好东西不私藏

SAML SSO 插件认证绕过 CVSS 9.8 CVE-2026-15981

SAML SSO 插件认证绕过 CVSS 9.8 CVE-2026-15981

⚠️ 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 —