Spring RCE 0day漏洞到底是真是假?
哈喽,大家好,我是指北君
。
不知道昨晚大家有没有看到Spring框架曝出RCE 0day漏洞,是填上次漏洞的天坑?
还是逃过了上一劫,却遇到了这一劫呢?天道好轮回,苍天饶过谁?
漏洞
在Spring框架的JDK9版本(及以上版本)中,远程攻击者可在满足特定条件的基础上,
通过框架的参数绑定功能获取AccessLogValve对象并注入恶意字段值,从而触发pipeline机制并 写入任意路径下的文件。
指北君在网上给大家找了个有鼻子有眼的文章,阅读量还不少。
指北君今天也尝试去找了相关的发布源头,既没有找到所谓的“广东省网络安全应急响应平台”,
也没有找到各种相关文章所提到的具体发布地址。
同时也看到一些说复现的文章和截图,真真假假,假假真真。
如果真是这样,我看到的这个段子,将不是段子。
这将是史诗级打脸现场。
当然了指北君下面也给出改漏洞的排查方法不怕一万就怕万一,总要提前了解一下。
排查方法
JDK9及以上
项目中使用了spring-beans*.jar 或 存在CachedIntrospectionResults.class文件
解决方案
目前Spring还没有具体的解决方案,目前可以采用以下两种临时方案进行防护。
- WAF等防护系统上添加过滤规则
对 “class.”,“Class.”,“.class.”,“.Class.” 等字符串进行过滤,同时可能产生额外影响。
如果有多个项目存在安全隐患采用这个方法,较为便捷。 - 在单个项目下添加规则限制
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
@Order
@ControllerAdvice
public class SpringRCE0Day{
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
String[] fields= new String[]{"class.*",
"Class.*", "*.class.*", "*.Class.*"};
dataBinder.setDisallowedFields(fields);
}
}
如果说就涉及及个别项目这种方式影响会更小一点。改动后记得重新发布呦。
影响范围
指北君在自己项目搜索了一下。
只要使用了Spring框架,谁能逃得掉第二点呢?只能庆幸自己没有使用JDK9了吧?
整个Spring都是围绕着这个spring-beans*.jar的。
而整个Java估计90%都是围绕Spring的吧。
那影响范围还不如直接定义为,使用JDK9及以上版本的项目。
可以看出如果真的有问题影响面还是非常大的。
后续
我们去GitHub上看看是否有相关的问题。
确实有人已经说了这个问题但是目前官方没有给出明确答案。
然后指北君又找到了这个。
恰巧在出问题的时间,sbrannen
提交了一个SerializationUtils相关的代码合并,
然后一度被人认为是官方偷偷修改了bug,但是你好好看下代码就会发现,其实就是把一个返回值封装成了一个clone方法,
最后 sbrannen
也表示Spring并没有使用 SerializationUtils 去反序列化一个不受信任的对象。
直到指北君看到了这个,才觉得这个漏洞真实了几分。
由于涉及安全的东西我就不放太多料了。感兴趣的朋友可以跟一下。
目前官方还没有给出明确答复和修复方案。
Spring 最近爆出的另外两个漏洞
SpEL导致的Spring&Spring Cloud Function的漏洞,已经公布了修复方案直接升级版本即可。
指北君有话说
好了今天就到这里吧,我要亲自去试一下。 真的情况多一点,真的假不了,假的真不了,希望各位还是做好充足准备。
反正指北君代码已经加上了,等待公司通知。
在上海的小伙伴最近注意个人防护,最近上海疫情看起来还是挺吓人的。准备好充足的食物。祝大家平安无事。
关注开源指北公众号,后台回复888
获取相关资料。
这里是开源指北,我们立志做最好的开源分享平台,分享各种有趣实用的开源项目。
同时也欢迎加入开源指北交流群,欢迎加入交流群,群里你可以摸鱼、划水、吐槽、咨询,
还有简历模板、各种技术面试资料等100G的资源等着你领取哦。快来一起来聊一聊吧!
以上就是本次推荐的全部内容,我是指北君
,感谢各位的观看。