【安全公告】Spring Framwork远程命令执行漏洞预警
信息安全学习分享平台
一、漏洞概况
3月29日,Spring框架曝出框架远程命令执行漏洞,攻击者利用该漏洞,可在未授权的情况下远程执行命令。

作为目前全球最受欢迎的Java轻量级开源框架,Spring允许开发人员专注于业务逻辑,简化Java企业级应用的开发周期。
但在Spring框架的JDK9版本(及以上版本)中,远程攻击者可在满足特定条件的基础上,通过框架的参数绑定功能获取AccessLogValve对象并注入恶意字段值,从而触发pipeline机制并写入任意路径下的文件。
这次确定spring核心框架的RCE漏洞,CVE号为CVE-2022-22965。

目前官网也及时给出了修复包,可以在文末的网址更新存在漏洞的spring版本。

二、漏洞分析
【1.漏洞原理】
在web请求中,如http://127.0.0.1:80/index?id=10,当服务器收到这个请求的时候,对于id这个参数的处理,需要查找id的class属性名(即这个id的数据类型),并把10这个值赋给这个class。spring框架的处理逻辑是:收到这个请求之后加载我们定义好的id的class类文件,然后在内存中写上这个变量id=10。
但是实际用函数实现的时候,spring框架接收到id这个变量的时候,先在cache缓存中查找相关变量,如果未查到,再初始化id这个数据结构。

问题在于对缓存中的变量访问是没有限制的,逻辑上只要我们请求的参数名称在cache中,那么就会直接对cache的变量进行赋值。
日志函数通常会执行定时写任务,写的内容都是结构化的数据:文件后缀名、文件路径......这些结构化数据都是存放在cache中的。
利用上述的逻辑,我们可以直接修改cache缓存中日志函数变量,实现写入我们想要写入的文件的目的。

【2.漏洞思路】
1). 在上传web参数时将参数名设置成日志函数存在cache中的变量名,日志函数执行写入操作时即可以写入任意名称的文件到web的根目录下面;
2). 通过改造web请求包,向文件写入可执行代码,作为后门以供使用;
3). 在web请求中访问恶意页面文件,上传执行命令。
三、缓解措施
目前,聚铭安全产品已支持检测该漏洞的检测。
建议受漏洞影响的产品(服务)厂商和信息系统运营者尽快进行自查,并及时升级至最新版本:
https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
四、声明
本安全公告仅用来描述可能存在的安全问题,不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。
(来源:知乎)
发表评论