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