Spring Security SAML和本周的SAML漏洞

工程 | Rob Winch | 2018年3月1日 | ...

本周,软件界发现并公布了影响多个实现的SAML漏洞。如果您使用Spring Security SAML的默认设置,则不会受到此漏洞的影响。

Spring Security SAML使用的底层实现是Shibboleth的OpenSAML Java库。OpenSAML Java实现并未列在包含该漏洞的库中(Shibboleth openSAML C++版本存在漏洞)。但是,如果ParserPool进行了自定义,您可能会受到影响。

不安全的配置

具体来说,如果应用程序显式地将BasicParserPoolStaticBasicParserPool设置为ignoreComments = false,则容易受到攻击。例如,以下配置是不安全的

使用StaticBasicParserPool的不安全Java配置

// NOT secure!!!
@Bean(initMethod = "initialize")
ParserPool parserPool() {
    StaticBasicParserPool pool = new StaticBasicParserPool();
    // DO NOT set ignoreComments = false opens up exploit
    pool.setIgnoreComments(false);
    return pool;
}

使用BasicParserPool的不安全Java配置

// NOT secure!!!
@Bean
ParserPool parserPool() {
    BasicParserPool pool = new BasicParserPool();
    // DO NOT set ignoreComments = false opens up exploit
    pool.setIgnoreComments(false);
    return pool;
}

使用StaticBasicParserPool的不安全XML配置

<!-- NOT secure!!! -->
<bean id="parserPool" init-method="initialize"
           class="org.opensaml.xml.parse.StaticBasicParserPool">
    <!-- DO NOT set ignoreComments = false opens up exploit -->
    <property name="ignoreComments" value="false"/>
</bean>

使用BasicParserPool的不安全XML配置

<!-- NOT secure!!! -->
<bean id="parserPool" class="org.opensaml.xml.parse.BasicParserPool">
    <!-- DO NOT set ignoreComments = false opens up exploit -->
    <property name="ignoreComments" value="false"/>
</bean>

安全的配置

以下配置是安全的

使用StaticBasicParserPool的安全Java配置

@Bean(initMethod = "initialize")
ParserPool parserPool() {
    StaticBasicParserPool pool = new StaticBasicParserPool();
    // ignoreComments default is true (safe)
    return pool;
}

使用BasicParserPool的安全Java配置

@Bean(initMethod = "initialize")
ParserPool parserPool() {
    BasicParserPool pool = new BasicParserPool();
    // ignoreComments default is true (safe)
    return pool;
}

使用StaticBasicParserPool的安全XML配置

<bean id="parserPool" class="org.opensaml.xml.parse.StaticBasicParserPool">
    <!-- ignoreComments default is true (safe) -->
</bean>

使用BasicParserPool的安全XML配置

<bean id="parserPool" init-method="initialize"
           class="org.opensaml.xml.parse.BasicParserPool">
    <!-- ignoreComments default is true (safe) -->
</bean>

不安全的ParserPool配置

现在可能是回顾更多不安全配置的好时机。具体来说,以下ParserPool属性是不安全的

  • expandEntityReferences设置为true是不安全的。

  • javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING设置为false是不安全的。

  • [http://apache.org/xml/features/disallow-doctype-dec](http://apache.org/xml/features/disallow-doctype-dec)设置为false是不安全的。这是一个Xerces特有的特性,包括Oracle和OpenJDK JRE提供的内部JAXP实现等衍生产品。对于其他JAXP实现,请阅读您特定实现的文档,了解如何实现类似的配置。

  • ignoreComments设置为false是不安全的(如本文所述)

获取Spring时事通讯

通过Spring时事通讯保持联系

订阅

领先一步

VMware提供培训和认证,以加速您的进步。

了解更多

获得支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看Spring社区中所有即将举行的活动。

查看全部