报告编号: B6-2018-040901
报告来源: 360-CERT
报告作者: 360-CERT
更新日期: 2018-04-09
2018年4月5日,Pivotal Spring官方发布安全公告,Spring框架中存在三个漏洞,其中编号为CVE-2018-1270的漏洞可导致远程代码执行。
360-CERT通过对此漏洞进行了相关分析,认为漏洞影响严重;目前相关PoC已经被发布,建议相关用户尽快进行评估升级。
Spring框架中通过spring-messaging模块来实现STOMP(Simple Text-Orientated Messaging Protocol),STOMP是一种封装WebSocket的简单消息协议。攻击者可以通过建立WebSocket连接并发送一条消息造成远程代码执行。如果使用了Spring Security项目中的权限认证,可以在一定程度上增加漏洞利用难度。
当Spring MVC的静态资源存放在Windows系统上时,攻击可以通过构造特殊URL导致目录遍历漏洞。
此漏洞触发条件较高:
在Spring MVC或者WebFlux应用把客户端请求再转向另一台服务器的场景下,攻击者通过构造和污染Multipart类型请求,可能对另一台服务器实现权限提升攻击。
Spring表达式语言全称Spring Expression Language,支持查询和操作运行时对象导航图功能.。语法类似于传统EL,而且供额外的功能,能够进行函数调用和简单字符串的模板函数。
SpEL用法
String expression = "T(java.lang.Runtime).getRuntime().exec(/"calc/")"; String result = parser.parseExpression(expression).getValue().toString();
搭建spring-message 项目 demo
其中静态资源app.js运行在客户端与服务器做websocket交互,使用connect()函数建立Stomp链接
function connect() { var socket = new SockJS('/gs-guide-websocket'); stompClient = Stomp.over(socket); stompClient.connect({}, function (frame) { setConnected(true); console.log('Connected: ' + frame); stompClient.subscribe('/topic/greetings', function (greeting) { showGreeting(JSON.parse(greeting.body).content); }); }); }
增加一个header头部,添加selector项,value为payload,Stomp协议规范中通过指定selector对订阅的信息进行过滤
Web应用在handleMessageInternal对消息进行处理,注册订阅者registerSubscription,最后调用DefaultSubscriptionRegistry函数对header参数进行处理,对selector值进行了解析,并将其保存至这次会话中。
点击send向服务器发送任意消息。Spring 在向订阅者分发消息时会调用filterSubscription对消息进行过滤,会执行 expression.getValue(context, Boolean.class)
造成任意命令执行
补丁地址
-import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.expression.spel.support.SimpleEvaluationContext;
删除了 StandardEvaluationContext
引用,采用了 SimpleEvaluationContext
, StandardEvaluationContext
可以执行任意SpEL表达式,Spring官方在5.0.5之后换用 SimpleEvaluationContext
,用于实现简单的数据绑定,保持灵活性减少安全隐患
SimpleEvaluationContext地址
StandardEvaluationContext地址
2018-04-05Spring官方发布公告
2018-04-09360-CERT发布分析预警通告
https://xz.aliyun.com/t/2252
https://pivotal.io/security/cve-2018-1270
https://pivotal.io/security
声明:本文来自360CERT,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如需转载,请联系原作者获取授权。