当前位置: 首页 > 科技观察

Log4j还未平整,Spring高危漏洞又现!

时间:2023-03-12 09:17:01 科技观察

Spring是JavaEE编程领域流行的开源框架。该框架创建于2002年,旨在解决企业级编程开发的复杂性、业务逻辑层与其他层的松耦合,因此将面向接口的编程思想贯穿于整个系统应用,实现面向应用的敏捷开发框架。目前,Spring框架已经被大量企业广泛采用,包括科技巨头,以及一些“无服务器”(serverless)服务商。据外媒消息,近日Spring官方在github上更新了一个可能导致命令执行漏洞的修复代码,已经在网上成功验证。研究院将该漏洞评为高危级别。对于使用JDK9及以上版本的企业,建议尽快开展Spring框架的使用排查和漏洞处置工作。漏洞排查(1)如果业务系统项目以war包形式部署,按以下步骤判断:解压war包:将war文件后缀改为.zip,解压zip文件。在解压目录下搜索spring-beans-*.jar格式的jar文件(如spring-beans-5.3.16.jar)。如果存在,则说明业务系统使用spring框架开发。如果spring-beans-*.jar文件不存在,则在解压目录下查找CachedIntrospectionResuLts.class文件是否存在。如果存在,则说明业务系统是使用Spring框架开发的。(2)如果业务系统项目以jar包形式直接独立运行,按以下步骤判断:解压jar包:将jar文件后缀改为.zip,解压zip文件。在解压目录下搜索spring-beans-*.jar格式的jar文件(如spring-beans-5.3.16.jar)。如果存在,则说明业务系统是使用spring框架开发的。如果spring-beans-*.jar文件不存在,则在解压目录下查找CachedIntrospectionResuLts.class文件是否存在。如果存在,说明业务系统是使用spring框架开发的。漏洞修复目前Spring官方还没有发布漏洞补丁。安全专家推荐以下两种临时方案进行防护,并及时关注官方补丁发布。(1)WAF保护在WAF等网络保护设备上,根据实际部署业务的流量情况,实现“class.*”、“Class.*”、“*.class.*”、“*.Class.*”过滤规则后,测试业务运行,避免额外影响。(2)临时修复措施需要同时按照以下两步进行漏洞临时修复:在应用中全局搜索@InitBinder注解,查看方法体中是否调用了dataBinder.setDisallowedFields方法,而如果找到这段代码片段,则在原来的黑名单中,添加{"class.*","Class.*","*.class.*","*.Class.*"}。在应用系统的工程包下创建如下全局类,并保证该类被Spring加载(建议添加到Controller所在包中)。添加类后,项目需要重新编译、打包和功能验证。并重新发布项目。导入org.springframework.core.annotation.Order;导入org.springframework.web.bind.WebDataBinder;导入org.springframework.web.bind.annotation.ControllerAdvice;导入org.springframework.web.bind.annotation.InitBinder;@ControllerAdvice@Order(10000)publicclassGlobalControllerAdvice{@InitBinderpublicvoidsetAllowedFields(webdataBinderdataBinder){String[]abd=newstring[]{"class.*","Class.*","*.class.*",“*。班级。*”};dataBinder.setDisallowedFields(abd);}}