
CVE-2023-45288 के लिए PoC, continuation flood भेद्यता
यह CONTINUATION बाढ़ कमजोरी के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट कोड है जिसे Bartek Nowotarski द्वारा खोजा और दस्तावेजित किया गया है। तकनीकी विवरण उनके ब्लॉग पोस्ट यहाँ में बहुत अच्छी तरह से दस्तावेजित हैं। जबकि मेरा ध्यान शोधकर्ता द्वारा दस्तावेजित Go बग पर था, यह कोड इस मुद्दे से संबंधित अन्य CVE के परीक्षण में सहायक होना चाहिए।
यह कोड कुछ प्रेरणा लेता है:
मेरा प्रारंभिक लक्ष्य कमजोरी को विस्तार से समझने के अलावा, काम पर इस मुद्दे के परीक्षण के लिए एक उपकरण विकसित करना था। http2 के आंतरिक कार्यों को विस्तार से समझने पर काम करते समय यह बहुत सहायक भी था। अन्य स्रोत जो सहायक थे उनमें शामिल हैं:
आप शामिल server.go फ़ाइल चला सकते हैं जो golang.org/x/net (0.20.0) के कमजोर संस्करण पर चलती है।
$ go run server.go
सर्वर पोर्ट 8443 पर चलता है, जिस पर क्लाइंट डिफ़ॉल्ट रूप से इंगित करता है।
जब कमजोर सर्वरों के विरुद्ध चलाया जाता है, तो क्लाइंट wait फ्लैग के लिए जितने सेकंड निर्दिष्ट करते हैं, उतने समय तक CONTINUATION फ़्रेम भेजता रहेगा। सर्वर हर 2 सेकंड में अपना CPU उपयोग प्रिंट करता है, जो क्लाइंट चलने पर तेज़ी से बढ़ता हुआ दिखाई देगा। पैच किए गए संस्करणों (0.23.0 और उससे ऊपर) में, हेडर आकार सीमा तक पहुंचने पर सर्वर कनेक्शन बंद कर देगा।
क्लाइंट चलाएं, 6 समवर्ती कनेक्शन बनाते हुए, https://localhost:8443 पर कॉल करें, और प्रत्येक कनेक्शन के लिए 200 सेकंड तक कंटिन्यूएशन फ़्रेम भेजें:
$ go run client.go -time-limit 200 -connections 6 -url https://localhost:8443