β

CVE-2018-1270:spring-messaging远程代码执行漏洞分析预警

Harries Blog™ 575 阅读

报告编号: B6-2018-040901

报告来源: 360-CERT

报告作者: 360-CERT

更新日期: 2018-04-09

漏洞 概述

2018年4月5日,Pivotal Spring官方发布 安全 公告,Spring框架中存在三个漏洞,其中编号为CVE-2018-1270的漏洞可导致远程 代码 执行。

360-CERT通过对此漏洞进行了相关分析,认为漏洞影响严重;目前相关PoC已经被发布,建议相关用户尽快进行评估升级。

漏洞影响面

影响版本

  1. Spring Framework 5.0 to 5.0.4.
  2. Spring Framework 4.3 to 4.3.14
  3. 已不支持的旧版本仍然受影响

    修复版本

  4. 5.0.x 用户升级到5.0.5版本
  5. 4.3.x 用户升级到4.3.15版本

    漏洞详情

CVE-2018-1270

Spring框架中通过 spring -messaging模块来实现STOMP(Simple Text-Orientated Messaging Protocol),STOMP是一种封装WebSocket的简单消息 协议 。攻击者可以通过建立WebSocket连接并发送一条消息造成远程代码执行。如果使用了 Spring Security 项目中的权限 认证 ,可以在一定程度上增加漏洞利用难度。

CVE-2018-1271

当Spring MVC的静态资源存放在Windows系统上时,攻击可以通过构造特殊URL导致 目录 遍历 漏洞。

此漏洞触发条件较高:

  1. Server运行于Windows系统上
  2. 文件系统 提供的文件服务(比如使用file协议,但不是file open)
  3. 没有使用CVE-2018-1199漏洞的补丁
  4. 不使用Tom cat 或者是WildFly做Server

CVE-2018-1272

在Spring MVC或者WebFlux应用把客户端请求再转向另一台 服务器 的场景下,攻击者通过构造和污染Mult ip art类型请求,可能对另一台服务器实现权限提升攻击。

CVE-2018-1270漏洞分析

SpEL

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 运行在客户端与服务器做 web socket交互,使用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);             });         });     }

Step1

增加一个header头部,添加selector项, value 为payload,Stomp协议规范中通过指定selector对订阅的信息进行过滤

CVE-2018-1270:spring-messaging远程代码执行漏洞分析预警

Web应用在handleMessageInternal对消息进行处理,注册订阅者registerSubscription,最后调用DefaultSubscriptionRegistry函数对header 参数 进行处理,对selector值进行了 解析 ,并将其保存至这次会话中。

CVE-2018-1270:spring-messaging远程代码执行漏洞分析预警

Step2

点击send向服务器发送任意消息。Spring 在向订阅者分发消息时会调用filterSubscription对消息进行过滤,会执行 expression.getValue(context, Boolean.class) 造成任意命令执行

CVE-2018-1270:spring-messaging远程代码执行漏洞分析预警

补丁分析

补丁地址

-import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.expression.spel.support.SimpleEvaluationContext;

CVE-2018-1270:spring-messaging远程代码执行漏洞分析预警

删除 StandardEvaluationContext 引用,采用了 SimpleEvaluationContext , StandardEvaluationContext 可以执行任意SpEL表达式,Spring官方在5.0.5之后换用 SimpleEvaluationContext ,用于实现简单的 数据 绑定,保持灵活性减少安全隐患

SimpleEvaluationContext地址

StandardEvaluationContext地址

时间 线

2018-04-05Spring官方发布公告

2018-04-09360-CERT发布分析预警通告

参考链接

  1. https ://xz.aliyun.com/t/2252

  2. http s://pivotal.io/security/cve-2018-1270

  3. https://pivotal.io/security

声明:本文来自360CERT,版权归作者所有。 文章 内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如需转载,请联系原作者获取授权。

原文

https://www.secrss.com/articles/1908

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。 PS:如果您想和业内技术大牛交流的话,请加qq群(474807195)或者关注微信公众号(AskHarries),谢谢!

转载请注明原文出处: Harries Blog™ » CVE-2018-1270:spring-messaging远程代码执行漏洞分析预警

作者:Harries Blog™
追心中的海,逐世界的梦

发表评论