
أداة توليد تلقائي للـ payload الخاص بـ Jdk Xalan، مشتقة من cve-2022-34169، حيث يمكنها توليد ملف xslt المطابق لكل إصدار مختلف من Jdk
هذه أداة توليد تلقائي للـ payload مستندة إلى ثغرة cve-2022-34169، وتستهدف ثغرة الفائض في xalan الخاص بـ JDK. نظرًا لأن إصدارات JDK المختلفة تتطلب payloads فائض مختلفة، فقد ظهرت هذه الأداة للتوليد التلقائي؛ يكفي تشغيل هذا المشروع بإصدارات مختلفة من JDK لتوليد ملفات xslt استغلالية مختلفة.
انسخ select.bak.xslt إلى select.xslt، وعدّل الأمر الذي تريد تنفيذه

ثم شغّل java -jar AutoGenerateXalanPayload.jar. ستُطرح بعض الأخطاء أثناء العملية، ويمكن تجاهلها. بعد اكتمال تشغيل البرنامج، سيكون select.xslt الناتج هو الـ payload المناسب لتنفيذ أمر الفائض في xalan وفقًا لإصدار JDK هذا.

https://mp.weixin.qq.com/s/xxAtjFvk9RxWiY-pwGf8Ow
نظرًا لتعدد الإصدارات الفرعية لـ JDK، استخدمت أسلوب التنصيف لمقارنة إصدارات jdk1.6 إلى jdk1.8. لنأخذ اختبار إصدار 1.7 كمثال: أختبر أولًا أعلى إصدار فرعي من jdk1.7 وأحصل على xslt، وأفترض أن محتوى هذا الـ xslt من النوع A. ثم أختبر أدنى إصدار فرعي من jdk1.7 وأحصل على xslt. إذا كان هذا الـ xslt مطابقًا تمامًا لما يولده أعلى إصدار فرعي من 1.7، فهذا يعني أن جميع الإصدارات من الأدنى إلى الأعلى في jdk1.7 تشترك في payload واحد من النوع A. أما إذا لم يتطابق، فآخذ الإصدار الوسيط من jdk1.7 وأختبره، وهكذا أواصل التنصيف. هذه أسرع طريقة اختبار توصلت إليها، فهي لا تتطلب تثبيت جميع الإصدارات واختبارها مع تغطيتها جميعًا. إليك مثالًا من النتائج المختبرة أدناه: Jdk-8u301 هو payload من النوع A، وJdk-8u202 هو payload من النوع A، إذن Jdk-8u221 هو الإصدار الوسيط بينهما، أليس من غير المعقول أن يكون payload من النوع B؟
فيما يلي النتائج التي توصلت إليها من الاختبارات، والتي تُظهر وجود ستة أنواع من الـ payload بين jdk1.6 وjdk1.8.
https://blog.noah.360.net/xalan-j-integer-truncation-reproduce-cve-2022-34169/
| إصدار jdk | نوع xsls |
|---|
| Jdk-8u301 | A |
| Jdk-8u202 | A |
| Jdk-8u162 | A |
| Jdk8u152 | A |
| Jdk8u151 | B |
| Jdk8u144 | B |
| Jdk8u131 | B |
| Jdk8u121 | C |
| Jdk8u111 | C |
| Jdk8u102 | D |
| Jdk8u101 | D |
| Jdk8u91 | D |
| Jdk8u60 | D |
| Jdk8u20 | D |
| Jdk7u40 | D |
| Jdk7u21 | D |
| Jdk7u10 | D |
| Jdk7u05 | D |
| Jdk7u04 | D |
| Jdk7u03 | E |
| Idk7u02 | E |
| Jdk7u0 | E |
| Jdk6u45 | E |
| Jdk6u20 | E |
| Jdk6u17 | F |
| Jdk6u15 | F |
| Jdk6u10 | F |
| Jdk6u0 | F |