
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 केवल लूपबैक, RFC1918, लिंक-लोकल, और अनिर्दिष्ट है। शाब्दिक 0.0.0.1 अवरुद्ध नहीं है। जो होस्टनेम सत्यापन के समय सार्वजनिक था, वह क्लोन GET के लिए RFC1918 पर रीबाइंड हो सकता है।
रीबाइंडिंग Git URL का Org Admin Test Grafana से एक आंतरिक होस्ट पर GET करवाता है जिसे अस्वीकार करने के लिए validator लिखा गया था।
| ID | अभी तक कोई 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 create नहीं। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
अभिनेता Org Admin है, कोई अजनबी नहीं। Org Admin OSS पर पहले से ही डेटासोर्स को आंतरिक URL की ओर इंगित कर सकता है। यह अवशेष Git Sync URLValidator का बायपास है जिसे रिपॉज़िटरी URL के लिए उस वर्ग को बंद करने के लिए बनाया गया था।
| विशेषाधिकार | विधि / सिंक | रेकॉन / अखंडता / उपलब्धता | लैब-प्रमाणित या अनुमानित |
|---|---|---|---|
| Grafana से रीबाइंडिंग Git URL पर GET करवाना | Org Admin POST .../repositories/{name}/test के साथ spec.git.url=http://git.lab/... | रेकॉन (Grafana प्रक्रिया से आउटबाउंड HTTP) | लैब-प्रमाणित। DNS A1 सार्वजनिक, बाद में A RFC1918। रीबाइंड ओरेकल hits=3, बॉडी में witness |
शाब्दिक 0.0.0.1 Git URL तक पहुँचना | वही Test http://0.0.0.1:18080/lab/gitsync.git के साथ | रेकॉन | लैब-प्रमाणित प्रवेश पर अवरुद्ध नहीं (status 400 transport, 422 public-or-allowed नहीं) |
| उस होस्ट से Git Smart HTTP / HTTP बॉडी को Test त्रुटियों में पढ़ना | gitRepository.Test ट्रांसपोर्ट त्रुटि को इंटरपोलेट करता है | रेकॉन | पिन से अनुमानित। लैब ने 200 git advertisement का उपयोग किया |
| प्रवेश के बाद RFC1918 / CGNAT पर रीबाइंड | TOCTOU: DNS सत्यापित करें फिर nanogit डायल करें | रेकॉन | RFC1918 साइडकार 172.30.60.3 के लिए लैब-प्रमाणित |
संग्रहीत spec.*.url का Viewer पठन जिसमें userinfo शामिल है | repositories:read | रेकॉन | पिन से अनुमानित। यह लैब नहीं |
इस अवशेष पर बंद (लैब-प्रमाणित): शाब्दिक लूपबैक 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 चार विधेय हैं। अनिर्दिष्ट केवल 0.0.0.0 / :: है। 0.0.0.0/8 का शेष भाग और CGNAT पास हो जाते हैं। क्लोन बाद में nanogit.NewHTTPClient(gitConfig.URL) का उपयोग करता है और पुनः-रिज़ॉल्व करता है।
पहले से दर्ज गलत मोड़: Org Admin DS URL को इस अवशेष के रूप में मानना (वे इच्छित हैं; यह Git Sync validator बायपास है); IMDS 169.254 के पास होने की अपेक्षा (प्रवेश पर अवरुद्ध); Editor create (अस्वीकृत); एक रिवर्स शेल। नाटक।
python3 grafana-gitsync-dns-rebind-Abraxas-Labs.py
या:
cd lab
./run.sh
लूपबैक: 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 को अवरुद्ध मानें। बिना पिन किए allowlisted होस्ट पर DNS न छोड़ें।
GNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।