
PoC لثغرة CVE-2023-45288، ثغرة فيضان الاستمرارية
هذا كود إثبات المفهوم (Proof of Concept) لثغرة فيضان CONTINUATION التي اكتشفها ووثّقها Bartek Nowotarski. التفاصيل التقنية موثّقة بشكل جيد في منشور مدونته. بينما كان تركيزي على خلل Go كما وثّقه الباحث، إلا أن هذا الكود قد يكون مفيدًا في اختبار ثغرات CVE أخرى مرتبطة بهذه المشكلة.
يستلهم هذا الكود بعض الأفكار من:
كان هدفي الأولي فهم الثغرة بالتفصيل، بالإضافة إلى تطوير أداة لاختبار هذه المشكلة في العمل. وكان هذا مفيدًا جدًا أيضًا لفهم الأعمال الداخلية لـ http2 بالتفصيل. ومن المصادر الأخرى المفيدة:
يمكنك تشغيل ملف server.go المرفق، والذي يعمل على إصدار غير مُصحح من golang.org/x/net (0.20.0).
$ go run server.go
يعمل الخادم على المنفذ 8443، الذي يشير إليه العميل افتراضيًا.
عند التشغيل ضد خوادم غير مُصححة، سيتمكن العميل من الاستمرار في إرسال إطارات CONTINUATION للمدة التي تحددها عبر علم wait بالثواني. يقوم الخادم بطباعة استخدام المعالج (CPU) كل ثانيتين، وستلاحظ زيادته بسرعة أثناء تشغيل العميل. في الإصدارات المُصححة (0.23.0 وما فوق)، سيغلق الخادم الاتصال بمجرد الوصول إلى حد حجم الترويسة.
شغّل العميل مع إنشاء 6 اتصالات متزامنة، مستدعيًا https://localhost:8443، وإرسال إطارات متابعة (continuation) لمدة 200 ثانية لكل اتصال:
$ go run client.go -time-limit 200 -connections 6 -url https://localhost:8443