
معمل يعتمد على Docker يوضح تنفيذ الأوامر عن بعد CVE-2020-7247 في OpenSMTPD 6.6.1p1 مع PoC بلغة Python لاختبار الأمان التعليمي.
WHS 4기 박솔민
الرابط الأصلي: https://github.com/vulhub/vulhub/blob/43eae7170d09e7748c3aac64cd6a8e5af508a8ef/opensmtpd/CVE-2020-7247/README.md
OpenSMTPD هو برنامج خادم SMTP يُستخدم في أنظمة التشغيل المشتقة من Unix. يمكن استخدامه في BSD و macOS و GNU/Linux وغيرها، ويعمل بناءً على بروتوكول RFC 5321 SMTP.
CVE-2020-7247 هي ثغرة تنفيذ أوامر عن بُعد في OpenSMTPD ناتجة عن عدم كفاية التحقق من صحة عناوين المرسل أو المستلم أثناء معالجة الطلبات. يمكن للمهاجم إرسال طلب SMTP مُعدّل لتنفيذ أوامر عشوائية على الخادم.
تم تصحيح هذه الثغرة في الإصدار 6.6.2p1 من OpenSMTPD.
| البند | المحتوى |
|---|---|
| رقم الثغرة | CVE-2020-7247 |
| البرنامج المتأثر | OpenSMTPD |
| الإصدار المتأثر | OpenSMTPD 6.6.1p1 |
| نوع الثغرة | تنفيذ أوامر عن بُعد |
| بيئة التمرين | Docker / Vulhub |
| المنفذ المستخدم | 8825:25 |
قم بتشغيل بيئة OpenSMTPD الضعيفة باستخدام الأمر التالي:
docker compose up -d
تأكد من أن الحاوية تعمل بشكل صحيح:
docker compose ps
للتحقق من أن خدمة SMTP تعمل بشكل صحيح، اتصل بالمنفذ 8825:
nc 127.0.0.1 8825 -v
عند الاتصال بنجاح، سيظهر شعار OpenSMTPD كما يلي:
220 <container-id> ESMTP OpenSMTPD
استخدم كود PoC لإرسال أمر إلى الخادم الهدف. في هذا التمرين، استخدمنا أمراً غير ضار لإنشاء ملف /tmp/proof.txt.
python3 poc.py 127.0.0.1 8825 'touch /tmp/proof.txt'
ثم تحقق من وجود الملف داخل الحاوية:
docker compose exec smtpd ls -l /tmp/proof.txt
إذا تم العثور على الملف /tmp/proof.txt، فهذا يعني أن الأمر المُرسل من الخارج قد تم تنفيذه داخل الحاوية.
يُظهر هذا أن عدم كفاية التحقق من صحة المدخلات أثناء معالجة طلبات SMTP في OpenSMTPD يمكن أن يسمح للمهاجم بتنفيذ أوامر عشوائية على الخادم عبر طلب معدّل.
تم إجراء هذا التمرين فقط في بيئة Docker محلية، ولا يجب تنفيذه على خوادم حقيقية أو أنظمة غير مصرح بها.