Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cve-2020-14343-lab — مختبر بحث واستنساخ الثغرات الأمنية المُتحكَّم به لـ CVE-2020-14343 في PyYAML | Kitploit
أدوات/GitHubGitHub/saina15/cve-2020-14343-lab
ماسحات الثغرات الأمنيةأمن الحاوياتالتحليل الديناميكي (عزل)تحليل الثغرات الأمنيةالاستغلالالمحاكاة الافتراضية للأماناختبار الاختراقالأوراق والأبحاثالتعلم والتعليممختبرات وتدريب عملي
GitHubsaina15/cve-2020-14343-lab
منذ يوم واحدلم تتم المراجعة بعد

cve-2020-14343-lab

مختبر بحث واستنساخ الثغرات الأمنية المُتحكَّم به لـ CVE-2020-14343 في PyYAML

عرض المستودع

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2020-14343 – مختبر تحميل YAML غير الآمن في PyYAML

1. نظرة عامة على المشروع

يوضح هذا المشروع الثغرة CVE-2020-14343 في بيئة Docker معزولة ومُتحكَّم بها.

يحتوي المختبر على بيئتين:

  • بيئة مصابة تستخدم PyYAML 5.3.1
  • بيئة مُصحَّحة تستخدم PyYAML 5.4 و yaml.safe_load()

يوضح المختبر دورة حياة الثغرة الكاملة:

  1. نشر التطبيق المصاب.
  2. تحديد إصدار PyYAML المصاب.
  3. إعادة إنتاج الثغرة باستخدام حمولة YAML مُتحكَّم بها.
  4. اكتشاف الإصدار المصاب باستخدام نص برمجي آلي.
  5. الترقية إلى الإصدار المُصحَّح.
  6. اختبار نفس الحمولة ضد التطبيق المُصحَّح.
  7. التحقق من رفض YAML الخبيث.

حمولة إعادة الإنتاج المستخدمة في هذا المختبر غير ضارة عن قصد وتطبع فقط علامة اختبار.

2. معلومات CVE

الخاصيةالتفاصيل
CVECVE-2020-14343
المنتجPyYAML
الإصدارات المتأثرةالإصدارات قبل 5.4
الإصدار المُصحَّح5.4
نوع الثغرةالتحقق غير الصحيح من المدخلات (CWE-20)
الخطورةحرجة
سطح الهجوممدخلات YAML التي تتم معالجتها باستخدام وظيفة التحميل المصابة

السبب الجذري

تحدث الثغرة عندما تتم معالجة مدخلات YAML غير الموثوقة باستخدام وظيفة تحميل PyYAML المصابة.

سمحت إصدارات PyYAML قبل 5.4 بوسوم YAML مُصمَّمة خصيصًا، بما في ذلك الوسوم الخاصة بـ Python مثل:

root@kitploit:~
!!python/object/new

للوصول إلى وظيفة إنشاء الكائنات عند استخدام FullLoader.

لذلك يمكن لمستند YAML خبيث أن يتسبب في تنفيذ كود Python غير مقصود.

كانت المشكلة مرتبطة بإصلاح غير مكتمل لثغرة سابقة في PyYAML.

أصلحت PyYAML 5.4 الثغرة CVE-2020-14343 بنقل وسوم Python التعسفية إلى UnsafeLoader.

بالنسبة للتطبيقات التي تعالج YAML غير الموثوق، يستخدم هذا المختبر أيضًا yaml.safe_load() كنهج تحميل آمن.

3. بنية المختبر

يحتوي المختبر على خدمتي Docker معزولتين:

root@kitploit:~
                         Host Machine
                              |
                 +------------+------------+
                 |                         |
                 v                         v
          Vulnerable App             Patched App
          localhost:5000             localhost:5001
                 |                         |
            PyYAML 5.3.1             PyYAML 5.4
            FullLoader               SafeLoader
                 |                         |
                 v                         v
          Payload executes          Payload rejected

الخدمات

الخدمةمنفذ المضيفمنفذ الحاويةPyYAMLالغرض
vulnerable500050005.3.1بيئة مصابة
patched500150005.4بيئة مُعالَجة

4. بنية المستودع

root@kitploit:~
cve-2020-14343-lab/
│
├── vulnerable/
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
│
├── patched/
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
│
├── exploit/
│   └── reproduce.py
│
├── detection/
│   └── detect.py
│
├── docker-compose.yml
└── README.md

وصف الدليل

الملف/الدليلالغرض
vulnerable/app.pyتطبيق Flask يستخدم تحميل YAML المصاب
vulnerable/Dockerfileيبني صورة Docker المصابة
vulnerable/requirements.txtيثبّت PyYAML على 5.3.1
patched/app.pyتطبيق Flask يستخدم تحميل YAML الآمن
patched/Dockerfileيبني صورة Docker المُصحَّحة
patched/requirements.txtيثبّت PyYAML على 5.4
exploit/reproduce.pyيعيد إنتاج الثغرة باستخدام حمولة مُتحكَّم بها
detection/detect.pyيتحقق من إصدار PyYAML داخل حاوية Docker
docker-compose.ymlيبني ويشغّل كلتا البيئتين

5. المتطلبات الأساسية

البرامج التالية مطلوبة:

  • Docker Desktop
  • Docker Compose
  • Python 3.x
  • Git

يجب أن يكون Docker Desktop قيد التشغيل قبل بدء المختبر.

التطبيق المصاب مكشوف عن قصد فقط على الجهاز المحلي من خلال تعيينات منافذ Docker.

6. إعداد المختبر

الخطوة 1: بدء المختبر

من الدليل الجذر للمشروع، شغّل:

root@kitploit:~
docker compose up --build -d

الخطوة 2: التحقق من الحاويات

شغّل:

root@kitploit:~
docker compose ps

يجب أن تُظهر كلتا الخدمتين Up.

الخطوة 3: التحقق من التطبيق المصاب

افتح:

root@kitploit:~
http://127.0.0.1:5000

الاستجابة المتوقعة:

root@kitploit:~
{
  "message": "CVE-2020-14343 vulnerable YAML parser"
}

الخطوة 4: التحقق من التطبيق المُصحَّح

افتح:

root@kitploit:~
http://127.0.0.1:5001

الاستجابة المتوقعة:

root@kitploit:~
{
  "message": "CVE-2020-14343 patched YAML parser"
}

7. بدء وإيقاف وإعادة بناء المختبر

البدء

root@kitploit:~
docker compose up -d

الإيقاف

root@kitploit:~
docker compose down

البناء والبدء

root@kitploit:~
docker compose up --build -d

التحقق من الخدمات قيد التشغيل

root@kitploit:~
docker compose ps

عرض سجلات التطبيق المصاب

root@kitploit:~
docker logs cve-vulnerable

عرض سجلات التطبيق المُصحَّح

root@kitploit:~
docker logs cve-patched

8. إعادة إنتاج الثغرة

يكشف التطبيق المصاب عن نقطة نهاية /parse تقبل مدخلات YAML.

تستخدم البيئة المصابة:

  • PyYAML 5.3.1
  • yaml.FullLoader

يقع نص إعادة الإنتاج في:

root@kitploit:~
exploit/reproduce.py

تشغيل الاستغلال

التطبيق المصاب متاح على:

root@kitploit:~
http://127.0.0.1:5000/parse

شغّل:

root@kitploit:~
python exploit/reproduce.py

يرسل النص البرمجي حمولة YAML مُتحكَّم بها تحتوي على وسم YAML خاص بـ Python.

النتيجة المتوقعة

في البيئة المصابة، يتم قبول الحمولة ويُرجع التطبيق استجابة HTTP 200.

علامة الاختبار المُتحكَّم بها:

root@kitploit:~
CVE-2020-14343-TEST

يتم تنفيذها داخل حاوية التطبيق المصاب.

يمكن التحقق من التنفيذ باستخدام:

root@kitploit:~
docker logs cve-vulnerable

يتضمن مخرجات السجل المتوقعة:

root@kitploit:~
CVE-2020-14343-TEST

يوضح هذا تنفيذ الكود من خلال سلوك تحميل YAML المصاب.

السلامة

حمولة إعادة الإنتاج غير ضارة عن قصد. إنها تطبع فقط علامة اختبار ولا تعدّل نظام المضيف، ولا تصل إلى بيانات الاعتماد، ولا تصل إلى بيانات حساسة، ولا تتفاعل مع أنظمة خارجية، ولا تنفذ إجراءات مدمّرة.

9. اكتشاف الثغرة

يقع نص الاكتشاف في:

root@kitploit:~
detection/detect.py

يتحقق النص البرمجي من إصدار PyYAML المثبَّت داخل حاوية Docker المحددة.

الإصدار المُصحَّح هو:

root@kitploit:~
5.4

اكتشاف البيئة المصابة

شغّل:

root@kitploit:~
python detection/detect.py cve-vulnerable

النتيجة المتوقعة:

root@kitploit:~
PyYAML installed version: 5.3.1
Fixed version: 5.4
STATUS: VULNERABLE
Reason: PyYAML version is older than 5.4.

اكتشاف البيئة المُصحَّحة

شغّل:

root@kitploit:~
python detection/detect.py cve-patched

النتيجة المتوقعة:

root@kitploit:~
PyYAML installed version: 5.4
Fixed version: 5.4
STATUS: PATCHED
Reason: PyYAML version is 5.4 or newer.

منطق الاكتشاف

root@kitploit:~
Docker Container
       |
       v
   docker exec
       |
       v
  Import PyYAML
       |
       v
Read yaml.__version__
       |
       v
 Compare with 5.4
       |
       +----------------------+
       |                      |
     < 5.4                  >= 5.4
       |                      |
       v                      v
  VULNERABLE                PATCHED

يستعلم النص البرمجي عن إصدار PyYAML المثبَّت من الحاوية الهدف.

10. المعالجة

تستخدم البيئة المصابة:

root@kitploit:~
PyYAML==5.3.1

تستخدم البيئة المُصحَّحة:

root@kitploit:~
PyYAML==5.4

يستخدم التطبيق المُصحَّح أيضًا:

root@kitploit:~
yaml.safe_load(yaml_input)

بدلاً من:

root@kitploit:~
yaml.load(yaml_input, Loader=yaml.FullLoader)

خطوات المعالجة

  1. ترقية PyYAML إلى الإصدار 5.4 أو أحدث.
  2. تجنّب سلوك تحميل YAML غير الآمن عند معالجة مدخلات غير موثوقة.
  3. استخدم yaml.safe_load() عندما يتطلب التطبيق فقط أنواع بيانات YAML القياسية.
  4. أعد بناء صورة Docker.
  5. أعد تشغيل التطبيق المُصحَّح.
  6. شغّل نص الاكتشاف مرة أخرى.
  7. أعد تشغيل حمولة إعادة الإنتاج ضد التطبيق المُصحَّح.

11. التحقق بعد المعالجة

يتم اختبار نفس حمولة الاستغلال ضد التطبيق المُصحَّح.

يعمل التطبيق المُصحَّح على:

root@kitploit:~
http://127.0.0.1:5001/parse

شغّل:

root@kitploit:~
python exploit/reproduce.py http://127.0.0.1:5001/parse

النتيجة الملاحظة في هذا المختبر:

root@kitploit:~
HTTP Status: 400
Server Response:
{"message":"could not determine a constructor for the tag 'tag:yaml.org,2002:python/object/new:tuple' ...","status":"error"}

يتم رفض وسم YAML الخاص بـ Python من قبل التطبيق المُصحَّح.

لا يتم تنفيذ علامة الاختبار المُتحكَّم بها في التطبيق المُصحَّح.

قبل مقابل بعد

الاختبارالبيئة المصابةالبيئة المُصحَّحة
إصدار PyYAML5.3.15.4
الاكتشافVULNERABLEPATCHED
طلب الاستغلالHTTP 200HTTP 400
وسم YAML الخاص بـ Pythonمقبولمرفوض
تنفيذ علامة الاختبارملاحظ في سجلات الحاويةغير منفَّذ

12. استكشاف الأخطاء وإصلاحها

خادم Docker لا يعمل

تأكد من تشغيل Docker Desktop وتحقق من:

root@kitploit:~
docker version

تعارض اسم الحاوية

تحقق من:

root@kitploit:~
docker ps -a

أزل الحاويات القديمة إذا لزم الأمر:

root@kitploit:~
docker rm cve-vulnerable cve-patched

ثم:

root@kitploit:~
docker compose up --build -d

التحقق من حالة الحاوية

root@kitploit:~
docker compose ps

التحقق من سجلات التطبيق

root@kitploit:~
docker logs cve-vulnerable
docker logs cve-patched

إعادة البناء بعد تغيير التبعيات

root@kitploit:~
docker compose up --build -d

لإعادة بناء نظيفة:

root@kitploit:~
docker compose build --no-cache
docker compose up -d

13. القيود

هذا المشروع مختبر إثبات مفهوم مُتحكَّم به ولا يمثل نشرًا إنتاجيًا.

تشمل القيود:

  • التطبيق المصاب مبسَّط عن قصد.
  • يستخدم المختبر حمولة إثبات مفهوم غير ضارة.
  • لا تُستخدم بيانات اعتماد حقيقية أو بيانات حساسة.
  • التطبيق مصمم للاختبار المحلي.
  • تركز آلية الاكتشاف على إصدار PyYAML المثبَّت.
  • الاكتشاف القائم على الإصدار وحده لا يثبت ما إذا كان تطبيق حقيقي قابلًا للاستغلال؛ يجب أيضًا مراعاة سلوك التطبيق وتكوين تحميل YAML.
  • لا يحاول المختبر الاستغلال ضد أنظمة خارجية أو غير مصرح بها.

14. الأدلة

يجب التقاط الأدلة التالية لتقديم المشروع:

  1. Docker Compose يُظهر تشغيل كلتا الحاويتين.
  2. التطبيق المصاب يستجيب على المنفذ 5000.
  3. التطبيق المُصحَّح يستجيب على المنفذ 5001.
  4. اكتشاف الإصدار المصاب يُظهر PyYAML 5.3.1 و STATUS: VULNERABLE.
  5. تنفيذ الاستغلال المصاب وعلامة CVE-2020-14343-TEST في سجلات Docker.
  6. اكتشاف الإصدار المُصحَّح يُظهر PyYAML 5.4 و STATUS: PATCHED.
  7. نفس الاستغلال ضد التطبيق المُصحَّح يُرجع HTTP 400.
  8. خطأ التطبيق المُصحَّح يُظهر رفض وسم YAML الخاص بـ Python.

يمكن تخزين لقطات الشاشة في:

root@kitploit:~
screenshots/

15. المراجع

  • GitHub Advisory Database – CVE-2020-14343 / GHSA-8q59-q68h-6hv4
  • PyYAML CHANGES – ملاحظات إصدار PyYAML 5.4
  • PyYAML Wiki – إرشادات تحميل YAML و SafeLoader
  • PyYAML Issue #420 – مناقشة FullLoader وتنفيذ الكود
  • National Vulnerability Database – سجلات CVE المتعلقة بـ PyYAML

تم تطوير جميع أكواد إعادة الإنتاج والوثائق في هذا المستودع خصيصًا لهذا المختبر.

16. الخاتمة

يوضح هذا المختبر الثغرة CVE-2020-14343 من التحديد حتى المعالجة.

تستخدم البيئة المصابة PyYAML 5.3.1 وتوضح تنفيذ الكود المُتحكَّم به من خلال حمولة YAML مُصمَّمة.

يحدد نص الاكتشاف إصدار التبعية المصاب.

ترقّي البيئة المُعالَجة PyYAML إلى 5.4 وتستخدم yaml.safe_load() لمعالجة YAML غير الموثوق.

ثم يتم رفض نفس حمولة إعادة الإنتاج من قبل التطبيق المُصحَّح، مما يوفر دليلًا قبل وبعد المعالجة.

يمكن إعادة إنتاج البيئة بأكملها باستخدام Docker Compose.

تنزيل الأداة