
Python PoC जो CUPS 2.4.16 लोकल-प्रिंटर फ्लॉ को दोबारा बनाता है: एक रोग IPP एंडपॉइंट के ज़रिए Local auth टोकन को कैप्चर करता है, एक file:// प्रिंटर बनाता है, और root-स्वामित्व वाली फ़ाइलें लिखने के लिए एक जॉब को रेस करता है।
केवल अधिकृत परीक्षण / शोध उपयोग के लिए। इस PoC को केवल उन सिस्टमों के विरुद्ध चलाएँ जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आपको स्पष्ट रूप से अधिकृत किया गया है।
यह रिपॉज़िटरी CUPS 2.4.16 में लोकल-प्रिंटर भेद्यता का सिस्टम-CUPS-उन्मुख पुनरुत्पादन समाहित करती है।
यह कार्यान्वयन प्रकाशित CUPS भेद्यता पुनरुत्पादन से विकसित किया गया था और इसे पहले से चल रहे सिस्टम CUPS इंस्टॉलेशन के विरुद्ध काम करने के लिए अनुकूलित किया गया है, बजाय इसके कि अलग से इंस्टॉल किए गए CUPS बिल्ड और रूट-चलित पुनरुत्पादन हार्नेस की आवश्यकता हो।
पुनरुत्पादन इस सामान्य श्रृंखला का अनुसरण करता है:
CUPS 2.4.16
│
▼
Local authentication challenge
│
▼
Attacker-controlled IPP endpoint
│
▼
Authorization: Local <token>
│
▼
Authenticated CUPS administration
│
▼
CUPS-Create-Local-Printer
│
▼
file:// device URI
│
▼
Printer/job race
│
▼
Root-owned target file
यह एक्सप्लॉइट रेस-निर्भर है, इसलिए हर प्रयास में सफल निष्पादन की गारंटी नहीं है।
प्रकाशित पुनरुत्पादन एक नियंत्रित भेद्यता हार्नेस के रूप में डिज़ाइन किया गया है। विशेष रूप से, यह एक समर्पित CUPS इंस्टॉलेशन मानता है और सेटअप/रीसेट संचालन करता है जो पुनरुत्पादन वातावरण के लिए उपयुक्त हैं लेकिन पहले से चल रहे डिस्ट्रिब्यूशन इंस्टॉलेशन का प्रतिनिधित्व नहीं करते।
यह कार्यान्वयन इसके बजाय:
ipptool बाइनरी का उपयोग करता है।cups-create-local-printer.test परिभाषा का उपयोग करता है।Local प्राधिकरण टोकन को कैप्चर करता है।file:// प्रिमिटिव का पुनरुत्पादन करता है।लेखक की प्रयोगशाला में इसका परीक्षण किया गया:
ipptoolपरीक्षण परिभाषा यहाँ अपेक्षित है:
/usr/share/cups/ipptool/cups-create-local-printer.test
अपने इंस्टॉलेशन की जाँच इस प्रकार करें:
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
हमलावर पहचान और लक्ष्य पथ को पर्यावरण चर के माध्यम से कॉन्फ़िगर करें:
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
नियंत्रित विशेषाधिकार-उन्नयन पुनरुत्पादन के लिए, अपने पृथक परीक्षण वातावरण के लिए उपयुक्त लक्ष्य चुनें।
स्क्रिप्ट डिफ़ॉल्ट रूप से /etc/sudoers.d/ के अंतर्गत sudoers-शैली लक्ष्य का भी उपयोग करती है, इसलिए इसे उत्पादन सिस्टम पर लापरवाही से न चलाएँ।
PoC एक IPP श्रोता प्रारंभ करता है और CUPS को उसके विरुद्ध प्रमाणित करने का कारण बनता है। श्रोता प्रारंभ में 401 चुनौती इस प्रकार लौटाता है:
WWW-Authenticate: Local trc="y"
इसके बाद का अनुरोध इसमें समाहित होता है:
Authorization: Local <token>
फिर टोकन का पुनः उपयोग स्थानीय CUPS प्रशासन एंडपॉइंट के विरुद्ध किया जाता है।
पुनरुत्पादन इसका उपयोग करता है:
CUPS-Create-Local-Printer
file:// डिवाइस URI के साथ।
उम्मीदवार लूप प्रिंटर संचालनों को बार-बार निष्पादित करता है, जिनमें शामिल हैं:
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
रेस को जानबूझकर दोहराया जाता है क्योंकि एकल प्रयास सफल नहीं हो सकता।
यह रिपॉज़िटरी एक अनुकूलन है, न कि विहित अपस्ट्रीम कार्यान्वयन।
अनुरोध-निर्माण तर्क और शोषण अनुक्रम प्रकाशित पुनरुत्पादन पर आधारित हैं। मुख्य परिवर्तन मौजूदा सिस्टम CUPS इंस्टॉलेशन के विरुद्ध चलाने और पुनरुत्पादन-वातावरण सेटअप/रीसेट मान्यताओं को हटाने के आसपास हैं।
आधिकारिक भेद्यता जानकारी और मूल पुनरुत्पादन के लिए अपस्ट्रीम OpenPrinting CUPS सुरक्षा सलाह और रिपॉज़िटरी देखें।
अधिकृतता के बिना CUPS इंस्टॉलेशनों के विरुद्ध इसका उपयोग न करें।
रक्षात्मक सत्यापन के लिए, उपयोगी संकेतकों में हमलावर-नियंत्रित एंडपॉइंटों पर अप्रत्याशित IPP अनुरोध, असामान्य Local प्रमाणीकरण आदान-प्रदान, अप्रत्याशित लोकल प्रिंटरों का निर्माण, और संदिग्ध प्रिंटर/जॉब गतिविधि शामिल हैं।