漏洞描述
Spring 是一个开放源代码的设计层面框架,是为了解决企业应用开发的复杂性而创建的。它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
当用到 Spring 的参数绑定功能,同时 Spring core 运行在 jre/jdk/openjdk 9 以上的版本时, class 新增了 getModlue()方法,可以通过其来获取 classLoader,从而绕过现有的 spring 的 java.lang.class.classLoader 黑名单防御机制,达到调用 classLoader 的目的,配合不同的 Loader 的 tter、getter 方法,达到命令执行或任意文件读写等一系列效果。
例如:环境中使用的 tomcat 的 webappsclassloader,通过 get 方法依次获取到
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/loader/Web appClassLoaderBa.html#getResources()
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/WebResourc eRoot.html#getContext()
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/Container. html#getParent()
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/Container. html#getPipeline()
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/Pipeline.h tml#getFirst()
getFirst 获取到的 Valve 为
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/valves/Acc
essLogValve.html 从而进行文件写入操作。
漏洞利用条件1.JDK/JRE/OpenJDK 版本: 9 及以上;
2.使用了 Spring-beans 包;
3.使用了 Spring 参数绑定;
4.Spring 参数绑定使用的是非基本参数类型,例如一般的 POJO 即可;
注:不是 java+Spring 就一定存在漏洞,还要根据具体业务代码来进一步判断。
已知受影响应用Tomcat
其他暂未确定
修复建议官方暂时还未进行任何更新,临时建议:
1.在应用组全局搜索@InitBinder 注解,看看方法体内是否调用dataBinder.tDisallowedFields 方法,如果发现此代码片段的引入,则在原来的黑名单中添加{"class.*","Class.*","*.class.*","*.Class.*"}。(注:如果此代码片段使用较多,则需要每个地方都追加)
2.在应用系统的项目包下新建以下全局类,并保证这个类被 Spring 加载到(推荐在Controller 所在的包中添加)。完成类添加后,需对项目进行重新编译打包和功能验证测试,并重新发布项目。
即时检测检测逻辑:检查当前系统中是否存在 spring-beans jar 包(包含 SpringBoot 子包以及 war 包启动方式)及关联 java 进程版本是否大于等于 9。
by【青藤】
本文发布于:2023-02-28 20:12:00,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/167766248278706.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:eroot(荣耀60seroot).doc
本文 PDF 下载地址:eroot(荣耀60seroot).pdf
留言与评论(共有 0 条评论) |