搜索
查看: 2001|回复: 0

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

[复制链接]

651

主题

944

帖子

2425

积分

管理员

本论坛第一帅

Rank: 9Rank: 9Rank: 9

积分
2425

热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2018-4-29 08:02:53 来自手机 | 显示全部楼层 |阅读模式
影响版本

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注入方式会导致异常,没有成功。image.png
分析spring-message模块

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

点击Connet按钮抓包image.png修改请求报文,插入如下字段
nselector:new java.lang.ProcessBuilder("/Applications/Calculator.app/Contents/MacOS/Calculator").start()image.png回到聊天窗口,发送任意消息即可触发恶意代码。image.pngimage.pngimage.png
修复方案

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表