
अधिकृत वातावरण में CVE-2019-9511 (Data Dribble) और CVE-2019-9513 (Priority Churn) DoS वेक्टरों के नियंत्रित सत्यापन के लिए हल्के HTTP/2 प्रोब।
यह रिपॉजिटरी CVE-2019-9511 और CVE-2019-9513 से संबंधित व्यवहारों के नियंत्रित सत्यापन के लिए स्क्रिप्ट्स का संग्रह है, जो HTTP/2 कार्यान्वयनों में सेवा अस्वीकार वैक्टर से संबंधित हैं।
स्क्रिप्ट्स को अधिकृत वातावरणों में तकनीकी सत्यापन का समर्थन करने के लिए बनाया गया है, जिससे यह देखा जा सके कि सर्वर HTTP/2 पर बातचीत करता है या नहीं और Data Dribble और Priority Churn से संबंधित विशिष्ट पैटर्न पर प्रतिक्रिया करता है, बिना सेवा अस्वीकार हमला किए।
इसका उद्देश्य वेक्टर को हल्के और सुरक्षित तरीके से सिद्ध करना है, जिसमें कम मात्रा में अनुरोध हों और वातावरण को अनुपलब्ध करने का कोई इरादा न हो।
| CVE | नाम | स्क्रिप्ट | विवरण |
|---|---|---|---|
CVE-2019-9511 | HTTP/2 Data Dribble | data_dribble_probe.py | HTTP/2 प्रवाह नियंत्रण व्यवहार का सत्यापन करता है जिसमें नियंत्रित तरीके से डेटा के छोटे हिस्से जारी किए जाते हैं। |
CVE-2019-9513 | HTTP/2 Priority Churn / Resource Loop | priority_churn_probe.py | कम तीव्रता पर PRIORITY फ्रेम प्रसंस्करण व्यवहार का सत्यापन करता है। |
CVE-2019-9511, जिसे HTTP/2 Data Dribble के नाम से जाना जाता है, कुछ HTTP/2 कार्यान्वयनों को प्रभावित करता है जो प्रवाह विंडो और डेटा की क्रमिक डिलीवरी के हेरफेर को कुशलता से नहीं संभालते।
इस परिदृश्य में, एक हमलावर सर्वर से डेटा का अनुरोध कर सकता है और प्रवाह नियंत्रण में हेरफेर कर सकता है ताकि प्रतिक्रिया खुली रखी जाए और छोटे ब्लॉकों में वितरित की जाए, जैसे 1 बाइट के पैकेट। कार्यान्वयन के आधार पर, यह व्यवहार अत्यधिक CPU, मेमोरी या कनेक्शन संसाधनों की खपत कर सकता है, जिससे सेवा अस्वीकार का जोखिम हो सकता है।
इस रिपॉजिटरी में संबंधित स्क्रिप्ट है:
data_dribble_probe.py
स्क्रिप्ट का उद्देश्य व्यवहार को हल्के ढंग से सत्यापित करना है, बिना आक्रामक लोड उत्पन्न किए और बिना अनुपलब्धता पैदा करने का प्रयास किए।
संदर्भ:
CVE-2019-9513, जिसे HTTP/2 Priority Churn या Resource Loop के नाम से जाना जाता है, कुछ HTTP/2 कार्यान्वयनों को प्रभावित करता है जो स्ट्रीम प्राथमिकता पेड़ में लगातार बदलाव को महंगे ढंग से संसाधित करते हैं।
इस परिदृश्य में, एक हमलावर कई स्ट्रीम बना सकता है और उनके बीच बार-बार प्राथमिकता बदल सकता है, जिससे प्राथमिकता पेड़ में उथल-पुथल (churn) होती है। कार्यान्वयन के आधार पर, यह व्यवहार अत्यधिक CPU खपत कर सकता है और सेवा अस्वीकार का कारण बन सकता है।
इस रिपॉजिटरी में संबंधित स्क्रिप्ट है:
priority_churn_probe.py
स्क्रिप्ट का उद्देश्य यह सत्यापित करना है कि क्या सर्वर PRIORITY फ्रेम स्वीकार करता है और संसाधित करता है, कम तीव्रता पर और DoS हमला किए बिना।
संदर्भ:
CVEs CVE-2019-9511 और CVE-2019-9513 किसी एक विशिष्ट वेब सर्वर संस्करण (जैसे केवल nginx, Apache या Tomcat) से संबद्ध नहीं हैं।
ये विभिन्न उत्पादों, लाइब्रेरियों, प्रॉक्सीज़, लोड बैलेंसर्स और सर्वरों में कुछ HTTP/2 कार्यान्वयनों को प्रभावित करते हैं। इसलिए, सत्यापन में यह विचार करना चाहिए कि विश्लेषित वातावरण में कौन सा घटक HTTP/2 पर बातचीत और प्रसंस्करण कर रहा है।
उदाहरण के तौर पर, इसमें शामिल हो सकने वाले घटक:
nginx
Apache HTTP Server
Envoy
HAProxy
Tomcat
Jetty
Node.js
Go net/http2
nghttp2
CDN
WAF
Load Balancer
Ingress Controller Kubernetes
पहली तकनीकी शर्त यह पुष्टि करना है कि सेवा ALPN के माध्यम से HTTP/2 पर बातचीत करती है या नहीं। यदि सेवा h2 पर बातचीत नहीं करती, तो ये स्क्रिप्ट लागू नहीं होती हैं।
संस्करण के अनुसार कमजोरी की पुष्टि पहचाने गए घटक के निर्माता के आधिकारिक एडवाइजरी के आधार पर की जानी चाहिए।
स्क्रिप्ट चलाने से पहले, जाँचें कि लक्ष्य ALPN के माध्यम से HTTP/2 पर बातचीत करता है या नहीं।
कमांड में केवल डोमेन का उपयोग करें, https:// के बिना।
openssl s_client -alpn h2 -connect exemplo.com.br:443 </dev/null 2>/dev/null | grep -i "ALPN"
प्लेसहोल्डर के साथ भी उपयोग किया जा सकता है:
openssl s_client -alpn h2 -connect <HOST>:443 </dev/null 2>/dev/null | grep -i "ALPN"
अपेक्षित आउटपुट:
ALPN protocol: h2
यदि आउटपुट h2 इंगित करता है, तो सेवा HTTP/2 पर बातचीत करती है और स्क्रिप्ट लागू हो सकती हैं।
यदि कोई आउटपुट नहीं है या http/1.1 जैसा कोई अन्य प्रोटोकॉल बातचीत करता है, तो उस एंडपॉइंट के लिए स्क्रिप्ट लागू नहीं हैं।
| स्क्रिप्ट | संबंधित CVE | उद्देश्य | कब उपयोग करें |
|---|---|---|---|
data_dribble_probe.py | CVE-2019-9511 | Data Dribble से संबंधित व्यवहार का सत्यापन, छोटे डेटा ब्लॉक जारी करने के लिए विंडो नियंत्रण का उपयोग करके | जब सर्वर HTTP/2 का समर्थन करता है और कम विंडो के साथ DATA फ्रेम वितरण व्यवहार की जाँच करने की आवश्यकता हो। |
priority_churn_probe.py | CVE-2019-9513 | Priority Churn से संबंधित व्यवहार का सत्यापन, कम तीव्रता पर PRIORITY फ्रेम का उपयोग करके | जब सर्वर HTTP/2 का समर्थन करता है और यह जाँचने की आवश्यकता हो कि वह स्ट्रीम प्राथमिकता में बदलाव संसाधित करता है या नहीं। |
स्क्रिप्ट के उपयोग का सबसे तार्किक क्रम है:
1. openssl के साथ HTTP/2 पूर्व-सत्यापन
↓
2. priority_churn_probe.py
↓
3. data_dribble_probe.py
पहले, openssl कमांड का उपयोग करके पुष्टि करें कि लक्ष्य HTTP/2 पर बातचीत करता है। फिर, priority_churn_probe.py का उपयोग करके यह सत्यापित करें कि सर्वर प्राथमिकता फ्रेम स्वीकार करता है और संसाधित करता है। उसके बाद, data_dribble_probe.py का उपयोग करके कम प्रवाह विंडो के साथ सर्वर के व्यवहार का निरीक्षण करें, नियंत्रित तरीके से छोटे डेटा वॉल्यूम जारी करते हुए।
दोनों स्क्रिप्ट हल्की जांच हैं। उनका उद्देश्य अनुपलब्धता पैदा करना नहीं है, बल्कि देखे गए व्यवहार का तकनीकी प्रमाण उत्पन्न करना है।
priority_churn_probe.py CVE-2019-9513, जिसे HTTP/2 Priority Churn के नाम से जाना जाता है, से संबंधित व्यवहार के सत्यापन के लिए एक हल्का PoC है।
स्क्रिप्ट TLS के माध्यम से HTTP/2 कनेक्शन स्थापित करती है, छोटे HTTP स्ट्रीम खोलती है और PRIORITY फ्रेम के माध्यम से प्राथमिकता में बदलाव भेजती है। फिर, यह इन फ्रेमों को भेजने से पहले और बाद में विलंबता मापती है ताकि यह देखा जा सके कि प्रसंस्करण में कोई भिन्नता है या नहीं।
PING का उपयोग करके प्रारंभिक विलंबता मापती है;PRIORITY फ्रेम भेजती है;इस स्क्रिप्ट का उपयोग तब करें जब यह सत्यापित करना आवश्यक हो कि कोई HTTP/2 सर्वर Priority Churn वेक्टर से संबंधित प्राथमिकता फ्रेम स्वीकार करता है और संसाधित करता है, बिना आक्रामक DoS परीक्षण किए।
यह नियंत्रित सत्यापन, पेंटेस्ट में HTTP/2 एक्सपोज़र विश्लेषण और कमजोर या संभावित संवेदनशील व्यवहार के तकनीकी प्रमाण के लिए संकेतित है।
स्क्रिप्ट कमांड लाइन आर्गुमेंट के माध्यम से मान प्राप्त करती है:
--host
--port
--paths
--shuffles
| पैरामीटर | विवरण |
|---|---|
--host | अधिकृत लक्ष्य का FQDN। https:// शामिल न करें। |
--port | TLS पोर्ट जहाँ HTTP/2 सेवा उपलब्ध है। डिफ़ॉल्ट: 443। |
--paths | HTTP/2 स्ट्रीम खोलने के लिए सरल पथों की सूची। |
--shuffles | प्राथमिकता बदलाव के चक्रों की संख्या। सुरक्षित परीक्षण के लिए कम रखें। |
हल्के, सार्वजनिक और कम प्रभाव वाले पथ का उपयोग करें, जैसे:
/
/robots.txt
/favicon.ico
/health
/login
उन पथों से बचें जो भारी संचालन, जटिल क्वेरी, रिपोर्ट जनरेशन, अपलोड, उन्नत खोज, या बैकएंड पर लोड उत्पन्न करने वाली किसी भी कार्यक्षमता को निष्पादित करते हैं।