
एजेंटिक AI कोडिंग टूल्स के लिए IOC स्कैनर — Mini Shai-Hulud, Gemini CLI RCE, Cursor CVE-2026-26268, और DPRK PromptMink का पता लगाता है।
एजेंटिक AI कोडिंग टूल्स के लिए IOC स्कैनर — Mini Shai-Hulud, Gemini CLI RCE, Cursor CVE-2026-26268 और DPRK PromptMink का पता लगाता है।
एक डिटेक्शन किट जो एजेंटिक AI कोडिंग सहायकों (Claude Code, Gemini CLI, Cursor) और आपके रिपॉजिटरी में वे जो निर्भरताएँ लाते हैं, उनके समझौते का पता लगाता है। ग्यारह जाँचें: hook injection, RCE कॉन्फ़िग, दुर्भावनापूर्ण निर्भरताएँ, git-hook बैकडोर, और CI वर्कफ़्लो टैम्परिंग। IOC सूची बाह्यीकृत है — नए संकेतक जोड़ने के लिए कोड में बदलाव की आवश्यकता नहीं है।
सहयोगी ब्लॉग पोस्ट: When the Tool Fights Back — सहयोगी विश्लेषण।
scanner/ais.sh)ग्यारह जाँचें, प्रत्येक में एक इनलाइन What: (उद्देश्य) और Fix: (सुधार) अनुभाग शीर्षक के नीचे मुद्रित होता है ताकि रिपोर्ट स्व-व्याख्यात्मक हो। IOC सूची scanner/iocs.txt में रहती है (संस्करणित; IOC_FILE=/path/to/iocs.txt से ओवरराइड करें)।
| § | जाँच | शामिल खतरा |
|---|---|---|
| 1 | किसी भी settings.json में Claude Code SessionStart हुक इंजेक्शन (jq-आधारित, कम FP) | Mini Shai-Hulud स्थिरता |
| 2 | setup.mjs में Bun-रनटाइम ड्रॉपर सिग्नेचर | Mini Shai-Hulud स्थापना चरण |
| 3 | अस्पष्ट execution.js पेलोड — आकार और अस्पष्टता संकेत (एकल-पंक्ति, base64, eval(atob(, child_process) | Mini Shai-Hulud क्रेडेंशियल स्टीलर |
| 4 | $TMPDIR में मैलवेयर लॉक फ़ाइलें (नाम IOC सूची से लिए गए) | Mini Shai-Hulud प्रहरी |
| 5 | ड्रॉपर फ़ाइलनामों का संदर्भ देने वाली package.json preinstall स्क्रिप्ट्स | सामान्य आपूर्ति-श्रृंखला वर्म प्रवेश बिंदु |
| 6 | AI-लेखित कमिट जो .github/workflows/ को छूते हैं (ईमेल-अनुमति सूची फ़िल्टर) | समझौता किए गए AI-एजेंट पहचान द्वारा CI छेड़छाड़ |
| 7 | शेल-मेटाकैर पैटर्न वाली .gemini/ कॉन्फ़िग फ़ाइलें | Gemini CLI CVSS 10.0 RCE (v0.39.1 से पहले) |
| 8 | Cursor AGENTS.md और .cursor/ कॉन्फ़िग जो git हुक/बेयर रिपॉजिटरी का संदर्भ देते हैं | Cursor CVE-2026-26268 |
| 9 | Git post-checkout / post-merge / post-rewrite / pre-commit हुक जिनमें fetch-and-execute प्रिमिटिव हैं, साथ ही core.hooksPath सुरक्षित अनुमति सूची के बाहर पुनर्निर्देशित | CVE-2026-26268 निष्पादन प्रिमिटिव + सामान्य हुक अपहरण |
| 10 | वैश्विक रूप से स्थापित और स्थानीय node_modules पैकेज IOC सूची के विरुद्ध क्रॉस-रेफरेंस किए गए | Mini Shai-Hulud SAP CAP सेट, DPRK PromptMink, भविष्य के बुरे पैकेज |
| 11 | Git रिमोट ज्ञात वर्म एक्सफ़िल्ट्रेशन रिपॉजिटरी नामों (Shai-Hulud, A Mini Shai-Hulud has Appeared) से मेल खाते हैं |
उपयोग:
bash scanner/ais.sh
# Enter your project folder when prompted
# Custom IOC list:
IOC_FILE=./my-iocs.txt bash scanner/ais.sh
# Custom report path (default: ./agentic-ioc-scan-YYYYMMDD-HHMMSS.log):
REPORT_FILE=/var/log/agentic-scan.log bash scanner/ais.sh
आउटपुट
agentic-ioc-scan-YYYYMMDD-HHMMSS.log, tee → sed के माध्यम से ANSI-हटाया गया) पर स्ट्रीम होते हैं।[CRITICAL] (अब कार्रवाई करें), [WARNING] (संभावित रूप से दुर्भावनापूर्ण — सत्यापित करें), [REVIEW] (वैध उपयोग संभव — पुष्टि करें), [OK] (स्वच्छ)।path:line रूप)। पंक्ति संख्याएँ दिखाने वाले अनुभाग: §1 हुक, §2 Bun सिग्नेचर, §3 अस्पष्टता संकेत, §5 प्रीइंस्टॉल कुंजी, §7 Gemini मेटाकैर, §8 AGENTS.md git-hook संदर्भ, §9 संदिग्ध हुक सामग्री।.git/config पंक्ति और मेल खाने वाले रिमोट URL की रिपोर्ट करता है, ताकि आप सीधे उस प्रविष्टि पर जा सकें जिसे हटाने की आवश्यकता है।core.hooksPath पुनर्निर्देशन (§9) रिपॉजिटरी के .git/config का पूर्ण पथ रिपोर्ट करता है ताकि पुनर्मूल्यांकन ऑडिट करने योग्य हो।.git एक फ़ाइल है (जिसमें gitdir: … है), तो निरीक्षण से पहले वास्तविक git निर्देशिका हल हो जाती है।नमूना निष्कर्ष
[CRITICAL] Repo points to known worm exfil name
Repo: /home/dev/projects/myrepo
Config: /home/dev/projects/myrepo/.git/config:9
URL: https://github.com/dhawaldesai/A-Mini-Shai-Hulud-has-Appeared
[CRITICAL] Malicious hook: /home/dev/projects/myrepo/.claude/settings.json:3
[CRITICAL] Suspicious git post-checkout hook: /home/dev/projects/myrepo/.git/hooks/post-checkout:2
IOC अद्यतन करना
scanner/iocs.txt संपादित करें और # version: हेडर को बढ़ाएँ। प्रारूप है TYPE|VALUE|NOTES। समर्थित प्रकार:
| प्रकार | द्वारा उपयोग | उदाहरण |
|---|---|---|
FILENAME | §5 प्रीइंस्टॉल पैटर्न | setup.mjs |
LOCKFILE | §4 लॉक-फ़ाइल स्कैन | tmp.987654321.lock |
NPM | §10 वैश्विक + स्थानीय पैकेज स्कैन | @validate-sdk/v2 |
PYPI | §10 (जब कोई PyPI स्कैनर जोड़ा जाता है तो क्रॉस-चेक किया जाता है) | lightning |
HOOKSTRING | §1 हुक सामग्री मिलान (वर्तमान में इनलाइन-कोडेड) | SessionStart |
REPONAME | §11 git-रिमोट मिलान | A Mini Shai-Hulud has Appeared |
EMAILSUBSTRING | भविष्य के कमिट-लेखक IOC मिलान के लिए आरक्षित | — |
CONFIGPATH | एजेंटिक-टूल कॉन्फ़िग पथों की संदर्भ सूची | .claude/settings.json |
जब नए IOC सामने आते हैं तो कोई कोड परिवर्तन आवश्यक नहीं है — स्कैनर स्टार्टअप पर उन्हें पढ़ता है और बैनर में लोड किए गए संस्करण को प्रिंट करता है।
निर्भरताएँ
आवश्यक: bash, find, grep, awk, sed, git। वैकल्पिक: jq (§1 के लिए पसंदीदा — अनुपस्थित होने पर grep ह्युरिस्टिक पर वापस आता है), npm (§10 वैश्विक पैकेज जाँच के लिए आवश्यक; अनुपलब्ध होने पर अनुभाग चुपचाप छोड़ दिया जाता है)।
scanner/pkg_version_check.sh)IOC स्कैनर का सहयोगी। प्रभावित package,version जोड़ियों की CSV पढ़ता है (उदाहरण: ~/Downloads/Mini Shai-Hulud - Sheet1.csv पर Mini Shai-Hulud IOC फ़ीड — 633 npm पैकेज/संस्करण जोड़े) और जाँचता है कि क्या वे निम्नलिखित में दिखाई देते हैं:
package.json, package-lock.json, yarn.lock, pnpm-lock.yaml, और स्थापित node_modules/<pkg>/package.json को स्कैन करता है। PyPI मैनिफ़ेस्ट (requirements.txt, poetry.lock, Pipfile.lock) भी जाँचे जाते हैं जब CSV में अनस्कोप्ड नाम होते हैं।gh CLI के माध्यम से: लॉकफ़ाइल प्रकारों में कोड खोज, फिर निर्भरता-ग्राफ़ SBOM API (/repos/{owner}/{repo}/dependency-graph/sbom) के माध्यम से सटीक-संस्करण सत्यापन।गंभीरता मॉडल: लॉकफ़ाइल, node_modules/, या SBOM में सटीक pkg@version मिलान → [CRITICAL]। रेंज स्पेसिफ़ायर (^1.2.3, ~1.2.3, >=…) जिसमें प्रभावित संस्करण शामिल हो सकता है → [REVIEW]। संस्करण पुष्टि के बिना पैकेज नाम मिलान → [REVIEW]। आउटपुट टर्मिनल और ./shai-hulud-pkg-scan-YYYYMMDD-HHMMSS.log (ANSI-हटाया गया) पर स्ट्रीम होता है, अंत में गंभीरता-विभाजन सारांश के साथ।
उपयोग:
# Interactive — prompts for project directory
bash scanner/pkg_version_check.sh
# Fully scripted (env-var overrides)
PROJECT_DIR=/path/to/project \
IOC_CSV="$HOME/Downloads/Mini Shai-Hulud - Sheet1.csv" \
REPORT_FILE=/var/log/pkg-scan.log \
bash scanner/pkg_version_check.sh --skip-node-modules
CSV प्रारूप: col1 = पैकेज नाम (स्कोप्ड नाम जैसे @scope/pkg समर्थित), col2 = सटीक प्रभावित संस्करण। एक हेडर पंक्ति स्वचालित रूप से पहचानी जाती है और छोड़ी जाती है। पथ को IOC_CSV=… से ओवरराइड करें।
निर्भरताएँ: bash, find, grep, awk, sed। वैकल्पिक: jq (node_modules/<pkg>/package.json पार्सिंग सटीकता में सुधार करता है), gh (GitHub चरण के लिए आवश्यक — अनुपस्थित या अप्रमाणित होने पर स्पष्ट संदेश के साथ चरण छोड़ दिया जाता है)।
ज्ञात सीमाएँ:
grep-आधारित है, पूरी तरह से पार्स नहीं की गई — गहराई से नेस्टेड या असामान्य फ़ॉर्मेटिंग गलत नकारात्मक उत्पन्न कर सकती है। सबसे मूल्यवान अनुवर्ती कार्रवाई jq-आधारित लॉकफ़ाइल पार्सिंग है।[REVIEW] पर वापस आ जाती है।claude-code-policy/)Claude Code के लिए रोकथाम परत, ऊपर दी गई पहचान परत की पूरक।
allowManagedHooksOnly).claude/settings.json में लेखन को रोकता हैcurl, wget, और bun कमांड को रोकता हैस्थापना:
# Copy managed settings (cannot be overridden by projects)
cp claude-code-policy/managed-settings.json ~/.claude/managed-settings.json
# Copy the PreToolUse hook
mkdir -p ~/.claude/hooks
cp claude-code-policy/hooks/block_shai_hulud.py ~/.claude/hooks/
chmod +x ~/.claude/hooks/block_shai_hulud.py
npm ls -g जुड़ा है)।pre-receive हुक गैर-अनुमत लेखकों से .claude/settings.json, .vscode/tasks.json, या .gemini/ फ़ाइलें जोड़ने वाले पुश को अस्वीकार करने के लिए।इश्यू और PR का स्वागत है — विशेष रूप से नए IOC सबमिशन (scanner/iocs.txt में जोड़ें और संस्करण हेडर बढ़ाएँ), अतिरिक्त प्लेटफ़ॉर्म-विशिष्ट स्कैन रूट, और आसन्न एजेंटिक टूल्स (Continue, Cody, Codex CLI, Aider) के लिए डिटेक्शन पैटर्न।
MIT
| पुष्टिकृत समझौता संकेत |