
CENG 325 - مبادئ أمن المعلومات والخصوصية
أعضاء المجموعة
@canumay @aslihann @ezgigucuyener @mburakdonmez
المراجع
Exploit DB - Apache Tika-server < 1.18 - حقن أوامر
Rhino Security Labs - استغلال CVE-2018-1335: حقن أوامر في Apache Tika
إخلاء مسؤولية
كود الاستغلال مكتوب بواسطة باحث الأمن السيبراني David Yesland @Daveysec ويجب استخدامه للأغراض التعليمية فقط.
أ. وصف موجز للثغرة
ب. طريقة استغلال الثغرة
أ. ابحث عن كود استغلال يستغل الثغرة أو قم ببنائه
ب. أبرز أجزاء الكود المعرّضة للخطر واشرح سبب هشاشتها
يقوم خادم أباتشي تيكا بتكوين أمر لتنفيذه، باستخدام القيم التي يقدمها المستخدم في الطلب لتشغيل OCR على الصور. وهذا يسمح للمستخدمين بالعبث بالأمر وتنفيذ كود ضار. في هذه الحالة، يجلب config.getTesseractPath() قيمة ترويسة X-Tika-OCRTesseractPath ويضيفها إلى بداية الأمر. وعلى الرغم من إضافة السلسلة tesseract.exe إلى نهاية المسار الذي يقدمه المستخدم، يمكن للمستخدم أن يحيط مساره بعلامات اقتباس مزدوجة " لتجاهل السلسلة tesseract.exe التالية. وهذا يسمح للمستخدم بتنفيذ أي ملف قابل للتنفيذ على الخادم.
الأمر المُجهز:
"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0
إن CScript.exe المدمج في ويندوز هو لغة برمجة نصية تأخذ اسم ملف لبرنامج نصي وتنفذه وتتجاهل الوسائط الأخرى. وإذا تمكنا من تقديم برنامج نصي مخصص لـ cscript، فيمكننا تنفيذه على الخادم. يأخذ خادم أباتشي تيكا صورتنا المقدمة في نص الطلب (body) ويحفظها في ملف مؤقت لتشغيل OCR، لذا بدلاً من إرسال ثنائي صورة، يمكننا إرسال سلسلة نصية مباشرة وستُحفظ السلسلة كما لو كانت بيانات ثنائية. لكن خادم تيكا يتحقق من أن الثنائي هو صورة، باستثناء نوع الملف jp2 حيث يُحفظ مباشرة. وهذا الملف سيُمرر كوسيطة إلى ملف cscript القابل للتنفيذ. لكن امتداد الملف سيظل .tmp، بينما نحتاج إلى .JScript أو .vbs. لتجاوز ذلك، يمكننا أن نطلب من cscript تشغيل JScript بغض النظر عن امتداد الملف. كما يمرر خادم تيكا config.getPageSetMode() إلى الأمر، وهي القيمة التي يرسلها المستخدم في ترويسة X-TikaOCRLanguage. إذا غيّرناها إلى السلسلة //E:Jscript، فسوف يشغّل cscript البرنامج النصي بصيغة JScript بغض النظر عن امتداد الملف. وأخيرًا، السلسلة المقدمة في نص الطلب ستكون الحمولة (payload) التي سيتم تنفيذها، ويمكنها أيضًا استدعاء وحدة تحكم أخرى للوصول الكامل إلى صدَفَة النظام.
الأمر النهائي المُجهز:
"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0
حمولة بسيطة لاستدعاء الصدفة في Jscript:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
أ. نفّذ كود الاستغلال الذي وجدته أو صممته:
خادم Apache Tika Server 1.17 يعمل داخل الجهاز الافتراضي الهدف.
يمكننا الوصول إلى الخادم من جهازنا المضيف باستخدام العنوان IP “192.168.233.167”.
ثم نفّذنا كود الاستغلال المُجهز مع الحمولة “calc.exe” لتشغيل الآلة الحاسبة داخل الجهاز الهدف، لإظهار أن لدينا القدرة على تنفيذ أي كود ضار داخل الجهاز الهدف. كما يمكننا أيضًا بقوة القوقعة العكسية (reverse shell) إنشاء جلسة قوقعة تفاعلية على الجهاز الهدف.
ب. ما نتائج تنفيذ كود الاستغلال:
كما شرحنا أعلاه، بهذا الاستغلال ننفذ برنامج الآلة الحاسبة داخل الجهاز الهدف، لكن مع قدرة تنفيذ الأكواد عن بُعد (Remote Code Execution) يمكننا فعل ما نشاء على الجهاز الهدف بصلاحيات المستخدم الذي يشغّل خادم Apache Tika. على سبيل المثال، يمكننا الوصول إلى ملفات المستخدم، ومراقبة نشاط المستخدم، وحتى التقاط لقطة شاشة أو صورة بكاميرا الويب إذا كانت موجودة.
ج. كيف يمكنك التأكد من أن الثغرة موجودة فعلاً:
هذه الثغرة مُبلَّغ عنها بالفعل من مصادر موثوقة مثل NIST، وقد أكدتها وأصلحتها Apache نفسها. ولكن لإثبات ذلك، يمكننا تنفيذ إثبات مفهوم (PoC) آخر باستخدام metasploit.
أولاً، تأكدنا من أن الإصدار المثبت هو إصدار معرّض للخطر.
بعد تأكيد الإصدار، يمكننا ضبط جلسة metasploit الخاصة بنا باستخدام IP والمنفذ الصحيحين وتشغيل الأمر “check” للتحقق مما إذا كان الهدف معرّضًا للخطر.
أخيرًا، يمكننا تشغيل الأمر “exploit” لبدء الاستغلال والتأكد من أن القوقعة حية بكتابة “dir” بداخلها. من هنا، القيد الوحيد هو صلاحيات المستخدم الذي يشغّل خادم Apache Tika.