
HTTP अनुरोधों का विश्लेषण करें ताकि HTTP Desync हमलों (HTTP request smuggling/splitting के अग्रदूत) के जोखिम को कम किया जा सके।
HTTP/1.1 1991 से 2014 तक एक लंबे विकास से गुज़रा:
इसका मतलब है कि विभिन्न प्रकार के सर्वर और क्लाइंट हैं, जिनके अनुरोध सीमाओं पर अलग-अलग दृष्टिकोण हो सकते हैं, जो डीसिंक्रोनाइज़ेशन हमलों (जिसे HTTP Desync भी कहा जाता है) के अवसर पैदा करते हैं।
नवीनतम RFC अनुशंसाओं का पालन करना सरल लग सकता है। हालांकि, बड़े पैमाने पर सिस्टमों के लिए जो कुछ समय से मौजूद हैं, इसका उपलब्धता पर अस्वीकार्य प्रभाव पड़ सकता है।
http_desync_guardian लाइब्रेरी HTTP डीसिंक हमलों को रोकने के लिए HTTP अनुरोधों का विश्लेषण करने, सुरक्षा और उपलब्धता के बीच संतुलन बनाने के लिए डिज़ाइन की गई है।
यह अनुरोधों को विभिन्न श्रेणियों में वर्गीकृत करती है और प्रत्येक स्तर को कैसे संभाला जाना चाहिए, इस पर सिफारिशें प्रदान करती है।
इसका उपयोग या तो कच्चे HTTP अनुरोध हेडर के लिए या पहले से HTTP इंजन द्वारा पार्स किए गए के लिए किया जा सकता है। उपभोक्ता लॉगिंग और मीट्रिक्स संग्रह को कॉन्फ़िगर कर सकते हैं। लॉगिंग दर-सीमित है और सभी उपयोगकर्ता डेटा अस्पष्ट किया गया है।
यदि आपको लगता है कि आपको कोई सुरक्षा प्रभावित करने वाला मुद्दा मिला है, तो कृपया हमारी सुरक्षा सूचना प्रक्रिया का पालन करें।
इस लाइब्रेरी का मुख्य फोकस HTTP/1.1 है। सभी कवर किए गए मामलों के लिए परीक्षण देखें। HTTP/1.1 के पूर्ववर्ती कनेक्शन पुन: उपयोग का समर्थन नहीं करते हैं जो HTTP Desync के अवसरों को सीमित करता है,
हालांकि कुछ प्रॉक्सी ऐसे अनुरोधों को HTTP/1.1 में अपग्रेड कर सकते हैं और बैकएंड कनेक्शन का पुन: उपयोग कर सकते हैं, जो दुर्भावनापूर्ण HTTP/1.0 अनुरोधों को तैयार करने की अनुमति दे सकता है।
इसलिए उनका विश्लेषण HTTP/1.1 के समान मानदंडों का उपयोग करके किया जाता है। अन्य प्रोटोकॉल संस्करणों के लिए निम्नलिखित अपवाद हैं:
HTTP/0.9 अनुरोधों को कभी भी Compliant नहीं माना जाता, बल्कि Acceptable के रूप में वर्गीकृत किया जाता है। यदि Content-Length/Transfer-Encoding में से कोई भी मौजूद है, तो यह Ambiguous है।HTTP/1.0 - Transfer-Encoding की उपस्थिति अनुरोध को Ambiguous बनाती है।HTTP/2+ दायरे से बाहर है। लेकिन यदि आपका प्रॉक्सी HTTP/2 को HTTP/1.1 में डाउनग्रेड करता है, तो सुनिश्चित करें कि आउटगोइंग अनुरोध का विश्लेषण किया गया है।अधिक जानने के लिए दस्तावेज़ीकरण देखें।
यह लाइब्रेरी मुख्य रूप से C/C++ में लिखे HTTP इंजनों से उपयोग करने के लिए डिज़ाइन की गई है।
cargo install --force cbindgencbindgen --output http_desync_guardian.h --lang c चलाएँ।cbindgen --output http_desync_guardian.h --lang c++ चलाएँ।cargo build --release चलाएँ। बाइनरी ./target/release/libhttp_desync_guardian.* फाइलों में हैं।अधिक जानें: सामान्य और Nginx उदाहरण।
#include "http_desync_guardian.h"
/*
* http_engine_request_t - already parsed by the HTTP engine
*/
static int check_request(http_engine_request_t *req) {
http_desync_guardian_request_t guardian_request = construct_http_desync_guardian_from(req);
http_desync_guardian_verdict_t verdict = {0};
http_desync_guardian_analyze_request(&guardian_request, &verdict);
switch (verdict.tier) {
case REQUEST_SAFETY_TIER_COMPLIANT:
// The request is good. green light
break;
case REQUEST_SAFETY_TIER_ACCEPTABLE:
// Reject, if mode == STRICTEST
// Otherwise, OK
break;
case REQUEST_SAFETY_TIER_AMBIGUOUS:
// The request is ambiguous.
// Reject, if mode == STRICTEST
// Otherwise send it, but don't reuse both FE/BE connections.
break;
case REQUEST_SAFETY_TIER_SEVERE:
// Send 400 and close the FE connection.
break;
default:
// unreachable code
abort();
}
}
Rust से उपयोग के उदाहरण के रूप में बेंचमार्क देखें।
यदि आप http_desync_guardian में एक संभावित सुरक्षा मुद्दे की खोज करते हैं, तो हम आपसे अनुरोध करते हैं कि आप AWS सुरक्षा को हमारे भेद्यता रिपोर्टिंग पृष्ठ के माध्यम से सूचित करें। कृपया सार्वजनिक github मुद्दा न बनाएं।
अधिक जानकारी के लिए CONTRIBUTING देखें।
यह परियोजना Apache-2.0 License के तहत लाइसेंस प्राप्त है।