Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/moxie25/nanomq-memory-leak-research
स्थैतिक विश्लेषणगतिशील विश्लेषण (सैंडबॉक्सिंग)IoT सुरक्षामेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणपेनिट्रेशन टेस्टिंग
GitHubmoxie25/nanomq-memory-leak-research

NanoMQ-Memory-Leak-Research

CVE-2026-36590 के लिए सार्वजनिक सलाह और तकनीकी विश्लेषण, जो NanoMQ v0.24.9 में एक सेवा-अस्वीकृत भेद्यता है।

रिपॉजिटरी देखें
42 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-36590: EMQ NanoMQ v0.24.9 में सेवा अस्वीकार (Denial of Service)

इस रिपॉजिटरी में CVE-2026-36590 के लिए सार्वजनिक सलाह और तकनीकी विश्लेषण शामिल है, जो EMQ NanoMQ v0.24.9 को प्रभावित करने वाली एक सेवा अस्वीकार भेद्यता है।

समीक्षा नोट

यह रिपॉजिटरी CVE समीक्षा के लिए एक सुलभ तकनीकी संदर्भ प्रदान करने के लिए सार्वजनिक है। CVE-2026-36590 का अंतिम वर्गीकरण CVE टीम या संबंधित CNA द्वारा निर्धारित किया जाएगा।

NanoMQ टीम ने इस मुद्दे पर विवाद किया है और इसे कॉन्फ़िगरेशन-संबंधी माना है। यह रिपॉजिटरी तकनीकी साक्ष्य पर केंद्रित है, जिसमें पुनरुत्पादन सामग्री, ASAN परिणाम, रनटाइम लॉग और स्रोत-कोड विश्लेषण शामिल हैं।

सलाहकार जानकारी

  • CVE ID: CVE-2026-36590
  • विक्रेता/प्रोजेक्ट: EMQ / NanoMQ
  • उत्पाद: NanoMQ
  • प्रभावित संस्करण: v0.24.9
  • भेद्यता प्रकार: सेवा अस्वीकार / संसाधन समाप्ति (Denial of Service / Resource Exhaustion)
  • प्रभावित घटक: /nanomq/nng/src/supplemental/mqtt/mqtt_qos_db_api.c/ nni_qos_db_set
  • CWE: CWE-772, CWE-400
  • सार्वजनिक प्रकटीकरण तिथि: 2026-06-17

सारांश

जब NanoMQ v0.24.9 को SQLite समर्थन के बिना बनाया जाता है, जबकि को के रूप में कॉन्फ़िगर किया गया है, तो QoS डेटाबेस पॉइंटर रह सकता है। MQTT QoS संदेश हैंडलिंग के दौरान, एक क्लोन किए गए संदेश संदर्भ को जारी किए बिना जल्दी लौट सकता है। बार-बार QoS > 0 MQTT PUBLISH संदेश निरंतर मेमोरी खपत का कारण बन सकते हैं, जिससे अंततः सेवा अस्वीकार हो सकती है।

sqlite.enable
true
NULL
nni_qos_db_set

यह मुद्दा अभी भी समीक्षा की आवश्यकता क्यों है

यह मुद्दा एक गैर-डिफ़ॉल्ट रनटाइम कॉन्फ़िगरेशन पर निर्भर करता है, लेकिन निम्नलिखित तथ्य दिखाते हैं कि इसके लिए अभी भी आगे की समीक्षा की आवश्यकता क्यों है:

  1. NanoMQ रनटाइम कॉन्फ़िगरेशन स्वीकार करता है और चलता रहता है, बजाय इसके कि यह रिपोर्ट करे कि वर्तमान बिल्ड में SQLite समर्थन उपलब्ध नहीं है।

  2. यह कॉन्फ़िगरेशन बेमेल व्यवहार में हो सकता है। एक उपयोगकर्ता सामान्य बिल्ड कमांड के साथ NanoMQ बना सकता है, लेकिन बाद में एक उदाहरण कॉन्फ़िगरेशन फ़ाइल से SQLite दृढ़ता अनुभाग को कॉपी या सक्षम कर सकता है।

  3. प्रभावित कोड पथ इस असंगत स्थिति को पूरी तरह से मान्य नहीं करता है। जब रनटाइम कॉन्फ़िगरेशन SQLite को सक्षम मानता है लेकिन डेटाबेस पॉइंटर NULL होता है, तो nni_qos_db_set() पास किए गए संदेश ऑब्जेक्ट को जारी किए बिना जल्दी लौटता है।

  4. इस कॉन्फ़िगरेशन को स्वीकार करने के बाद, मुद्दा दूरस्थ MQTT ट्रैफ़िक द्वारा ट्रिगर किया जा सकता है। बार-बार QoS > 0 PUBLISH संदेश प्रभावित पथ में प्रवेश कर सकते हैं और संचित मेमोरी लीक का कारण बन सकते हैं।

  5. 1, 50 और 500 पुनरुत्पादन राउंड के साथ ASAN परीक्षण दिखाते हैं कि लीक हुए बाइट्स और आवंटन ट्रिगर प्रयासों की संख्या के साथ बढ़ते हैं। इससे पता चलता है कि मुद्दा इनपुट-गणना-निर्भर है, न कि एक बार का छोटा लीक।

शमन (Mitigation)

उपयोगकर्ताओं को NanoMQ इंस्टेंस तक पहुंच प्रतिबंधित करनी चाहिए, MQTT सेवाओं को अविश्वसनीय क्लाइंट्स को उजागर करने से बचना चाहिए, और SQLite समर्थन के बिना बिल्ड में SQLite दृढ़ता को सक्षम करने से बचना चाहिए। विक्रेता को SQLite कॉन्फ़िगरेशन के लिए स्टार्टअप सत्यापन जोड़ना चाहिए और nni_qos_db_set के db == NULL शाखा में संदेश संदर्भ जारी करना चाहिए।

NanoMQ-Memory-Leak-Research

अटैचमेंट

  1. Analysis_Report.md: विश्लेषण का पूरा विवरण, जिसमें जीवनचक्र आरेख और विस्तृत लॉग ट्रेस शामिल हैं।
  2. 249exploit_leak.py: लीक को पुन: उत्पन्न करने के लिए Python PoC स्क्रिप्ट।
  3. nanomq.conf: बेमेल को ट्रिगर करने के लिए उपयोग की जाने वाली कॉन्फ़िगरेशन फ़ाइल।
  4. runtime_logs.log: संदर्भ गणना विसंगति प्रदर्शित करने वाले इंस्ट्रूमेंटेशन लॉग।
  5. Docker/: नियंत्रित परिस्थितियों में भेद्यता को विश्वसनीय रूप से ट्रिगर और मान्य करने के लिए उपयोग किया जाने वाला कंटेनरीकृत पुनरुत्पादन वातावरण।
    विस्तृत बिल्ड निर्देश और वातावरण सेटअप चरण यहां दिए गए हैं:
    Docker/Docker_Reproduction_Guide.md
  6. 249asan_log.txt: NanoMQ v0.24.9 से कैप्चर किया गया AddressSanitizer (ASAN) रनटाइम लॉग, जो मेमोरी लीक और संबंधित असामान्य मेमोरी व्यवहार प्रदर्शित करता है।

तकनीकी विश्लेषण सारांश

सारांश इस रिपॉजिटरी में NanoMQ में पाई गई मेमोरी लीक भेद्यता के लिए प्रूफ ऑफ कॉन्सेप्ट (PoC) और विस्तृत विश्लेषण शामिल है। यह मुद्दा दूरस्थ हमलावरों को विशिष्ट QoS MQTT संदेशों के माध्यम से सिस्टम मेमोरी को समाप्त करके सेवा अस्वीकार (DoS) करने की अनुमति देता है।

मैंने Nanomq में मेमोरी लीक की घटना का गहन विश्लेषण किया है। डायनामिक इंस्ट्रूमेंटेशन और कोड समीक्षा के माध्यम से, मैंने एक महत्वपूर्ण संसाधन लीक पथ की पहचान की जो तब ट्रिगर होता है जब रनटाइम कॉन्फ़िगरेशन SQLite को सक्षम करता है (sqlite.enable=true) लेकिन बाइनरी SQLite समर्थन के बिना संकलित की जाती है (NNG_SUPP_SQLITE अपरिभाषित)।

इस मुद्दे को संक्षिप्त रखने के लिए, मैंने मुख्य निष्कर्षों को नीचे संक्षेप में प्रस्तुत किया है। पूर्ण तकनीकी विवरण (विस्तृत ASAN ट्रेस, जीवनचक्र आरेख और इंस्ट्रूमेंटेशन लॉग सहित) के लिए, कृपया संलग्न Analysis_Report.md देखें।


विश्लेषण प्रक्रिया

1. प्रारंभिक पहचान (ASAN विश्लेषण)

AddressSanitizer का उपयोग करके, मैंने लीक हुई मेमोरी के स्रोत को tcptran_pipe_recv_cb (nng/src/sp/transport/mqtt/broker_tcp.c) के भीतर nni_msg_alloc पर इंगित किया। मेमोरी आवंटित की गई थी लेकिन पूरी तरह से जारी नहीं की गई।

2. जीवनचक्र मॉडलिंग ("3 क्लोन बनाम 3 फ्री" आधार रेखा)

मैंने nni_msg के संदर्भ गणना तंत्र का विश्लेषण किया। एक सामान्य QoS 1 संदेश जीवनचक्र में निम्नलिखित शामिल होना चाहिए:

  • आवंटन (+1): नेटवर्क प्राप्त करना।
  • क्लोन 1 (+1): एप्लिकेशन परत प्रेषण।
  • क्लोन 2 (+1): दृढ़ता/पुनर्प्रेषण तर्क।
  • कुल संदर्भ: 3 -> आवश्यक फ्री: 3।

3. डायनामिक ट्रेसिंग और सत्यापन

चूंकि इस उच्च-समवर्ती परिदृश्य के लिए GDB अव्यावहारिक था, मैंने विशिष्ट मेमोरी ऑब्जेक्ट्स (जैसे, 0x60e00002ffa0) के जीवनचक्र को ट्रेस करने के लिए डायनामिक इंस्ट्रूमेंटेशन का उपयोग किया। निष्कर्ष: लॉग ने जीवनचक्र बेमेल की पुष्टि की:

  • वास्तविक आवंटन: 3 (आवंटन + क्लोन 1 + क्लोन 2)
  • वास्तविक फ्री: 2 (फ्री 1 + फ्री 2)
  • परिणाम: संदर्भ गणना 1 पर बनी रही, जिससे लीक हुआ। लापता फ्री nmq_pipe_send_start_v4 में उत्पन्न क्लोन 2 से मेल खाती है।

4. मूल कारण पहचान

निष्पादन प्रवाह का पता लगाने से पता चला कि तीसरा फ्री क्यों लापता था:

  1. बेमेल: बाइनरी को -DNNG_SUPP_SQLITE के बिना संकलित किया गया था, जिससे nano_sock_setdb में प्रारंभिकरण तर्क हटा दिया गया। हालांकि, nanomq.conf में sqlite.enable = true था। इससे db पॉइंटर NULL बना रहा।
  2. दोषपूर्ण तर्क ("प्रारंभिक वापसी"): जब संदेश (Ref=3) भंडारण के लिए nni_qos_db_set में प्रवेश करता है, तो फ़ंक्शन NULL पॉइंटर की जाँच करता है:
root@kitploit:~
// फ़ाइल: /nanomq/nng/src/supplemental/mqtt/mqtt_qos_db_api.c
void nni_qos_db_set(..., void *db, ..., nng_msg *msg) {
    if (db == NULL) {
        // महत्वपूर्ण दोष:
        // प्रारंभिक वापसी इसलिए होती है क्योंकि db NULL है।
        // फ़ंक्शन 'msg' का स्वामित्व रखता है (Ref++) लेकिन इसे जारी करने में विफल रहता है।
        return; 
    }
    // ...
}

फ़ंक्शन nni_msg_free(msg) को कॉल किए बिना चुपचाप लौटता है। इसके परिणामस्वरूप msg पॉइंटर अपरिवर्तनीय रूप से खो जाता है, जिससे मेमोरी ब्लॉक प्रभावी रूप से अनाथ हो जाता है।


निष्कर्ष और प्रभाव

  • मूल कारण: nni_qos_db_set में रक्षात्मक प्रोग्रामिंग की कमी। यह अमान्य DB स्थिति के कारण प्रारंभिक वापसी करते समय msg पॉइंटर के स्वामित्व को संभालता नहीं है।
  • प्रभाव: इससे एक साइलेंट DoS होता है। लगातार QoS > 0 संदेश—चाहे सामान्य क्लाइंट ट्रैफ़िक से या दुर्भावनापूर्ण अभिनेता से—धीरे-धीरे सिस्टम मेमोरी (OOM) को समाप्त कर देंगे, अंततः ब्रोकर को क्रैश कर देंगे।

सिफारिशें:

  1. तेजी से विफल हों (स्टार्टअप जाँच): सिस्टम स्टार्टअप चरण (nano_sock_setdb या main फ़ंक्शन) के दौरान सत्यापन तर्क जोड़ें ताकि यह सुनिश्चित हो सके कि SQLite सही ढंग से चल रहा है। यदि conf->sqlite.enable == true का पता चलता है लेकिन NNG_SUPP_SQLITE मैक्रो अपरिभाषित है या SQLite असामान्य है, तो सिस्टम को या तो त्रुटि के साथ बाहर निकलना चाहिए या जबरन enable को false पर सेट करना चाहिए और एक चेतावनी प्रिंट करनी चाहिए।
  2. संसाधन सुरक्षा (फेल-सेफ): nni_qos_db_set फ़ंक्शन की प्रारंभिक वापसी शाखा में संसाधन रिलीज़ तर्क जोड़ें। यदि db == NULL है, तो संदर्भ गणना को संतुलित करने और मेमोरी लीक को रोकने के लिए nni_msg_free(msg) को कॉल किया जाना चाहिए।
टूल डाउनलोड करें