Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cve-2026-85706 — CVE-2026-85706 के लिए Python PoC exploit, जो Workhorse path-encoding bypass के माध्यम से GitLab CE/EE में unauthenticated arbitrary file read है, साथ में writeup और bypass variants। | Kitploit
उपकरण/GitHubGitHub/guneykabel/cve-2026-85706
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणजानकारी एकत्र करनासुरक्षा वर्चुअलाइजेशनवेब सुरक्षापेनिट्रेशन टेस्टिंग
GitHubguneykabel/cve-2026-85706

cve-2026-85706

CVE-2026-85706 के लिए Python PoC exploit, जो Workhorse path-encoding bypass के माध्यम से GitLab CE/EE में unauthenticated arbitrary file read है, साथ में writeup और bypass variants।

रिपॉजिटरी देखें
412घं 9मि पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

cve-2026-85706

GitLab CE/EE में अनधिकृत मनमाना लोकल फ़ाइल रीड। 18.7–19.1.7, 19.2.0–19.2.5, 19.3.0–19.3.1 को प्रभावित करता है। 19.1.8 / 19.2.6 / 19.3.2 (2026-09-10) में ठीक किया गया। CVSS 10.0, कथित तौर पर जंगल में शोषण किया गया। मूल रिपोर्ट s3ntago द्वारा और यह रेपो सिर्फ़ मेरा writeup + PoC है।

disclaimer

यह PoC केवल शैक्षिक और रक्षात्मक शोध उद्देश्यों के लिए प्रकाशित किया गया है, ताकि एडमिन और शोधकर्ता इस भेद्यता को समझ सकें और इसका परीक्षण कर सकें। इसे विशेष रूप से उन सिस्टमों के विरुद्ध चलाएँ जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण है। यदि आपका इंस्टेंस प्रभावित रेंज में आता है, तो पढ़ना बंद करें और पहले 19.1.8 / 19.2.6 / 19.3.2 पर पैच करें।

यह कैसे काम करता है

तीन रिपॉज़िटरी एंडपॉइंट (POST :id/repository/commits, POST/PUT :id/repository/files/:file_path) Workhorse के requestBodyUploader के पीछे बैठे हैं। Rails हैंडलर कच्चे file.path रिक्वेस्ट फ़ील्ड से सीधे डिस्क पर मौजूद पाथ पढ़ता है और किसी भी प्रमाणीकरण से पहले उसे File.open करता है। प्रमाणीकरण का काम नहीं करता क्योंकि Workhorse का signing round-tripper हर उस रिक्वेस्ट पर एक वैध JWT संलग्न करता है जिसे वह प्रॉक्सी करता है, इसलिए जो कुछ भी generic API proxy तक पहुँचता है वह उस जाँच को पास कर लेता है।

require_gitlab_workhorse!
Gitlab-Workhorse-Api-Request

यह सबके लिए तत्काल LFI न होने का एकमात्र कारण यह है कि Workhorse को पहले रिक्वेस्ट को फिर से लिखना चाहिए। लेकिन इसका route regex escaped path (EscapedPath() के साथ-साथ एक path.Clean क्लोन जो कभी %XX को डिकोड नहीं करता) के विरुद्ध मैच करता है, जबकि Puma Grape रूटिंग से पहले %XX को डिकोड करता है। इसलिए किसी स्टैटिक सेगमेंट के किसी भी अक्षर को percent-encode करें (%63ommits, %72epository, %66iles), एक ट्रेलिंग स्लैश जोड़ें, या .json लगाएँ जिसे Workhorse का regex मिस कर देता है, Rails अभी भी भेद्य हैंडलर तक रूट करता है। यही एन्कोडिंग बेमेल बायपास है। (//, /./, %2F, ; जैसे वेरिएंट काम नहीं करते क्योंकि path.Clean पहले दो को नॉर्मलाइज़ कर देता है और Puma %2F को अस्वीकार कर देता है।)

फिर बस query params के रूप में जाली अहस्ताक्षरित upload metadata भेजें:

root@kitploit:~
POST /api/v4/projects/1/repository/%63ommits?file=&file.path=<ABSOLUTE_PATH>&file.size=1&Content-Type=application/x-www-form-urlencoded

file= खाली होना requires :file, WorkhorseFile वैलिडेशन को संतुष्ट करता है (खाली nil में बदल जाता है)। रीड प्री-ऑथ होती है। बाइट्स को वापस पाना मज़ेदार हिस्सा है: urlencoded ब्रांच पर हेल्पर Rack::Utils.parse_nested_query(File.read(path)) चलाता है और parser errors को 400 बॉडी में इंटरपोलेट करता है। कोई भी % जिसके बाद दो hex अंक न हों, InvalidParameterError: invalid %-encoding (<raw file bytes>) उठाता है और फ़ाइल की सामग्री error message के अंदर वापस आ जाती है। JSON ब्रांच (Oj) कुछ भी लीक नहीं करती, यही कारण है कि यहाँ urlencoded content type मायने रखता है।

फिक्स (master 0d9ce3e7, backports 1fe30154 / b43c8b26 / 0ff7b6b2) तीनों एंडपॉइंट पर authenticate! जोड़ता है साथ ही /authorize pre-step, path/size के लिए केवल middleware-निर्मित UploadedFile पर भरोसा करता है, और parser errors को echo करना बंद कर देता है। बग दिसंबर 2025 में पेश हुआ था, यही कारण है कि प्रभावित रेंज 18.7 से शुरू होती है।

उपयोग

root@kitploit:~
./exploit.py --url http://localhost:8080 --file /etc/hostname
./exploit.py --url http://localhost:8080 --file /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

स्क्रिप्ट सभी सत्यापित बायपास रूपों (एन्कोडेड सेगमेंट, ट्रेलिंग स्लैश, .json; commits + files एंडपॉइंट, POST और PUT) से गुज़रती है और प्रत्येक प्रतिक्रिया को वर्गीकृत करती है ताकि आप बता सकें कि चेन में कहाँ कोई प्रोब विफल हुआ। ज़ाहिर है, केवल अधिकृत लक्ष्यों पर।

खामियाँ / सीमाएँ / पूर्व-शर्तें

  • echo केवल तब सक्रिय होता है जब फ़ाइल में कोई % हो जिसके बाद दो hex अक्षर न हों।
  • लीक regex greedy है (बॉडी में अंतिम ) तक (.*)). स्टॉक JSON error के विरुद्ध ठीक है, अगर सामने कुछ प्रतिक्रिया को HTML में लपेट दे तो over-capture करेगा। उचित फिक्स JSON message फ़ील्ड को पार्स करना है।
  • Commits API को एक अनाम रूप से पठनीय प्रोजेक्ट id चाहिए (अन्यथा before ब्लॉक 404 देता है)।

संदर्भ

  • fix commit (master): https://gitlab.com/gitlab-org/gitlab/-/commit/0d9ce3e758a85f0690be751e213625f7902c0361
  • patch release notes: https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-3-2-released/
  • writeup: https://securityonline.info/gitlab-vulnerabilities-cve-2026-85706-cvss-10/
टूल डाउनलोड करें