预警范围:
使用了Spring MVC框架的应用系统且jdk版本>=9
漏洞描述:
SpringMVC框架的参数绑定功能提供了将请求中的参数绑定控制器方法中参数对象的成员变量,攻击者通过构造恶意请求获取AccessLogValve对象并注入恶意字段值触发pipeline机制可写入任意路径下的文件。有专业机构监测发现该漏洞已被攻击者利用,漏洞细节已经在小范围公开。鉴于Spring MVC 框架应用广泛,请各单位组织排查,有关系统是否使用了受影响的Spring MVC 框架。
危害评估:
漏洞利用难度低,应用范围较广,官方暂未发布修复补丁。
漏洞影响排查方法:
(一) JDK版本号排查
在业务系统的运行服务器.上,执行“java -version” 命令查看运行的JDK版本,如果版本号小于等于8,则不受漏洞影响。
(二)Spring框架使用情况排查
1. 如果业务系统项目以war包形式部署,按照如下步骤进行判断。
(1) 解压war包:将war文件的后缀修改成.zip ,解压zip文件
(2)在解压缩目录下搜索是否存在spring-beans-*. jar格式的jar 文件(例如spring -beans-5.3.16. jar) , 如存在则说明业务系统使用了spring框架进行开发。
(3)如果spring-beans-*. jar文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts. class文件是否存在,如存在则说明业务系统使用了Spring框架开发。
2.如果业务系统项目以jar包形式直接独立运行,按照如下步骤进行判断。
(1)解压jar包:将jar文件的后缀修改成. zip,解压zip文件。
(2)在解压缩目录下搜索是否存在spring-beans-*. jar格式的jar文件(例如spring-beans-5.3. 16. jar) , 如存在则说明业务系统使用了spr ing框架进行开发。
(3)如果spring-beans-*. jar文件不存在,则在解压缩目录下搜索CachedIntrospectionResults. class文件是否存在,如存在则说明业务系统使用了spring框架进行开发。
(三)综合判断
在完成以上两个步骤排查后,同时满足以下两个条件可确定受此漏洞影响:
(1) JDK版本号在9及以上的;
(2)使用了spring框架或衍生框架。
处置建议:
(一) WAP防护
在WAF等网络防护设备上,根据实际部署业务的流量情况,实现对{"class. *", "Class. *","*. class. *”,"*. Class. *”}等字符串的规则过滤,并在部暑过滤规则后,对业务运行情况进行测试,避免产生额外影响。
(二)临时修复措施
目前,spring 官方无官方补丁,建议采用以下二个临时方案进行防护,并及时关注官方补丁发布情况,按官方补丁修复漏洞。
需同时按以下两个步骤进行漏洞的临时修复:
1.在应用中全局搜索@InitBinder注解,看看方法体内是否调用dataBinder. setDisallowedFields方法,如果发现此代码片段的引入,则在原来的黑名单中,添加{' class. *", "Class. *","*. class. *”,"*. Class. *”}。(注:如果 此代码片段使用较多,需要每个地方都追加)
2.在应用系统的项目包下新建以下全局类,并保证这个类被Spring加载到(推荐在Controller所在的包中添加)。完成类添加后,需对项目进行重新编译打包和功能验证测试。并重新发布项目。
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 ;
@ControllerAdvice
@Order( 10000 )
public class GlobalControllerAdvice {
@InitBinder
public void setAl lowedFields ( webdataBinder dataBinder) {
String[ ]abd=new
string[ ]{"class.*","Class.*","*.class.*","*.Class. *"};
dataBinder . setDisallowedFields (abd) ;
}
}
本文来源:杭州默安科技有限公司应急响应中心