壹-漏洞介绍 Spring 是一个支持快速开发 Java EE 应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发 Java EE 应用程序的必备。该漏洞是由于 Spring Framework 未对传输的数据进行有效的验证,攻击者可利用该漏洞在未授权的情况下,构造恶意数据进行远程代码执行攻击,最终获取服务器权限。 贰-攻击场景 攻击场景如下:* JDK9及其以上版本;* 使 了Spring-beans包;* 使 了Spring参数绑定;* Spring参数绑定使 的是 基本参数类型,例如 般的POJO即可。 叁-漏洞分析 该漏洞基本使 式就是利 . 的形式给参数进 赋值,实际赋值过程会使 反射调 参数的 getter or setter 。它需要绑定的参数的数据结构是 个简单的POJO,具体如下: Controller写法如下: 参数绑定的整个流程如下: 流程 会有 个 class 属性缓存: 简单的就可以获取到 class 对象,那剩下的就是利 这个 class 对象构造利 链了。 前 较简单的 式就是修改Tomcat的 志配置,向 志中写 shell。 条完整的利 链如下: 具体的攻击步骤如下,先后发送5个请求: 发送完毕这5个请求后,Tomcat的 志配置被修改成如下: 接着,我们只需要随便发送 个请求,加 个header,即可写 shell: 可以正常访问shell: 肆-漏洞复现 Spring可以和大量常用的开源框架无缝集成,可以说是开发 Java EE 应用程序的必备。该漏洞是由于 Spring Framework 未对传输的数据进行有效的验证,攻击者可利用该漏洞在未授权的情况下,构造恶意数据进行远程代码执行攻击,最终获取服务器权限。 VULFOCUS靶场找到"Spring Framework 远程命令执行漏洞",启动创建一个靶场: 使用公开EXP,获取shell地址: 浏览器访问shell地址,发现whoami命令已经被执行: 尝试将whoami修改为创建/删除文件夹。 创建文件夹test: 删除文件夹test: 伍-修复建议 一、官方修复建议: 当前Spring Framework 官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下: https://github.com/spring-projects/spring-framework/tags 注:SpringFramework 5.3.18和Spring Framework 5.2.20是 Spring 官方提供的两个安全版本。(截止至3月31日) 二、临时修复建议: 该临时修复建议存在一定风险,建议用户可根据业务系统特性审慎选择采用临时修复方案,需同时按以下两个步骤进行漏洞的临时修复: 步骤1.在应用中全局搜索@InitBinder注解,看看方法体内是否调用dataBinder.setDisallowedFields方法,如果发现此代码片段的引入,则在原来的黑名单中,添加{"class.*","Class.*","*. class.*", "*.Class.*"}。(注:如果此代码片段使用较多,需要每个地方都追加。) 步骤2. 在应用系统的项目包下新建以下全局类,并保证这个类被 Spring 加载到(推荐在Controller所在的包中添加)。完成类添加后,需对项目进行重新编译打包和功能验证测试,并重新发布项目。