
CVE-2026-10672 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, Zephyr RTOS LwM2M फर्मवेयर-अपडेट पुल क्लाइंट में एक आउट-ऑफ-बाउंड्स रीड। इसमें स्वतंत्र C प्रतिकृति और परीक्षण के लिए दुर्भावनापूर्ण CoAP/LwM2M सर्वर शामिल है।
CVE-2026-10672 के लिए प्रूफ ऑफ कॉन्सेप्ट, Zephyr RTOS के LwM2M फर्मवेयर-अपडेट पुल क्लाइंट (subsys/net/lib/lwm2m/lwm2m_pull_context.c) में एक आउट-ऑफ-बाउंड्स रीड।
lwm2m_pull_context_start_transfer() in lwm2m_pull_context.cmemcpy(context.uri, uri, LWM2M_PACKAGE_URI_LEN) सर्वर-द्वारा आपूर्ति किए गए पैकेज URI (/5/0/1) के 128 बाइट्स या उससे अधिक होने पर बिना NUL टर्मिनेटर के char uri[128] में ठीक 128 बाइट्स कॉपी करता है। बाद में strlen(context.uri), http_parser_parse_url(), और CoAP PROXY_URI विकल्प बफर से आगे पढ़ते हैं, जिससे आसन्न स्ट्रक्ट मेमोरी (is_firmware_uri, result_cb / write_cb फंक्शन पॉइंटर्स, और DTLS कनेक्शन कॉन्टेक्स्ट) में पढ़ाई होती है। अतिरिक्त पढ़े गए बाइट्स आउटबाउंड CoAP अनुरोध में बाहर निकाल दिए जाते हैं।context.uri[128] (CONFIG_LWM2M_SWMGMT_PACKAGE_URI_LEN, डिफ़ॉल्ट 128; LWM2M_PACKAGE_URI_LEN इसके लिए #define किया गया है)99a164df5cea5af76e32b57c6d51854f018969a2 — strlen(uri) >= sizeof(context.uri) → -ENOMEM जोड़ता है और strcpy() पर स्विच करता है।| File | Purpose |
|---|---|
poc.c | स्वतंत्र C प्रतिकृति जो कमजोर/ठीक किए गए कोड पथों को दर्शाती है। (वह बफर और आसन्न फ़ील्ड जो अतिरिक्त पढ़े जाते हैं) और लीकी CoAP उपभोक्ता को ईमानदारी से पुनः घोषित करता है। |
gcc -O0 -g -o poc poc.c
./poc
अपेक्षित: 200-बाइट पैकेज URI CoAP PROXY_URI विकल्प 141 बाइट्स उत्पन्न करता है — 128-बाइट URI और 13 बाइट्स लीक हुए context.is_firmware_uri, स्ट्रक्ट पैडिंग, और result_cb/write_cb फंक्शन पॉइंटर्स से। ठीक किया गया कोड पथ URI को -ENOMEM के साथ अस्वीकार करता है और कुछ भी कॉपी नहीं करता है।
gcc -O0 -g -fsanitize=address -o poc-asan poc.c
./poc-asan
प्रोब ठीक 128 बाइट्स आवंटित करता है, उन्हें गैर-NUL बाइट्स (बिना टर्मिनेटर के पूर्ण context.uri को दर्पणित करते हुए) से भरता है और strlen() को कॉल करता है:
ERROR: AddressSanitizer: heap-buffer-overflow
READ of size 129 at 0x...
0x... is located 0 bytes after 128-byte region [...,0x...)
# Build and inspect the CoAP packets without sending:
python3 lwm2m_evil_server.py --dry-run --uri-len 200
# Send to a vulnerable client (NoSec CoAP, UDP/5683):
python3 lwm2m_evil_server.py --target 10.0.0.42 --port 5683 --uri-len 200 --listen 2
स्क्रिप्ट एक CoAP PUT /5/0/1 (LwM2M पैकेज URI संसाधन का लिखना) और फिर एक CoAP POST /5/0/2 (LwM2M अपडेट निष्पादित करें, जो फर्मवेयर पुल शुरू करता है और बग को ट्रिगर करता है) जारी करती है। उत्पादन LwM2M में सत्र DTLS (UDP/5684) पर चलता है; हमले का दायरा एक दुर्भावनापूर्ण/समझौता किया गया प्रबंधन सर्वर है, या एक ऑन-पाथ प्रतिद्वंद्वी जब DTLS सर्वर प्रमाणीकरण लागू नहीं किया जाता है।
केवल अधिकृत सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए। इन उपकरणों का उपयोग उन उपकरणों के विरुद्ध न करें जिनके आप मालिक नहीं हैं या जिनके परीक्षण की आपको स्पष्ट अनुमति नहीं है।
struct firmware_pull_contexturi[128]PROXY_URIlwm2m_evil_server.py | न्यूनतम CoAP/LwM2M सर्वर जो UDP (NoSec मोड) पर एक कमजोर क्लाइंट के /5/0/1 को अतिरिक्त-आकार का पैकेज URI प्रदान करता है — हमले का नेटवर्क-डिलीवरी आधा। कोई बाहरी निर्भरता नहीं। |