
# गिट सेटिंग्स के लिए रीड-ओनली स्कैनर जो रिपॉजिटरी को कोडिंग एजेंट्स (Claude Code, Codex, Cursor, Copilot) में कोड चलाने देती हैं। GitSpawn क्लास और CVE-2026-45033 को कवर करता है। कोई निर्भरता नहीं, कोई नेटवर्क नहीं, कोई टेलीमेट्री नहीं।
एक रिपॉजिटरी जो आपके कोडिंग एजेंट को फ़ोल्डर खोलते ही कोड चलाने पर मजबूर कर सकती है। GuardSkill उससे पहले इसकी जांच करता है।
npx guardskill .
केवल-पठनीय। कोई नेटवर्क कॉल नहीं, कोई टेलीमेट्री नहीं, कोई कॉन्फ़िगरेशन नहीं, कोई खाता नहीं। यह git कॉन्फ़िगरेशन और हुक स्क्रिप्ट पढ़ता है, जो मिला उसे प्रिंट करता है, और बाहर निकल जाता है।
कोडिंग एजेंट प्रोजेक्ट खोलते ही सामान्य git कमांड — git status, git diff — चलाकर संदर्भ एकत्र करते हैं। Git अपनी सेटिंग्स रिपॉजिटरी के अपने .git/config से पढ़ता है, और उनमें से कई सेटिंग्स git द्वारा निष्पादित किए जाने वाले प्रोग्राम का नाम देती हैं। core.fsmonitor में एक कमांड डालें और यह आपके विशेषाधिकारों के साथ, किसी भी सैंडबॉक्स के बाहर, आपके कुछ भी टाइप करने से पहले चल जाती है।
दो सार्वजनिक शोध इसको ठोस बनाते हैं:
.git/config क्लोन द्वारा स्थानांतरित नहीं होता। रिपॉजिटरी को — एक ज़िप, एक साझा ड्राइव, एक सिंक फ़ोल्डर, एक USB स्टिक, एक एजेंट जो संग्रह को अनपैक करता है। (, ).git निर्देशिका पहले से मौजूद हो@github/copilot 1.0.43 में safe.bareRepository=explicit लागू करके ठीक किया गया। (GitHub Advisory)दोनों लेखों में अनुशंसित उपयोगकर्ता-पक्ष शमन समान है: एजेंट के साथ निर्देशिका खोलने से पहले git कॉन्फ़िगरेशन का निरीक्षण करें। पूरे ट्री में इसे हाथ से करना थकाऊ काम है। यह टूल इसे एक सेकंड में करता है।
GuardSkill ट्री को स्कैन करता है और हर git कॉन्फ़िगरेशन ढूंढता है जिसे एक एजेंट उठा सकता है: प्रोजेक्ट का अपना .git, कोई भी नेस्टेड .git जो सामग्री के रूप में आया हो, उपनिर्देशिका में छिपी कोई भी बेयर रिपॉजिटरी, वह .git फ़ाइल जो सबमॉड्यूल या लिंक्ड वर्कट्री पीछे छोड़ती है, और मुख्य के बगल में git द्वारा रखे गए कॉन्फ़िग — config.worktree और हर .git/modules/<name>/config। उनमें से प्रत्येक का निरीक्षण किया जाता है।
| वर्ग | जांच |
|---|---|
| प्रत्यक्ष निष्पादन कुंजियाँ | core.fsmonitor, core.sshCommand, core.gitProxy, core.pager, core.editor, sequence.editor, diff.external, uploadpack.packObjectsHook |
| अप्रत्यक्ष निष्पादन कुंजियाँ | filter.*.clean / .smudge / .process, diff.*.textconv, merge.*.driver, mergetool.*.cmd, difftool.*.cmd, credential.helper |
| शेल उपनाम | कोई भी alias.* जिसका मान ! से शुरू होता है |
| कहीं और से लोड किया गया कॉन्फ़िगरेशन | include.path, includeIf.*.path |
| हुक | core.hooksPath ओवरराइड, .git/hooks में सक्रिय (गैर-.sample) स्क्रिप्ट, और हुक स्क्रिप्ट जो चलाने से पहले डाउनलोड को शेल में पाइप करती हैं या base64 डिकोड करती हैं |
| ट्रांसपोर्ट | protocol.allow और protocol.<name>.allow को वापस always पर सेट करना, और कोई भी रिमोट या सबमॉड्यूल URL जो ext:: ट्रांसपोर्ट का उपयोग करता है, जो शेष पंक्ति को शेल को सौंप देता है |
| संरचना | ट्री के अंदर बेयर रिपॉजिटरी (CVE-2026-45033 वेक्टर), नेस्टेड .git निर्देशिकाएं जो पंजीकृत सबमॉड्यूल नहीं हैं, .git फ़ाइलें जो ट्री के अंदर एक git निर्देशिका की ओर इशारा करती हैं |
npx guardskill . # वर्तमान प्रोजेक्ट स्कैन करें
npx guardskill ~/code/some-project # एक विशिष्ट पथ स्कैन करें
npx guardskill . --json # मशीन-पठनीय
npx guardskill . --out report.md # एक Markdown रिपोर्ट भी लिखें
npx guardskill . --fail-on critical # केवल गंभीर खोजों पर बिल्ड विफल करें
npx guardskill . --exclude test/fixtures # एक निर्देशिका छोड़ें
निकास कोड: 0 थ्रेशोल्ड पर या उससे ऊपर कुछ नहीं, 1 थ्रेशोल्ड पर या उससे ऊपर खोजें (डिफ़ॉल्ट थ्रेशोल्ड: high), 2 स्कैन स्वयं विफल रहा।
CI में:
- name: git निष्पादन वेक्टरों की जांच करें
run: npx guardskill . --fail-on high
उदाहरण आउटपुट:
GuardSkill - git निष्पादन-वेक्टर स्कैन (केवल-पठनीय)
पथ: /Users/dev/projects/inherited-project
निरीक्षित git कॉन्फ़िगरेशन: 2 चली गई निर्देशिकाएं: 148
[CRITICAL] vendor/payload.git - प्रोजेक्ट ट्री के अंदर बेयर git रिपॉजिटरी मिली
क्या Git निर्देशिकाओं को चलते समय बेयर रिपॉजिटरी खोज लेता है और उनका
कॉन्फ़िगरेशन लागू करता है, जिसमें कमांड निष्पादित करने वाली कुंजियाँ भी शामिल हैं।
मिला vendor/payload.git पर बेयर रिपॉजिटरी
करें जब तक आपने निर्देशिका का निरीक्षण नहीं किया है, इस प्रोजेक्ट को कोडिंग एजेंट के साथ न खोलें।
[CRITICAL] vendor/payload.git/config:3 - core.fsmonitor एक बाहरी कमांड चलाता है
मिला core.fsmonitor = /tmp/.x/run.sh
2 गंभीर, 0 उच्च, 0 मध्यम, 0 निम्न।
कुछ भी नहीं बदला गया - यह स्कैन केवल पढ़ता है।
एक सुरक्षा उपकरण जो बार-बार झूठा अलार्म बजाता है, उसे अनइंस्टॉल कर दिया जाता है। सूट 29 यथार्थवादी स्वच्छ रिपॉजिटरी के खिलाफ चलता है — git-lfs, git-crypt, husky, .githooks परंपरा, पंजीकृत सबमॉड्यूल, क्रेडेंशियल हेल्पर, कस्टम एडिटर और पेजर, साइनिंग कॉन्फ़िग — और बिल्ड विफल हो जाता है यदि उनमें से कोई भी सूचनात्मक स्तर से ऊपर की खोज उत्पन्न करता है। यह 22 रिपॉजिटरी के खिलाफ चलता है जो एक ज्ञात हमले पैटर्न के आसपास बनाई गई हैं और विफल हो जाता है यदि कोई छूट जाती है, या गलत नियम द्वारा पकड़ी जाती है।
इसके ऊपर एक चोरी-रोधी सूट है: इसमें हर मामला GuardSkill के एक संस्करण पर हमला करके पाया गया था जो पहले से ही अपने स्वयं के परीक्षण पास कर चुका था, और यह हर कमिट पर चलता है ताकि भविष्य में कोई बदलाव चुपचाप एक को फिर से न खोल सके। यह उसी कुंजी को हर उस तरीके से कवर करता है जिसे git अभी भी स्वीकार करता है (केस, कोटिंग, लाइन निरंतरता, CRLF, एक बाइट-ऑर्डर मार्क, सेक्शन लाइन पर एक कुंजी), परिचित टूल के नाम वाले पेलोड, .husky नामक हुक निर्देशिकाएं जो सामान्य दिखती हैं, और कॉन्फ़िग जहां पहला संस्करण कभी नहीं देखा था। एक मजबूती सूट इसे बाइनरी, खाली, छोटा और 200,000-लाइन कॉन्फ़िग, अपठनीय निर्देशिकाएं, सिमलिंक लूप और ट्री के बाहर लक्षित पॉइंटर्स खिलाता है, और स्टैक ट्रेस के बजाय एक रिपोर्ट की आवश्यकता होती है।
दो जानबूझकर डिज़ाइन विकल्प:
.githooks निर्देशिका को जोखिम के बजाय सूचनात्मक (low) के रूप में रिपोर्ट किया जाता है — लेकिन GuardSkill फिर भी स्क्रिप्ट पढ़ता है, और यदि उनमें से एक चलाने से पहले कोड लाता या डिकोड करता है तो critical तक बढ़ा देता है।include / includeIf हमेशा रिपोर्ट किया जाता है। एक include बाद में इस सूची की कोई भी कुंजी पेश कर सकता है, जो वास्तव में वह तरीका है जिससे आप एक छिपाएंगे। एक साझा ~/.gitconfig जो आपने स्वयं लिखा है, खारिज करने के लिए एक सामान्य खोज है।.husky जो npm test चलाता है वह सूचनात्मक है, और खोज सूचीबद्ध करती है कि क्या चलेगा। वही निर्देशिका जो /tmp से कुछ चलाती है, वह नहीं है।यह कभी भी कुछ संशोधित नहीं करता। यह जो पाता है उसे कभी निष्पादित नहीं करता। यह कोई नेटवर्क कॉल नहीं करता और कोई टेलीमेट्री एकत्र नहीं करता — इसे ऑफ़लाइन चलाएं और यह समान व्यवहार करता है। यह अभी तक npm निर्भरताओं, .claude/settings.json, .vscode/tasks.json या MCP सर्वर परिभाषाओं को स्कैन नहीं करता; वे अगली श्रेणी हैं, यह नहीं। और यह एक संकेत है, फैसला नहीं: खोज पढ़ें, साक्ष्य देखें, स्वयं निर्णय लें।
इस रिपॉजिटरी में SKILL.md एक कोडिंग एजेंट को किसी अपरिचित प्रोजेक्ट को खोलने से पहले स्वयं स्कैन चलाने देता है। निर्देशिका को अपने कौशल फ़ोल्डर में कॉपी करें, या अपने एजेंट को रिपॉजिटरी की ओर इंगित करें।
npm test # फिक्स्चर को पुनर्जीवित करता है, फिर सूट चलाता है
फिक्स्चर कोड द्वारा उत्पन्न होते हैं (test/fixtures/generate.js), हाथ से कमिट नहीं किए जाते, इसलिए स्वच्छ या कमजोर सेट का विस्तार करना कुछ पंक्तियों का काम है। नए पहचान नियम rules/git-exec-keys.json में जाते हैं — दोनों तरफ फिक्स्चर के बिना एक नियम मर्ज नहीं किया जाएगा।
निरंतर निगरानी, Slack/Teams अलर्ट और ऑटो-फिक्स पुल अनुरोध एक भुगतान परत के रूप में योजनाबद्ध हैं। स्कैनर स्वयं मुफ्त और MIT-लाइसेंस प्राप्त रहता है। पहचान नियम खुली रिपॉजिटरी में रहते हैं — एक सुरक्षा उपकरण जिसके नियम आप पढ़ नहीं सकते, वह ऐसा उपकरण नहीं है जिस पर आपको भरोसा करना चाहिए।
MIT। Helios IT Solutions द्वारा निर्मित और अनुरक्षित, एक डच IT सेवा प्रदाता। सुरक्षा मुद्दे: SECURITY.md देखें।