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模板块,下面逐一分析:
存在的敏感方法@Nullablepublic String[] decode(String content) throws IOException {
return (String[])this.objectMapper.readValue(content, String[].class);
}
反序列化使用的jackson组件,但是没有开启autotype功能,并且代码指定了反序列化类型为String[].class,利用jndi注入方式会导致异常,没有成功。image.png
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
版权属于:逍遥子大表哥
本文链接:https://cloud.tencent.com/developer/article/1920456
按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。