CVE-2026-19478 को GitLab CE/EE में एक गैर-विनाशकारी Nuclei टेम्पलेट के माध्यम से डिटेक्ट करता है, जो touch के जरिए GraphQL फॉलबैक-फील्ड मेथड इनवोकेशन को ट्रिगर करता है और बिना विनाशकारी कॉल्स के कमजोर इंस्टेंस की पुष्टि करता है।
CVE-2026-19478 के लिए गैर-विनाशकारी Nuclei डिटेक्शन टेम्पलेट, जो GitLab GraphQL API में एक क्रिटिकल (CVSS 9.4) बिना प्रमाणीकरण के आर्बिट्ररी मेथड इनवोकेशन दोष है, जिसे GitLab ने 17 अगस्त 2026 को पैच किया था।
GitLab का GraphQL स्कीमा एक @gl_introduced(version: "X.Y.Z") डायरेक्टिव का समर्थन करता है जो किसी फ़ील्ड को न्यूनतम GitLab संस्करण तक सीमित करता है। जब डायरेक्टिव चालू इंस्टेंस से संस्करण को संदर्भित करता है, तो GitLab उस (अन्यथा अज्ञात) फ़ील्ड नाम के लिए एक उत्पन्न करता है। वह फ़ॉलबैक रिज़ॉल्वर अंतर्निहित Ruby ऑब्जेक्ट — , , आदि — पर सीधे कॉल करता है, ।
ProjectUserobject.public_send(method_name)परिणाम: एक बिना प्रमाणीकृत हमलावर जो /api/graphql तक पहुँच सकता है और किसी भी सार्वजनिक प्रोजेक्ट का fullPath (या किसी सार्वजनिक प्रोफ़ाइल का यूज़रनेम) जानता है, उस ऑब्जेक्ट पर कोई भी सार्वजनिक, शून्य-आर्गुमेंट मेथड इनवोक कर सकता है। इसमें touch जैसी केवल-पठनीय विधियाँ, साथ ही destroy / delete जैसी विनाशकारी विधियाँ, और deactivate / block / ban जैसी स्थिति-परिवर्तन करने वाली विधियाँ शामिल हैं।
इस रिपॉजिटरी का टेम्पलेट केवल touch को कॉल करता है (updated_at अपडेट करता है, true लौटाता है) — नीचे सुरक्षा देखें।
| ट्रैक | प्रभावित | फिक्स्ड |
|---|---|---|
| 18.2.x – 18.11.x | >= 18.2, < 18.11.11 | 18.11.11 |
| 19.0.x | < 19.0.8 | 19.0.8 |
| 19.1.x | < 19.1.6 | 19.1.6 |
| 19.2.x | < 19.2.4 | 19.2.4 |
केवल सेल्फ-मैनेज्ड GitLab CE/EE — GitLab.com और GitLab Dedicated प्रभावित नहीं थे।
यह टेम्पलेट जानबूझकर हानिरहित (defanged) बनाया गया है, ताकि आप उन सर्वरों के फ्लीट को स्कैन कर सकें जिन्हें आप परीक्षण करने के लिए अधिकृत हैं:
touch को ही इनवोक करता है (एक ActiveRecord मेथड जो केवल updated_at को अपडेट करता है और true लौटाता है)।destroy, delete, deactivate, block, या ban को कॉल नहीं करता — ये सभी उसी बग के माध्यम से पहुँच योग्य हैं और वास्तव में विनाशकारी हैं।root यूज़र प्रोफ़ाइल की जाँच करता है। यदि दोनों में से कोई भी पहुँच योग्य नहीं है, तो यह अनुमान लगाने के बजाय केवल "डिटेक्ट नहीं हुआ" रिपोर्ट करता है।इस टेम्पलेट में दिए गए GraphQL क्वेरी का उपयोग उन सिस्टमों के विरुद्ध म्यूटेटिंग मेथड कॉल करने के लिए न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण नहीं है।
| चरण | अनुरोध | उद्देश्य |
|---|---|---|
| 1 | GET /api/v4/projects?visibility=public | हानिरहित लक्ष्य के रूप में उपयोग करने के लिए एक सार्वजनिक प्रोजेक्ट खोजें |
| 2 | POST /api/graphql — उस प्रोजेक्ट पर touch @gl_introduced(version: "999.0.0") | फ़ॉलबैक-फ़ील्ड रिज़ॉल्वर ट्रिगर करें; एक vulnerable इंस्टेंस "touch": true लौटाता है |
| 3 (फ़ॉलबैक) | POST /api/graphql — user(username: "root") के विरुद्ध वही क्वेरी | केवल तभी उपयोग किया जाता है यदि चरण 1 में कोई सार्वजनिक प्रोजेक्ट नहीं मिला |
एक पैच किया गया इंस्टेंस अज्ञात फ़ील्ड को सीधे अस्वीकार कर देता है ("... doesn't exist on type ..."), इसलिए टेम्पलेट का मैचर सकारात्मक touch सिग्नल और उस अस्वीकृति संदेश की अनुपस्थिति दोनों की आवश्यकता रखता है।
# single target
nuclei -t CVE-2026-19478.yaml -u https://gitlab.example.com
# validate the template itself
nuclei -t CVE-2026-19478.yaml -validate
# a list of targets, JSON output
nuclei -t CVE-2026-19478.yaml -l targets.txt -j -o results.json
इसके लिए nuclei v3 आवश्यक है (यह टेम्पलेट http: प्रोटोकॉल ब्लॉक और v3 टेम्पलेट इंजन में पेश किए गए jq-शैली json एक्सट्रैक्टर का उपयोग करता है; यह nuclei v2.x पर लोड नहीं होगा)।
[CVE-2026-19478] [http] [critical] https://gitlab.example.com/api/graphql
18.11.11, 19.0.8, 19.1.6, या 19.2.4 (या उससे नए) में अपग्रेड करें। पूर्ण एडवाइज़री के लिए GitLab का 19.2.4 पैच रिलीज़ नोट्स देखें।
यह टेम्पलेट डिफेंसिव सिक्योरिटी उद्देश्यों के लिए प्रकाशित किया गया है — उन इंफ्रास्ट्रक्चर को स्कैन करने के लिए जिनके स्वामी आप हैं या जिन्हें आप स्पष्ट रूप से परीक्षण करने के लिए अधिकृत हैं। बिना प्राधिकरण के सिस्टमों के विरुद्ध इसे (या संलग्न PoC को) चलाना अधिकांश न्यायक्षेत्रों में अवैध है। लेखक दुरुपयोग के लिए कोई दायित्व नहीं लेता है।