
Tenda Technology Co., Ltd NVR_4H: CH3 v2.1.V27.5.58.6 में एक हार्डकोडेड क्रिप्टोग्राफिक कुंजी पाई गई।
CNVD ID: CNVD-2026-25884
विक्रेता: Tenda Technology Co., Ltd.
उत्पाद: NVR_4H नेटवर्क वीडियो रिकॉर्डर (हार्डवेयर संस्करण CH3V2.1)
फर्मवेयर: V27.5.58.6
वर्ग: CWE-321 — हार्ड-कोडेड क्रिप्टोग्राफिक कुंजी का उपयोग
NVR_4H फर्मवेयर अपने रीड-ओनली user-x.squashfs पार्टीशन (जो /opt/app/ पर माउंट होता है) में एक ECDSA कुंजी युग्म संग्रहीत करता है: निजी कुंजी /etc/privkey.pem में और उससे मेल खाता स्व-हस्ताक्षरित प्रमाणपत्र /etc/cacert.pem में। दोनों को बिल्ड समय पर एक बार उत्पन्न किया गया और इमेज में बेक कर दिया गया, इसलिए V27.5.58.6 चलाने वाला प्रत्येक डिवाइस समान निजी कुंजी के साथ भेजा जाता है।
फर्मवेयर इमेज Tenda की वेबसाइट से मुफ्त डाउनलोड है। जो कोई भी इसे अनपैक करता है, उसके पास इस संस्करण पर प्रत्येक NVR_4H के HTTPS इंटरफ़ेस के लिए एक कार्यशील निजी कुंजी होती है। उसी नेटवर्क पर मौजूद हमलावर (LAN, Wi-Fi, या इंटरनेट-फेसिंग डिवाइस) ARP स्पूफिंग या DNS पॉइज़निंग के माध्यम से एडमिन के ब्राउज़र और NVR के बीच एक प्रॉक्सी लगा सकता है, निकाली गई कुंजी के साथ असली Tenda प्रमाणपत्र प्रस्तुत कर सकता है, और ब्राउज़र कोई चेतावनी नहीं दिखाएगा। फिर पूरा सत्र वास्तविक समय में पठनीय और संशोधन योग्य होता है: एडमिन लॉगिन, सत्र टोकन, कैमरा RTSP क्रेडेंशियल, डिवाइस कॉन्फ़िगरेशन।
| फ़ाइल | विवरण |
|---|---|
/etc/privkey.pem | 302-बाइट EC निजी कुंजी (P-256) |
/etc/cacert.pem | 802-बाइट स्व-हस्ताक्षरित प्रमाणपत्र, O=Tenda, OU=Video Surveillance, CN=www.tenda.com.cn |
फर्मवेयर कंटेनर ऑफ़सेट 0xBBB पर एक ZIP संग्रह है:
# 1. unpack the firmware
binwalk -e ted.bin
cd ted.bin.extracted/BBB
# 2. strip the 64-byte proprietary header
dd if=user-x.squash.img of=pure_system.squashfs bs=1 skip=64
# 3. unpack the filesystem
unsquashfs pure_system.squashfs
# 4. locate the key material
find squashfs-root -name "*.pem"
# squashfs-root/etc/cacert.pem
# squashfs-root/etc/privkey.pem
यह पुष्टि करने के लिए कि निजी कुंजी भेजे गए प्रमाणपत्र से संबंधित है, दोनों से सार्वजनिक कुंजी निर्यात करें और तुलना करें:
openssl ec -in squashfs-root/etc/privkey.pem -pubout > pub_from_priv.pem
openssl x509 -in squashfs-root/etc/cacert.pem -pubkey -noout > pub_from_cert.pem
diff pub_from_priv.pem pub_from_cert.pem
# no output
sha256sum pub_from_priv.pem pub_from_cert.pem
# 80b6aa4b9e8f4cd30e857ff5b9bfcf7e0227e268f4d397efdaffe37d4b0e9bcc (both files)
कुंजी सीधे इमेज से भी काम करती है:
openssl s_server \
-key squashfs-root/etc/privkey.pem \
-cert squashfs-root/etc/cacert.pem \
-accept 4433 -www
# ACCEPT — TLS server starts with no errors
user-x.squashfs एक संपीड़ित रीड-ओनली फ़ाइलसिस्टम है, इसलिए इसकी सामग्री भेजे गए प्रत्येक यूनिट पर बाइट-समान होती है।
इमेज में कहीं भी प्रति-डिवाइस प्रोविज़निंग नहीं है: कोई init स्क्रिप्ट नहीं, कोई openssl बाइनरी नहीं, कोई फर्स्ट-बूट कुंजी जनरेशन नहीं। पूरे फ़ाइलसिस्टम में केवल keygen-संबंधित स्ट्रिंग्स hostapd और wpa_supplicant से आती हैं, जिनका HTTPS सर्वर से कोई लेना-देना नहीं है।
squashfs के अंदर /etc/ में केवल चार फ़ाइलें हैं, जिनमें से दो यह कुंजी सामग्री हैं। दोनों में रनटाइम के बजाय squashfs बिल्ड टाइमस्टैम्प है।
प्रमाणपत्र X.509 v1 है, स्व-हस्ताक्षरित (issuer = subject = C=CN, ST=ZJ, L=HZ, O=Tenda, OU=Video Surveillance, CN=www.tenda.com.cn), 1999-12-31 से 2049-12-18 तक मान्य, बिना SAN और बिना key usage एक्सटेंशन के। सीरियल 1c:f2:13:a0:7b:e2:7c:91:63:f3:e0:0c:be:0f:0d:42:2e:6b:e8:69 निश्चित है और सभी डिवाइसों में समान है।
निकाली गई निजी कुंजी, जैसी है वैसी उपयोग योग्य:
-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIHQLiI/KUzk/hXX4BZVuujlQMit341WWi3sTpLlGQVcaoAoGCCqGSM49
AwEHoUQDQgAEqFt550/3k/nGoYr4CFeRtvDf9HuZpHbb5FecKweJtFH7a5hBNFqq
qckxILVt8KefGENelZgPdEGNU6VcXyTORA==
-----END EC PRIVATE KEY-----
इस फर्मवेयर संस्करण पर प्रत्येक डिवाइस के लिए पूरे HTTPS प्रबंधन इंटरफ़ेस की गोपनीयता और अखंडता उस किसी के विरुद्ध खो जाती है जिसने सार्वजनिक इमेज डाउनलोड की है। लक्ष्य पक्ष पर किसी विशेषाधिकार और किसी उपयोगकर्ता इंटरैक्शन की आवश्यकता नहीं है — एक निष्क्रिय MITM पर्याप्त है। चुराए गए एडमिन क्रेडेंशियल रिकॉर्डर और उसके कैमरों पर पूर्ण नियंत्रण देते हैं।
पहले बूट पर प्रति-डिवाइस एक अद्वितीय कुंजी युग्म उत्पन्न करें और इसे एक राइटेबल पार्टीशन (जैसे /opt/sav/ के अंतर्गत JFFS2 क्षेत्र) पर संग्रहीत करें, और privkey.pem तथा cacert.pem को रीड-ओनली इमेज से पूरी तरह हटा दें। दीर्घकालिक रूप से, निर्माण समय पर हस्ताक्षरित प्रति-डिवाइस प्रमाणपत्र जारी करें।