
يوثّق ويعيد إنتاج ثغرة مصادقة من نوع fail-open في SONiC gNMI حيث تسمح خريطة UserAuth الفارغة بعمليات كتابة gNMI Set وgNOI دون مصادقة، مع بيئة مختبر loopback.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sonic-gnmi-noauth
SONiC gNMI f13a08e0440f - SONiC Foundation / sonic-net
نظام تشغيل SONiC المجتمعي. ليس Dell Enterprise SONiC. وليس SonicWall SonicOS. اللجنة لا تصدر CVEs. يعرف gnmi-native.sh أن حذف --client_auth كان يعطّل المصادقة بالكامل، لذا عندما يكون user_auth مفقودًا فإنه يفرض وضع الشهادة. فشل مغلق. ثم لا يمرر أبدًا --ca_crt عند غياب الشهادات. يقوم setupFlags بإلغاء تعيين الشهادة لعدم وجود CA. ويعتبر authenticate() الخريطة الفارغة نجاحًا. تبقى كتابات native و translib مُجمَّعة (ENABLE_NATIVE_WRITE=y). مجموعتا أعلام في الإنتاج، نفس التخطي: ToR الافتراضي --noTLS --bind_address 127.0.0.1؛ SmartSwitch DPU --insecure --allow_no_client_auth، bind فارغ، جميع الواجهات، المنفذ 8080.
UserAuth الفارغ بعد إلغاء تعيين الشهادة يعني gNMI Set وكتابات gNOI بدون مصادقة. DPU بدون شهادات يكون عن بُعد على :8080.
| ID | لا يوجد CVE بعد |
| CWE | CWE-306، CWE-287 |
| CVSS | حرج: 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (DPU بدون شهادة). ToR الافتراضي هو نفس التخطي على 127.0.0.1:8080 (عالي، محلي). |
| المنتج | sonic-gnmi / sonic-buildimage |
| المتأثر | sonic-gnmi حتى master f13a08e0440f؛ المشغّل 9495839742e4 |
| المصادقة | بدون مصادقة |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
على SmartSwitch DPU بدون شهادات gNMI: من الشبكة، TCP :8080، بدون JWT، بدون PAM، بدون شهادة عميل. استدعاء gnmi.gNMI/Set (native CONFIG_DB / translib). استدعاء gnoi.debug.Debug. إعادة التشغيل. إعادة ضبط المصنع. File.Put تحت /tmp، /var/tmp، /host.
على ToR/leaf افتراضي بدون شهادات: أي عملية تستطيع الوصول إلى 127.0.0.1:8080 تفعل الشيء نفسه. حاوية gnmi تستخدم شبكة المضيف، لذا فإن ذلك loopback هو loopback المضيف.
هذا إعادة كتابة إعدادات السويتش، وأوامر المضيف كـ admin، دون مصادقة. القائمة البيضاء لـ Debug تتضمن docker، config، redis-cli، sonic-installer، reboot. المستخدم الافتراضي admin موجود في docker و %sudo. ليس كلمة مرور admin الافتراضية الموثقة. لا يزال KillProcess يُرجع Unauthenticated عند UserAuth الفارغ. لا تستخدم ذلك كأوراكل للنجاح.
قرأت SECURITY.md أولًا. sonic-net/SONiC هو الويكي. الكود موجود في أشجار sonic-net/* الشقيقة. ثم عشر عمليات بحث على تلك الإصدارات المثبتة: حقن CLI، مصادقة REST، gNMI Set، hostcfgd PAM، RESTCONF، ZTP، صورة Redis/sshd/sudo، إعدادات FEATURE الافتراضية، GCU/SSTI، DHCP/LLDP/SNMP. بدون سويتش حي. كان المعيار هو حرج/عالي.
معظم ذلك المعيار مغلق بالفعل أو ليس افتراضيًا. sonic-restapi هو INCLUDE_RESTAPI ?= n. مشغّل RESTCONF في الإنتاج يفرض PAM. Redis المضيف على 127.0.0.1 بدون requirepass، وهو قفزة أولى وليس اكتشافًا. حاوية gnmi ليست اختيارية. INCLUDE_SYSTEM_GNMI = y. ميزة gnmi مفعّلة. شبكة المضيف، pid المضيف، userns المضيف.
لم أقم بتشغيل صورة sonic-vs كاملة. المختبر عبارة عن gRPC رقيق يغلّف مستخلصات مُتحقق من تجزئتها بـ SHA256 من setupFlags و authenticate() من الإصدار f13a08e0440f. كلا المستمعين أرجعا SONIC-GNMI-NOAUTH-WITNESS مع auth_enabled=false و enable_native_write=true. UserAuth بكلمة مرور بدون بيانات اعتماد هو Unauthenticated. هذا هو التخطي الحقيقي، وليس بديلًا ينجح دائمًا.
المنعطفات الخاطئة المسجلة بالفعل: KillProcess Unauthenticated (هذا الـ RPC يرفض بالفعل UserAuth الفارغ - المختبر يتطلب تخطي authenticate() في مسار Set)؛ Probe OK عندما يكون UserAuth بكلمة مرور مفعّلًا وبدون بيانات اعتماد (عندها يكون الأوراكل بديلًا)؛ أداة gNOI Debug docker، حمولة nsenter، reverse shell. مسرح. توجيه هذا إلى جهاز Dell Enterprise SONiC، أو SonicWall. منتج خاطئ.
cd lab
./run.sh
استهدف فقط 127.0.0.1:18080 (ToR نص صريح) و 127.0.0.1:18081 (DPU TLS غير آمن). gRPC رقيق، وليس صورة DPU كاملة. مستخلصات الإصدار المُجزأة عند البناء مقابل sonic-gnmi f13a08e0440f.
IOC tor-connect 127.0.0.1:18080 plaintext no-metadata
IOC tor-check witness=SONIC-GNMI-NOAUTH-WITNESS auth_enabled=false enable_native_write=true user_auth_any=false mode=tor
IOC dpu-connect 127.0.0.1:18081 tls-insecure no-client-cert no-metadata
IOC dpu-check witness=SONIC-GNMI-NOAUTH-WITNESS auth_enabled=false enable_native_write=true user_auth_any=false mode=dpu
IOC tor-negative status=UNAUTHENTICATED
IOC dpu-negative status=UNAUTHENTICATED
SUCCESS SONIC-GNMI-NOAUTH who=unauth tor=18080 dpu=18081 SONIC-GNMI-NOAUTH-WITNESS
إذا كان UserAuth فارغًا بعد إزالة الشهادة، فلا تقدّم Set/gNOI write، أو لا تستمع خارج loopback. انسخ UserAuth على مسار --noTLS أيضًا. وفّر شهادات الخادم و CA بحيث يتم تعيين --ca_crt ولا يتم إلغاء تعيين وضع الشهادة. لا تشغّل SmartSwitch DPU بدون شهادة (--insecure --allow_no_client_auth مع CA فارغ) على :8080 قابل للوصول. يجب أن يُرجع كلا المستمعين Unauthenticated عند UserAuth الفارغ على مسار الكتابة.
telemetry.go · server.go · whitelist.go · command.gognmi-native.sh · rules/config · init_cfg.json.j2GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. بدون ضمان.