CVE-2018-1270 Remote Code Execution with spring-messaging

2018-04-08 8,883

影响版本

Spring Framework 5.0 to 5.0.4
Spring Framework 4.3 to 4.3.14

漏洞分析

Spring Framework通过spring-messageing模块和STOMP代理对象通讯。根据漏洞描述可以知漏洞出现在spring-message模块 或者是 stomp-websockets模板块,下面逐一分析:

spring-websockets 模块

存在的敏感方法@Nullablepublic String[] decode(String content) throws IOException {
return (String[])this.objectMapper.readValue(content, String[].class);
}
反序列化使用的jackson组件,但是没有开启autotype功能,并且代码指定了反序列化类型为String[].class,利用jndi注入方式会导致异常,没有成功。

rce1.png

分析spring-message模块

DefaultSubscriptionRegistry类中方法addSubscriptionInternal存在expression = this.expressionParser.parseExpression(selector)(危险的SPEL表达式语句)。
根据上下文可以初步判定selector参数可以控制,但是了解SPEL注入的同学应该知道,要想达到代码执行,需要调用expression.getValue()或者expression.setValue()方法。继续寻找会发现该文件的154-164行调用了expression对象的getValue方法。
###复现下漏洞的触发流程:
点击Connet按钮抓包

rce2.png

修改请求报文,插入如下字段
\nselector:new java.lang.ProcessBuilder("/Applications/Calculator.app/Contents/MacOS/Calculator").start()

rce3.png

回到聊天窗口,发送任意消息即可触发恶意代码。

rce4.png

rce5.png

rce6.png

修复方案

5.0.x users should upgrade to 5.0.5
4.3.x users should upgrade to 4.3.15

本文作者:0c0c0f

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/70326.html

Tags:
评论  (0)
快来写下你的想法吧!

0c0c0f

文章数:4 积分: 35

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号