
إعادة إنتاج CVE-2023-4863 (تجاوز سعة المخزن المؤقت في الكومة في libwebp) في بيئة Docker معزولة تمامًا وآلية بالكامل. مبني على تمرين وحدة الاختراق الأخلاقي من CEFIRE.
يشغّل ثماني حاويات في شبكة خاصة:
| الحاوية | الدور |
|---|---|
| attacker | ينشئ exploit.webp باستخدام craft.c ويقدّمه عبر HTTP إلى جانب صفحة تصيّد محاكاة |
| victim-cli | Ubuntu 22.04 مع libwebp 1.2.2-2ubuntu0.22.04.1 (قابلة للاستغلال). تنزّل وتعالج الاستغلال تلقائيًا → انهيار |
| victim-patched | Ubuntu 22.04 مع libwebp من مستودع أمان Ubuntu (مصحّحة). نفس الاستغلال → خطأ محكوم، دون انهيار |
| victim-gui | Ubuntu 22.04 مع XFCE وVNC وFirefox 110 (قابل للاستغلال). انهيار حقيقي للمتصفح مع exploit.webp |
| victim-gui-patched | Ubuntu 22.04 مع XFCE وVNC وFirefox 126 (مصحّح). نفس الاستغلال → المتصفح يبقى قيد التشغيل |
| postgres | PostgreSQL — الواجهة الخلفية للمصادقة واتصالات Guacamole |
| guacd | خفيّة Apache Guacamole (بروكسي البروتوكولات) |
| guacamole | واجهة ويب تصل من خلالها إلى جميع الحاويات عبر SSH أو VNC دون تثبيت أي شيء آخر |
العرض التوضيحي التلقائي (victim-cli مقابل victim-patched) يحدث بمفرده عند التشغيل. العرض المرئي على واجهة المستخدم الرسومية يتطلب تفاعلًا يدويًا من Guacamole.
make up
make up يفعل ثلاثة أشياء تلقائيًا إذا كانت المرة الأولى:
initdb.sh من الصورة الرسمية)يستغرق البناء بضع دقائق في المرة الأولى (تنزيل الصور الأساسية، استنساخ مستودع الـ PoC، تثبيت الحزم). عمليات التشغيل اللاحقة تستخدم ذاكرة التخزين المؤقت في Docker وتكون شبه فورية.
عند الانتهاء، سترى رابط Guacamole في المخرجات. لا تبدأ حاويات الضحايا بالعمل حتى يصبح المهاجم جاهزًا ويقدّم الاستغلال (healthcheck).
| الوصول | المستخدم | كلمة المرور |
|---|
في طرفية، بينما المختبر يعمل:
# Ver el crash en la víctima vulnerable
make logs-victim-cli
# Ver la respuesta controlada en la víctima parcheada
make logs-victim-patched
ما ستراه في victim-cli:
[*] Ejecutando: dwebp /tmp/exploit.webp -o /tmp/salida.png
Decoding of exploit.webp failed.
Status: 3(BITSTREAM_ERROR)
*** glibc detected *** double free or corruption (!prev) ***
Aborted (core dumped)
[!] EXIT CODE: 134 (SIGABRT)
[!] CVE-2023-4863 CONFIRMADO
ما ستراه في victim-patched:
[*] Ejecutando: dwebp /tmp/exploit.webp -o /tmp/salida.png
Decoding of exploit.webp failed.
Status: 3(BITSTREAM_ERROR)
[+] EXIT CODE: 1 — Error controlado
[+] CVE-2023-4863 MITIGADO
العرض الأكثر تأثيرًا بصريًا يتم بمقارنة victim-gui (القابلة للاستغلال) مع victim-gui-patched (المصحّحة) باستخدام dwebp من طرفية سطح مكتب XFCE.
guacadmin / guacadminfirefox --no-sandbox http://attacker/index.html
exploit.webp → انهيار (SIGABRT، تنتهي العملية)تحتفظ Mozilla بأرشيف عام دائم لجميع إصداراتها على releases.mozilla.org. أزالت Google روابط الإصدارات القديمة من Chrome من شبكة توزيع المحتوى (CDN) الخاصة بها، مما جعل تنزيل Chrome 116 بطريقة موثوقة مستحيلًا. Firefox 110 قابلة للاستغلال بنفس القدر (كلاهما يضمّن libwebp داخليًا) وتنزيله من أرشيف Mozilla مستقر وقابل للتكرار.
ssh root@localhost -p 2220 # attacker
ssh root@localhost -p 2221 # victim-cli
ssh root@localhost -p 2223 # victim-patched
ssh root@localhost -p 2222 # victim-gui
ssh root@localhost -p 2224 # victim-gui-patched
VNC المباشر: localhost:5900 (victim-gui) وlocalhost:5901 (victim-gui-patched).
make logs # todos los logs en tiempo real
make status # estado de los containers
make shell-attacker # shell en el atacante
make shell-victim-cli
make shell-victim-gui
make shell-victim-gui-patched
make down # parar el lab
make clean # parar + borrar imágenes y redes
Chrome و libwebp: يضمّن Chrome نسخته الخاصة من libwebp (ولا يستخدم نسخة النظام). الإصدارات ≥ 116.0.5845.187 تتضمن التصحيح. وبما أن Google أزالت روابط الإصدارات القديمة، يلجأ Dockerfile إلى الخيار الاحتياطي بالإصدار المستقر الحالي (المصحّح). عرض الانهيار باستخدام dwebp صالح بنفس القدر وأكثر موثوقية.
شبكة معزولة: لا تملك أي حاوية وصولًا إلى الإنترنت أثناء التشغيل. يبقى كل حركة المرور داخل شبكة Docker الخاصة cve4863-lab-net.
| Guacamole (web) | guacadmin | guacadmin |
| SSH لجميع الحاويات | root | toor |
| VNC إلى victim-gui و victim-gui-patched | — | secret |