
CVE-2026-44848 के लिए PoC: Docker प्लगइन एंडपॉइंट्स पर Portainer में अनधिकृत पहुंच नियंत्रण की कमी -> होस्ट RCE (GHSA-rrmm-9v76-h3p4)। केवल Stdlib Python।
CVE-2026-44848 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, Portainer में एक प्रमाणीकरण-रहित (CWE-862) भेद्यता, जो Docker एंडपॉइंट एक्सेस वाले गैर-एडमिन उपयोगकर्ता को विशेषाधिकार प्राप्त Docker प्लगिन ऑपरेशन करने की अनुमति देती है → पूर्ण होस्ट RCE।
GitHub सुरक्षा सलाह: GHSA-rrmm-9v76-h3p4 · CVSS 9.4 (क्रिटिकल)।
Portainer, Docker API के ऊपर Role-Based Access Control (RBAC) लागू करता है, अनुरोधों को प्रति-संसाधन हैंडलरों के माध्यम से प्रॉक्सी करके जो प्राधिकरण जाँच लागू करते हैं। Docker प्लगिन प्रबंधन एंडपॉइंट्स (/plugins/*) किसी हैंडलर के साथ पंजीकृत नहीं थे, इसलिए प्राधिकरण परत उनके लिए कभी नहीं चलती। परिणामस्वरूप, एक Standard User (Role 2) — या एंडपॉइंट-स्तरीय एक्सेस वाली कोई भी भूमिका — अंतर्निहित Docker डेमॉन के विरुद्ध सीधे विशेषाधिकार प्राप्त प्लगिन ऑपरेशन कॉल कर सकता है:
POST /plugins/pull — किसी भी रजिस्ट्री से एक मनमाना प्लगिन पुल (pull) करेंCAP_SYS_ADMIN और होस्ट-पथ माउंट्स सहित विशेषाधिकारों का अनुरोध करता हैPOST /plugins/{name}/enable — Docker प्लगिन को उन क्षमताओं के साथ होस्ट पर root के रूप में चलाता है → पूर्ण होस्ट फाइलसिस्टम एक्सेस और Docker होस्ट पर root के समतुल्य>= 2.33.0, < 2.33.8>= 2.39.0, < 2.39.2>= 2.40.0, < 2.41.0बग का मूल, सुरक्षित रूप से पुनरुत्पादन योग्य प्राइमेटिव: एक मानक (गैर-एडमिन) उपयोगकर्ता प्राधिकरण के बिना Portainer के प्रॉक्सी के माध्यम से विशेषाधिकार प्राप्त /plugins/* Docker API तक पहुँच सकता है। यह एक वास्तविक भेद्य Portainer इंस्टेंस के विरुद्ध एंड-टू-एंड ऐसा करता है:
POST /api/users/admin/init के माध्यम से एक एडमिन बूटस्ट्रैप करता है (409 सहन करता है + लॉगिन पर फॉल बैक करता है)।bob, Role 2) बनाता है, और 409 आने पर उसका पासवर्ड रीसेट करके उसे सहन करता है।POST /api/endpoints के माध्यम से लोकल सॉकेट एंडपॉइंट स्वतः बनाता है) और PUT /api/endpoints/{id} UserAccessPolicies के माध्यम से bob को एक्सेस प्रदान करता है।bob के रूप में (गैर-एडमिन उपयोगकर्ता) लॉगिन करता है और bob के टोकन के साथ GET /api/endpoints/1/docker/plugins कॉल करता है।# Defaults: https://localhost:9444, random admin password
python3 portainer_plugin_poc.py
# Explicit target + admin password + command
python3 portainer_plugin_poc.py --url https://localhost:9444 --admin-pass 'P@ssw0rd!' --command "id; hostname"
# Write a JSON summary
python3 portainer_plugin_poc.py --url https://localhost:9444 --output out.json
python3 portainer_plugin_poc.py --help
केवल Python 3 stdlib की आवश्यकता है। TLS सत्यापन अक्षम है (सेल्फ-साइन्ड लैब प्रमाणपत्र)।
docker run -d --name portainer-lab-cve44848 \
-p 127.0.0.1:9444:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer-ce:2.39.1 # vulnerable
AUTH-BYPASS CONFIRMED: standard user reached /plugins (HTTP 200)
=> PASS (missing auth / host-RCE primitive confirmed)
केवल अधिकृत सुरक्षा अनुसंधान और परीक्षण के लिए। सक्षम करने वाला चरण (POST /plugins/*) होस्ट पर root प्रदान कर सकता है; यह PoC प्राधिकरण बाईपास प्रदर्शित करने तक ही सीमित है और कोई विनाशकारी/दुर्भावनापूर्ण प्लगिन सक्षम नहीं करता। केवल उन सिस्टम्स के विरुद्ध उपयोग करें जिनके स्वामी आप हैं या जिनके परीक्षण के लिए आप अधिकृत हैं।