
Tenda Technology Co., Ltd NVR_4H: تم اكتشاف أن الإصدار CH3 v2.1.V27.5.58.6 يحتوي على مفتاح تشفير مُضمَّن بشكل ثابت.
معرّف CNVD: CNVD-2026-25884
الجهة المصنّعة: Tenda Technology Co., Ltd.
المنتج: مسجّل فيديو شبكي NVR_4H (إصدار العتاد CH3V2.1)
البرنامج الثابت: V27.5.58.6
التصنيف: CWE-321 — استخدام مفتاح تشفيري مُضمَّن
يخزّن البرنامج الثابت لـ NVR_4H زوج مفاتيح ECDSA في قسم user-x.squashfs للقراءة فقط (المُثبَّت على /opt/app/): المفتاح الخاص في /etc/privkey.pem والشهادة الموقّعة ذاتيًا المطابقة في /etc/cacert.pem. تم توليد كلاهما مرة واحدة وقت البناء وتضمينهما في الصورة، لذا فإن كل جهاز يعمل بالإصدار V27.5.58.6 يأتي مزوّدًا بالمفتاح الخاص نفسه.
صورة البرنامج الثابت متاحة للتنزيل مجانًا من موقع Tenda. أي شخص يفكّ ضغطها يحصل على مفتاح خاص فعّال لواجهة HTTPS في كل جهاز NVR_4H على هذا الإصدار. يمكن لمهاجم على الشبكة نفسها (LAN أو Wi-Fi أو جهاز متصل بالإنترنت) أن يضع وسيطًا بين متصفح المسؤول وجهاز NVR عبر انتحال ARP أو تسميم DNS، ويعرض شهادة Tenda الأصلية بالمفتاح المستخرج، ولن يُظهر المتصفح أي تحذير. عندها تصبح الجلسة كاملة قابلة للقراءة والتعديل في الوقت الفعلي: تسجيل دخول المسؤول، ورموز الجلسة، وبيانات اعتماد RTSP للكاميرا، وإعدادات الجهاز.
| الملف | الوصف |
|---|---|
/etc/privkey.pem | مفتاح EC خاص بحجم 302 بايت (P-256) |
/etc/cacert.pem | شهادة موقّعة ذاتيًا بحجم 802 بايت، O=Tenda, OU=Video Surveillance, CN=www.tenda.com.cn |
حاوية البرنامج الثابت هي أرشيف ZIP عند الإزاحة 0xBBB:
# 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 هو نظام ملفات مضغوط للقراءة فقط، لذا فإن محتواه متطابق بايت ببايت في كل وحدة تُشحن.
لا يوجد أي تزويد خاص بكل جهاز في أي مكان في الصورة: لا سكربتات تهيئة، ولا ملف openssl التنفيذي، ولا توليد مفاتيح عند أول إقلاع. السلاسل الوحيدة المتعلقة بتوليد المفاتيح في نظام الملفات بأكمله تأتي من hostapd وwpa_supplicant، وهما لا علاقة لهما بخادم HTTPS.
يحتوي /etc/ داخل squashfs على أربعة ملفات فقط، اثنان منها هما مادة المفتاح هذه. وكلاهما يحمل طابع وقت بناء squashfs بدلًا من وقت التشغيل.
الشهادة هي X.509 v1، موقّعة ذاتيًا (المُصدِر = الموضوع = C=CN, ST=ZJ, L=HZ, O=Tenda, OU=Video Surveillance, CN=www.tenda.com.cn)، صالحة من 1999-12-31 إلى 2049-12-18، بدون SAN وبدون امتدادات استخدام المفتاح. الرقم التسلسلي 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 بأكملها لكل جهاز على إصدار البرنامج الثابت هذا، في مواجهة أي شخص نزّل الصورة العامة. لا حاجة إلى أي صلاحيات ولا تفاعل من المستخدم على جانب الهدف — يكفي هجوم رجل في المنتصف سلبي. تمنح بيانات اعتماد المسؤول المسروقة سيطرة كاملة على المسجّل وكاميراته.
ولّد زوج مفاتيح فريدًا لكل جهاز عند أول إقلاع وخزّنه على قسم قابل للكتابة (مثل منطقة JFFS2 تحت /opt/sav/)، وأزل privkey.pem وcacert.pem من الصورة للقراءة فقط بالكامل. وعلى المدى الأطول، أصدر شهادات لكل جهاز موقّعة وقت التصنيع.