
Grafana OSS 13.2.3 - عالي - عن بُعد - SSRF - Git Sync URLValidator هو DNS للقبول فقط
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · grafana-gitsync-dns-rebind
الفئة: SSRF الوصول: عن بُعد
Grafana OSS 13.2.3 (6193dc0) - Grafana Labs
يتحقق Git Sync URLValidator من مضيف عنوان URL للمستودع عند القبول. يعيد nanogit / Test التحليل لاحقًا دون تثبيت عنوان IP. isBlockedIP يقتصر على loopback و RFC1918 و link-local و unspecified فقط. العنوان الحرفي 0.0.0.1 غير محظور. يمكن لاسم مضيف يكون عامًا وقت التحقق أن يُعاد ربطه بـ RFC1918 من أجل طلب GET الخاص بالاستنساخ.
اختبار Org Admin لعنوان URL لـ Git قابل لإعادة الربط يجعل Grafana تُجري GET على مضيف داخلي كُتب المدقق لرفضه.
| المعرّف | لا يوجد CVE بعد |
| الفئة | SSRF (إعادة ربط DNS / ثغرة 0.0.0.0/8) |
| الوصول | عن بُعد (Org Admin repositories:create) |
| CWE | CWE-918 / CWE-367 |
| CVSS | مرتفع: 7.7 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:N/A:N |
| المنتج | Grafana OSS |
| المتأثر | 13.2.3 (6193dc0)؛ Git Sync مُفعّل افتراضيًا |
| المصادقة | Org Admin (repositories:create / :write). ليس إنشاء Viewer/Editor. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
الفاعل هو Org Admin، وليس شخصًا غريبًا. يستطيع Org Admin بالفعل توجيه مصادر البيانات إلى عناوين URL داخلية على OSS. هذا المتبقي هو تجاوز لـ URLValidator الخاص بـ Git Sync الذي كان يُفترض أن يسدّ هذه الفئة لعناوين URL الخاصة بالمستودعات.
| الصلاحية | الطريقة / نقطة الوصول | الاستطلاع / السلامة / التوافر | مُثبت مختبريًا أو مُستنتج |
|---|---|---|---|
| جعل Grafana تُجري GET على عنوان URL لـ Git قابل لإعادة الربط | Org Admin POST .../repositories/{name}/test مع spec.git.url=http://git.lab/... | استطلاع (HTTP صادر من عملية Grafana) | مُثبت مختبريًا. DNS A1 عام، لاحقًا A RFC1918. أوراكل إعادة الربط hits=3، الشاهد في الجسم |
الوصول إلى عنوان URL لـ Git حرفي 0.0.0.1 | نفس Test مع http://0.0.0.1:18080/lab/gitsync.git | استطلاع | مُثبت مختبريًا أنه غير محظور عند القبول (الحالة 400 نقل، وليس 422 عام-أو-مسموح) |
| قراءة Git Smart HTTP / جسم HTTP من ذلك المضيف في أخطاء Test | gitRepository.Test يُدرج خطأ النقل | استطلاع | مُستنتج من التثبيت. استخدم المختبر إعلان git بحالة 200 |
| إعادة الربط بـ RFC1918 / CGNAT بعد القبول | TOCTOU: التحقق من DNS ثم اتصال nanogit | استطلاع | مُثبت مختبريًا لـ RFC1918 sidecar 172.30.60.3 |
قراءة Viewer لـ spec.*.url المخزّن بما في ذلك userinfo | repositories:read | استطلاع | مُستنتج من التثبيت. ليس هذا المختبر |
مغلق على هذا المتبقي (مُثبت مختبريًا): loopback الحرفي 127.0.0.1 422؛ RFC1918 الحرفي 10.0.0.1 422؛ IMDS 169.254.169.254 422. مغلق: Editor لا يمكنه إنشاء مستودعات. ليس RCE. لا يتطلب Grafana Admin. تجاهل Grafana G2 (IAM SSOSetting k8s authorizer).
القبول في apps/provisioning/pkg/repository/validator.go يستدعي URLValidator.ValidateURL. isBlockedIP هو أربع مسندات. unspecified هو 0.0.0.0 / :: فقط. باقي 0.0.0.0/8 و CGNAT يمرّان. الاستنساخ لاحقًا يستخدم nanogit.NewHTTPClient(gitConfig.URL) ويعيد التحليل.
منعطفات خاطئة مسجّلة بالفعل: التعامل مع عناوين URL الخاصة بـ Org Admin DS على أنها هذا المتبقي (تلك مقصودة؛ هذا تجاوز مدقق Git Sync)؛ توقع مرور IMDS 169.254 (محظور عند القبول)؛ إنشاء Editor (مرفوض)؛ reverse shell. مسرحية.
python3 grafana-gitsync-dns-rebind-Abraxas-Labs.py
أو:
cd lab
./run.sh
Loopback: Grafana 127.0.0.1:19360، تحكم DNS 127.0.0.1:19361، أوراكل إعادة الربط 127.0.0.1:19362. الصورة grafana/grafana:13.2.3.
SUCCESS GRAFANA-GITSYNC-DNS-REBIND how=live actor=org-admin path=rebind dns_lookups=4 negatives=3 GRAFANA-GITSYNC-DNS-REBIND-WITNESS
ثبّت العنوان المُحلَّل خلال الاستنساخ/Test، أو أعد التحقق عند كل اتصال. عامل 0.0.0.0/8 و CGNAT كمحظورين. لا تتخطَّ DNS على المضيفين المدرجين في القائمة المسموحة دون تثبيت.
GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. لا ضمان.