cve漏洞库记⼀次安全漏洞处理过程CVE-2018-3252
问题描述:
部署在⽤户的服务器,扫描系统服务的时候,发现服务器上有weblogic的CVE-2018-3252的漏洞。经过在公司反复验证和查⼤量资料最后确认是端⼝的问题。weblogic默认是7001的端⼝,项⽬的端⼝默认是7001。然后扫描软件⼀般会有固定的验证⽅式确认是否存在该漏洞,⽐如3252的POC(观点证明),就是向7001发起⼀个固定地址的请求如果成功了就说明有漏洞。
解决过程:
因为这个扫描程序是第三⽅提供的,⽽且扫描的报告中并没有说明CVE-2018-3252是在服务器新项⽬中的多少⾏,所以排查问题的时候⼀开始都是再猜是哪⾥的问题。
1.因为扫描报告并没有什么有⽤的信息,除了知道漏洞的编号是多少,于是先去查资料看是什么领域的漏洞,发现是weblogic的反序列化的漏洞,
2.然后就想去官⽹上下载补丁去修复(实际上我们项⽬根本就没⽤到weblogic),oralce官⽹的补丁下载也是⼀个坑,必须有oracle的support identifier的账号才能下载,那么这个账号要怎么获取呢?简单明了的⽅法就是你要购买oralce的产品,付费才有这个账号(真的坑,⽤个开源的java,修复补丁还要收费的账
号才能下载补丁)。于是想了⼀招去万能的淘宝上看看有没有这种账号可以租,搜索到淘宝可以有帮忙下载的补丁的服务,加了商家的问了⼀下,下载⼀次补丁要80RMB。
3.如果不是同事提醒我,可能我还真买了下载补丁的服务了。同事说咱们根本就没⽤weblogic的服务,为啥会有weblogic的漏洞,这句话把我点醒了,
于是就想是不是俺们项⽬中引⽤了weblogic的jar包之类导致的。了⼀圈,实在是没到weblogic服务的包,有⼏个带有weblogic名字的⽅法和类,但是应该不会导致CVE-2018-3252这种发序列化的漏洞。
4.后来⼜想到⼀个⽅法,就是既然有着漏洞出现的话那么我们⽤同样的服务器,代码应该在测试服务器上也会扫描出漏洞,所以就去⽹上了下扫描weblogic的⼯具,在github上到了⼀个python的脚本。因为代码是开源的所以看到了python脚本是怎么检测有没有CVE-2018-3252的漏洞。
这个POC(安防领域的专有名词,⽤来扫描漏洞的特定脚本,查看返回结果是否符合预期,符合的话就是由漏洞),是给服务器的7001端⼝发送带有账密信息的请求,如果返回的是401或者500就说明是有漏洞的,这⾥为啥401和500是确认是有漏洞的可能是因为401未验证,说明这个请求的路是通的,只是没有登录;⽽500说明这个路径的请求也是通的,只是可能参数错误或者内部处理异常。但是只有检测
出401或者500,攻击者就可以⽤这个路径反复的尝试去攻击服务器。所以导致这个POC返回预期的结果是因为我们项⽬设置的端⼝恰好就是7001,⽽⾥⾯也设置了没有登录就会返回401,所以刚好两者条件都符合就被扫描出CVE-2018-3252的漏洞了,闹了个乌龙。
解决⽅式:
1.将后端项⽬中的config的application.yaml⾥⾯的端⼝从7001改为7003,保存退出重启后端。
2.将nginx中映射到后端服务器的配置中的7001改为7003,保存退出⽂件,重启nginx。
总结:
1.解决这次漏洞收获了很多新的知识,⽐如安全领域的⼀些名词POC,CVE等,和扫描漏洞的⽅式,还知道了oracle要修复补丁是要收费的等
2.发现原来扫描漏洞就是⽤⼀组特定的⽅式去试验返回结果,如果是符合预期的结果就是有漏洞。所以⽹上的安全⼯具可能也是这样去检索漏洞,但是实际上未必有漏洞,因为可能被检测的电脑就有各种奇奇怪怪的组合刚好让检测⼯具误以为是有漏洞。如果确定没有漏洞却扫描出奇怪的漏洞要具体问题具体分析,去看扫描漏洞的POC是怎么验证的。
参考资料:
1.
2.
3.
4.
5.
6.