
GitLab - उच्च - Gitea HTTPS आयात SSRF - UrlBlocker पिन ड्रॉप
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitlab-gitea-import-ssrf
GitLab CE 19.4.1 - GitLab Inc.
Gitea आयात UrlBlocker.validate! को एक बार कॉल करता है, फिर https के लिए IP-पिन किए गए URI को फेंक देता है और Faraday को मूल होस्टनाम सौंप देता है। Octokit UrlValidation फिर से सत्यापन करता है और env[:url] को फिर से नहीं लिखता। उन लुकअप्स के बीच नाम को रीबाइंड करें और GitLab लूपबैक को ऐसे GET करता है जैसे वह Gitea हो। रेपो-लिस्ट JSON GET /import/gitea/status.json पर वापस आती है। HTTP आयात पिन बनाए रखते हैं। सीधा https://127.0.0.1 अवरुद्ध है।
एक साइन-इन किया हुआ उपयोगकर्ता जो अपने व्यक्तिगत नेमस्पेस पर Gitea आयात खोल सकता है, GitLab से ऐसा होस्ट फ़ेच करा सकता है जिसे वह लूपबैक पर रीबाइंड करता है, और उसे बॉडी मिल जाती है।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-918, CWE-367 |
| CVSS | High: 7.7 CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N |
| Product | GitLab CE |
| Affected | 19.4.1-ce.0 (v19.4.1-ee ट्री पर 26212baacadb) |
| Auth | प्रमाणित उपयोगकर्ता, Gitea आयात, व्यक्तिगत नेमस्पेस |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
Gitea Host URL को https://<name-they-control>/ पर सेट करें। UrlBlocker पहले सार्वजनिक A-रिकॉर्ड की अनुमति देता है। HTTPS client_options उस होस्टनाम को बनाए रखता है। 127.0.0.1 पर रीबाइंड करें। Faraday GitLab वर्कर लूपबैक पर कैचर को GET करता है। status.json का provider_repos वही है जो कैचर ने लौटाया।
ऑल-इन-वन ओम्निबस पर वह Workhorse, Puma, एक्सपोर्टर, और वर्कर पर सुन रही हर चीज़ है। होस्ट RCE नहीं। अप्रमाणित नहीं। HTTP Host URL पिन किए गए IP पर ही रहता है।
वही उत्पाद, सम्बंधित अवशेष: Gitaly fetch resolved_address छोड़ देता है, webhook 0.0.0.0/8।
मैंने पहले 23 सितंबर 2026 के 19.4.1 / 19.3.3 / 19.2.7 पैच नोट्स पढ़े, फिर v19.4.1-ee ट्री। CI regex RCE, MR diff XSS, Workhorse file.path read इस पिन पर बंद हैं। Import SSRF पूरा नहीं हुआ था।
Import::GiteaController#client_options वह अवशेष है:
host: verified_url.scheme == 'https' ? provider_url : verified_url.to_s,
HTTP verified_url (IP) का उपयोग करता है। HTTPS provider_url (उपयोगकर्ता द्वारा टाइप किया गया नाम) का उपयोग करता है। LegacyGithubImport::Client उस होस्ट से Octokit api_endpoint बनाता है। Gitlab::Octokit::UrlValidation validate! को कॉल करता है फिर बिना किसी रीराइट के @app.call(env) करता है।
मैंने स्टॉक gitlab/gitlab-ce:19.4.1-ce.0 खड़ा किया। Local-requests बंद। लैब CA /etc/gitlab/trusted-certs में क्योंकि Faraday ssl.verify true है। gitea.lab के लिए DNS: लुकअप 1-2 1.1.1.1 लौटाते हैं, बाद के लुकअप 127.0.0.1 लौटाते हैं। कैचर :443 पर GitLab netns साझा करता है। GET /import/gitea/status.json ने GITLAB-GITEA-IMPORT-SSRF-WITNESS नाम का provider_repos लौटाया। कैचर लॉग: GET /api/v1/user/repos peer=127.0.0.1 host=gitea.lab।
सीधा https://127.0.0.1/ : "Specified URL cannot be used"। HTTP http://gitea.lab/ पिन पर ही रहा और witness वापस नहीं लौटाया।
पहले से दर्ज गलत रास्ते: /users/sign_in Accept: application/json के साथ 404 है (HTML 200 है); सीड पासवर्ड CveLabRoot9! अस्वीकृत क्योंकि इसमें root है; CA बाइंड-माउंट ro रीकॉन्फ़िगर के बाद EROFS है जो फ़ाइल को लिंक करता है; लुकअप 2 पर पहले-दो-फिर-लूपबैक UrlValidation को Faraday के कनेक्ट करने से पहले ब्लॉक कर देता है। Pairs मोड (विषम सार्वजनिक, सम लूपबैक) वही है जो काम आया। एक रिवर्स शेल। नाटक। Oracle status.json में witness प्लस कैचर peer है।
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:18400। GitLab CE को कई GB RAM चाहिए। पहला बूट धीमा है। केवल अधिकृत लैब।
status.json status=200 ... provider_repos ... GITLAB-GITEA-IMPORT-SSRF-WITNESS
catcher GET /api/v1/user/repos peer=127.0.0.1 host=gitea.lab status=200 witness=True
negative-a https://127.0.0.1 blocked
negative-b http://gitea.lab no-witness
SUCCESS GITLAB-GITEA-IMPORT-SSRF status.json mode=pairs http=200 GITLAB-GITEA-IMPORT-SSRF-WITNESS
def client_options
verified_url, provider_hostname = verify_blocked_uri
{
host: verified_url.scheme == 'https' ? provider_url : verified_url.to_s,
api_version: 'v1',
hostname: provider_hostname
}
end
https के लिए verified_url.to_s का उपयोग उसी तरह करें जैसे HTTP पहले से करता है। Octokit UrlValidation में env[:url] को पिन किए गए IP पर फिर से लिखें।
gitea_controller.rb · legacy_github_import/client.rb · octokit/url_validation.rbGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।