
CVE-2025-9074 के लिए Proof-of-concept शोषण जो Docker Desktop API escape को कच्चे HTTP अनुरोधों के माध्यम से सक्षम बनाता है। केवल curl, dd, और awk का उपयोग करके एक कंटेनर के अंदर एक अनुकरणीय इंटरैक्टिव शेल प्रदान करता है।
एक हल्का, बिना निर्भरता वाला bash स्क्रिप्ट जो आपको एक अनुरूपित इंटरैक्टिव शेल देता है Docker कंटेनर के अंदर — केवल curl, dd, od, और awk का उपयोग करके। न Python, न jq, न किसी संपादक की आवश्यकता।
उन वातावरणों के लिए बनाया गया जहाँ आपके पास केवल रॉ शेल पहुँच है और आपको Docker Engine API के माध्यम से Docker कंटेनर के अंदर कमांड निष्पादित करने की आवश्यकता है।
Docker CLI का उपयोग करने के बजाय, यह स्क्रिप्ट HTTP पर Docker Engine REST API से सीधे संवाद करता है (आमतौर पर Docker Desktop / WSL2 वातावरण में http://192.168.65.7:2375 पर उजागर होता है)।
यह:
C:\ ड्राइव को माउंट करके एक Alpine Linux कंटेनर बनाता और शुरू करता हैdd + od का उपयोग करके Docker के मल्टीप्लेक्स्ड बाइनरी स्ट्रीम आउटपुट को पार्स करता है — Python की आवश्यकता नहींDocker सभी exec आउटपुट को बाइनरी फ्रेमिंग प्रारूप में लपेटता है:
[1 byte: stream type] [3 bytes: padding] [4 bytes: payload size (big-endian)] [payload...]
यह स्क्रिप्ट केवल मानक Unix उपकरणों का उपयोग करके फ्रेम-दर-फ्रेम डिकोड करता है।
bashcurldd, od, awk, grep, cut — सभी मानक Unix उपकरणhttp://192.168.65.7:2375 पर सुलभ (WSL2 पर Docker Desktop)jq, Python, nano, या संपादक नहीं।git clone https://github.com/yourusername/docker-shell.git
cd docker-shell
chmod +x docker_shell.sh
bash docker_shell.sh
================================================
Docker Emulated Shell [target: alpine_escape]
Commands: start | status | run <cmd> | exit
================================================
docker> start
docker> status
docker> run ls /mnt
docker> run ls /mnt/Users
docker> run cat /etc/os-release
docker> run id
docker> exit
कंटेनर आपकी Windows C:\ ड्राइव को (WSL2 के माध्यम से) /mnt पर माउंट करता है:
| Windows पथ | कंटेनर के अंदर |
|---|
run एक अलग exec इंस्टेंस है — कमांडों के बीच स्थिति संग्रहीत नहीं होती। एक कॉल में कमांड को चेन करने के लिए run cd /some/dir && ls का उपयोग करें।alpine_escape) से लक्षित करता है, ID से नहीं, इसलिए यह गलती से गलत कंटेनर में exec नहीं होगा।/tmp/docker_out.bin से dd का उपयोग करके फ्रेम-दर-फ्रेम पार्स किया जाता है।अपने वातावरण से मेल खाने के लिए स्क्रिप्ट के शीर्ष पर इन चरों को संपादित करें:
DOCKER="http://192.168.65.7:2375" # Docker Engine API address
CONTAINER="alpine_escape" # Container name
AGPLv3
| Command | Description |
|---|
start | आवश्यकता होने पर alpine_escape कंटेनर बनाता और शुरू करता है |
status | कंटेनर ID और वर्तमान स्थिति दिखाता है |
run <cmd> | कंटेनर के अंदर कोई भी शेल कमांड निष्पादित करता है |
exit / quit | अनुरूपित शेल से बाहर निकलता है |
C:\ | /mnt |
C:\Users | /mnt/Users |
C:\Program Files | /mnt/Program Files |
C:\Windows\System32 | /mnt/Windows/System32 |