miniOrange SAML WordPress 插件曝两处认证绕过漏洞,CISA 警告攻击已在野

事件概述

2026 年 8 月,WordPress 生态最广泛部署的 SAML 2.0 单点登录插件之一——Xecurify miniOrange SAML 2.0 Single Sign-On被披露存在两个严重的身份认证绕过漏洞,编号分别为 CVE-2026-61979(CVSS 8.1)与 CVE-2026-15981(CVSS 9.8)。两者均属 CWE-287/295 类缺陷,根因在于 mo_saml_validate_signature() 函数对 OpenSSL 返回值的布尔检查过于宽松:OpenSSL 验证失败时返回 0,被错误地等同于验证成功(true)。DigitalOcean 安全团队在自家管理控制台日志中发现异常管理员会话请求,确认这两个漏洞已遭到在野主动利用,且多个 IP 段持续对互联网暴露的 WordPress 站点进行机会主义扫描。

免费版 miniOrange SAML 已在早期版本中修复,但付费版用户中相当一部分仍未升级。同时开源 Patchstack 与商业防御方均已公开发布探测 PoC,使漏洞利用门槛进一步降低。

技术细节

CVE-2026-61979:签名算法混淆

miniOrange 在 SAML 响应验签时存在算法混淆缺陷:攻击者通过篡改 SAML Response 中的签名算法标识符、附加构造的 SignInfo 结构,绕过原本要求的严格算法白名单。由于 miniOrange 历史上对 SAML 算法白名单维护不严,攻击者可指定一个空算法或低强度算法,导致插件误用宽松路径处理签名,进入”接受”分支。

CVE-2026-15981:openssl_verify() 布尔检查错误

关键缺陷函数极简示意:

$result = openssl_verify($data, $signature, $public_key, OPENSSL_ALGO_SHA256);
if ($result) {
    // 验证通过:放行用户登录
}
if ($result === 1) {
    // 真正"通过且签名有效"的语义分支
}
// 缺省分支未做异常处理

由于 openssl_verify() 在签名验证失败时返回 0、在签名无效时返回 -1、成功时返回 1,任何返回值都被宽松地视为真值。攻击者只需构造一个格式合法但签名错误的 SAMLResponse,$result 落在 -1 或 0,宽松条件依旧成立,验证函数返回 success,登录随即被允许。

组合利用路径

  • 攻击者先枚举目标站点是否启用 miniOrange SAML SSO(公开文档与默认配置)
  • 构造附带畸形签名算法标识 + 格式合法但签名错误的 SAMLResponse
  • 将 SAMLResponse 提交到 /?option=mosaml_metadata&action=validate/wp-login.php?SAMLRequest=... 入口
  • 若用户已配置 NameID 字段(如 email),SAML 引擎为该字段绑定一个本地用户,攻击者即获得该用户的会话——若字段对应管理员,攻击者直接获得后台管理员权限
  • 落地后用 admin 权限上传恶意插件、修改主题文件 function.php、注入 PHP WebShell,并通过独立 Redis 或计划任务保证重启后继续存在

影响评估

两处漏洞 CVSS 评分组合后实际威胁已达”互联网级高危”:

  • 利用门槛:极低,Patchstack 等机构公开发布了完整 PoC;攻击者无需 WordPress 账号、无需现代密码学知识
  • 利用条件:只需要目标站点可通过 HTTP(S) 访问 miniOrange SAML 入口即可触发,无需认证、无需用户交互
  • 破坏广度:miniOrange SAML 在企业 SSO、教育机构、政府部门中部署量极大,一旦被攻破可造成大面积账号接管,进一步形成横向跳板
  • 连锁影响:管理员被接管后可发布钓鱼内容、植入 SEO 黑链、推送恶意更新、注入 e-skimming 脚本;与供应链攻击、勒索软件投放高度耦合
  • 合规风险:触发 PCI DSS 4.0 强认证控制(控制项 8.2.1)、NYDFS 23 NYCRR 500(500.12 多因素认证)等合规要求违规,事件响应与告知义务同时触发

修复建议

  • 立即升级:将 miniOrange SAML SSO 插件升级到 17.0.6 及以上版本(CVE-2026-61979 需 ≥17.0.5;CVE-2026-15981 需 ≥17.0.6),升级后强制审计所有管理员会话与未知 IP 登录
  • 紧急缓解:在 WAF 中拦截可疑 SAMLResponse 负载(SAMLResponse= 后无 Signature 字段、SigAlg 异常值);在反代层临时阻断 /?option=mosaml_metadata*/wp-login.php?*SAML* 入口
  • 会话全清:立即吊销所有管理员会话、重置高权限账号密码、要求所有管理员启用硬件 MFA(FIDO2/WebAuthn 优先)
  • 第三方监测:开启 Wordfence、Huntress、Sucuri 等专业 WordPress 安全插件的扫描;将 SAML 入口的访问日志接入 SIEM 并配置告警(异常签名失败频次、同一 IP 多目标扫描)
  • 合规告知:依据 GDPR、CCPA、HIPAA 等法规触发告知义务;与监管方、合作伙伴、客户及时同步已确认的攻击面与已采取的处置步骤
  • 供应链治理:对所有第三方插件建立 SBOM,记录补丁版本与 CVE 关联;将 miniOrange 等 SAML 类高敏感插件纳入季度复审清单
  • 回滚与应急:保留 7 天内的数据库与文件快照,便于在确认失陷后快速回滚至可信基线;演练”管理员会话被劫持”的应急剧本

检测规则参考

# WordPress 访问日志:SAML 入口异常签名失败集中爆发
awk '$7 ~ /SAML/' /var/log/nginx/access.log | grep -E 'SigAlg.*http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig-more' | awk '{print $1}' | sort | uniq -c | sort -rn | head

# 数据库:管理员 session 异常生成
SELECT user_id, IP, FROM_UNIXTIME(issued) FROM wp_usermeta
WHERE meta_key='session_tokens' AND issued > UNIX_TIMESTAMP(NOW() - INTERVAL 1 HOUR);

# 文件落地:上传/修改主题/插件文件
find /var/www/html/wp-content -name '*.php' -newer /var/www/html/wp-config.php -mmin -60

参考来源