
फ़्लूएंट बिट HTTP सर्वर के handle_trace_request और parse_trace_request फ़ंक्शन में महत्वपूर्ण हीप बफ़र ओवरफ़्लो भेद्यता।
हम उन सभी नागरिकों की सुरक्षित वापसी की मांग करते हैं जिन्हें आतंकवादी समूह हमास ने बंधक बना लिया है। हम तब तक आराम नहीं करेंगे जब तक हर बंधक को रिहा नहीं कर दिया जाता और वह सुरक्षित घर नहीं लौट जाता। आप उन्हें वापस लाने में मदद कर सकते हैं। https://stories.bringthemhomenow.net/
Fluent Bit के HTTP सर्वर कार्यान्वयन में handle_trace_request और parse_trace_request फ़ंक्शन को एक महत्वपूर्ण भेद्यता, CVE-2024-4323, का स्रोत पहचाना गया है। यह भेद्यता अपर्याप्त सीमा जाँच और इनपुट सत्यापन के कारण उत्पन्न होती है, जो संभावित हीप बफर ओवरफ़्लो का कारण बनती है। यह समीक्षा भेद्यता की प्रकृति, इसके संभावित प्रभाव और इसे कम करने के लिए आवश्यक कदमों पर प्रकाश डालती है।
handle_trace_request फ़ंक्शनयह फ़ंक्शन आने वाले HTTP ट्रेस अनुरोधों को संभालता है, बफर आवंटन और अनुरोध डेटा की प्रतिलिपि बनाता है।
असुरक्षित कोड:
static int handle_trace_request(struct flb_hs *hs, struct mk_http_session *session, struct mk_http_request *request)
{
char *buffer;
size_t size;
int ret;
flb_sds_t input_name;
input_name = get_input_name(request);
if (input_name == NULL) {
return -1;
}
size = request->data.len;
buffer = malloc(size);
if (!buffer) {
flb_sds_destroy(input_name);
return -1;
}
memcpy(buffer, request->data.data, size);
ret = parse_trace_request(buffer, size, request);
free(buffer);
flb_sds_destroy(input_name);
return ret;
}
यह फ़ंक्शन ट्रेस अनुरोध से डेटा को पार्स करता है।
असुरक्षित कोड:
void parse_trace_request(char *buffer, size_t size, struct mk_http_request *request)
{
if (size > MAX_SIZE) {
// हैंडल एरर
return;
}
// पार्सिंग लॉजिक
}
हीप बफर ओवरफ़्लो:
बफर आवंटन और प्रतिलिपि: handle_trace_request फ़ंक्शन आने वाले अनुरोध डेटा के आकार का सीधे उपयोग करके बफर आवंटित करता है और बिना उचित सत्यापन के डेटा की प्रतिलिपि बनाता है। यदि आकार आवंटित मेमोरी से अधिक हो जाता है तो यह हीप बफर ओवरफ़्लो का कारण बन सकता है।
सीमा जाँच का अभाव: parse_trace_request फ़ंक्शन एक मामूली आकार की जाँच करता है लेकिन पार्सिंग से पहले यह सुनिश्चित नहीं करता कि बफर का आकार सुरक्षित सीमा के भीतर है।
इनपुट सत्यापन:
अपर्याप्त इनपुट सत्यापन: फ़ंक्शन आने वाले अनुरोध डेटा को पर्याप्त रूप से सत्यापित नहीं करते हैं, जिससे वे बफर ओवरफ़्लो का शोषण करने के लिए डिज़ाइन किए गए दुर्भावनापूर्ण पेलोड के प्रति संवेदनशील हो जाते हैं।
सेवा से वंचित (DoS): एक हमलावर एक अनुरोध तैयार कर सकता है जो हीप बफर को ओवरफ़्लो करके एप्लिकेशन को क्रैश कर देता है, जिससे सेवा से वंचित होना पड़ता है।
दूरस्थ कोड निष्पादन (RCE): सबसे बुरी स्थिति में, एक हमलावर सर्वर पर मनमाना कोड निष्पादित करने के लिए ओवरफ़्लो का शोषण कर सकता है, संभावित रूप से सिस्टम पर नियंत्रण प्राप्त कर सकता है।
सुझाया गया सुधार
निम्नलिखित पैच भेद्यता को कम करने के लिए सीमा जाँच और इनपुट सत्यापन प्रस्तुत करता है:
#define MAX_ALLOWED_SIZE 1024 * 1024 // उचित अधिकतम आकार परिभाषित करें
static int handle_trace_request(struct flb_hs *hs, struct mk_http_session *session, struct mk_http_request *request)
{
char *buffer;
size_t size;
int ret;
flb_sds_t input_name;
input_name = get_input_name(request);
if (input_name == NULL) {
return -1;
}
size = request->data.len;
if (size > MAX_ALLOWED_SIZE) {
// एरर लॉग करें और वापस लौटें
flb_sds_destroy(input_name);
return -1;
}
buffer = malloc(size);
if (!buffer) {
flb_sds_destroy(input_name);
return -1;
}
memcpy(buffer, request->data.data, size);
ret = parse_trace_request(buffer, size, request);
free(buffer);
flb_sds_destroy(input_name);
return ret;
}
void parse_trace_request(char *buffer, size_t size, struct mk_http_request *request)
{
if (size > MAX_ALLOWED_SIZE) {
// हैंडल एरर
return;
}
// पार्सिंग लॉजिक
// ...
}
सीमा जाँच: बफर आवंटित करने से पहले यह सुनिश्चित करने के लिए एक जाँच जोड़ी गई कि आने वाले डेटा का आकार परिभाषित अधिकतम अनुमत आकार से अधिक न हो।
इनपुट सत्यापन: सुनिश्चित किया गया कि इनपुट डेटा को बफर ओवरफ़्लो होने से रोकने के लिए सत्यापित किया गया है, ताकि अत्यधिक बड़े या विकृत अनुरोधों को रोका जा सके।
handle_trace_request और parse_trace_request फ़ंक्शन में भेद्यता एक महत्वपूर्ण मुद्दा है जो गंभीर सुरक्षा जोखिम पैदा कर सकता है, जिसमें सेवा से वंचित होना और दूरस्थ कोड निष्पादन शामिल है। प्रस्तावित पैच मजबूत सीमा जाँच और इनपुट सत्यापन प्रस्तुत करके इन जोखिमों को प्रभावी ढंग से कम करता है। इस पैच को तुरंत लागू करना और Fluent Bit एप्लिकेशन की सुरक्षा और अखंडता सुनिश्चित करने के लिए नियमित कोड ऑडिट करना अनिवार्य है।