
Miasma / Shai-Hulud वर्म और CVE-2026-35603 (AI-एजेंट/IDE कॉन्फ़िग इंजेक्शन) के लिए पता लगाने और सुधार टूलकिट
Miasma वर्म (एक Mini Shai-Hulud वेरिएंट) के लिए घटना विश्लेषण + डिटेक्शन/रिमेडिएशन टूलिंग जो AI-एजेंट / IDE कॉन्फ़िग और npm/GitHub रेपो में ऑटो-रन पेलोड इंजेक्ट करता है।
⚠️ अस्वीकरण — कोई वारंटी नहीं। यह एक सामुदायिक रक्षात्मक टूलकिट है जो "जैसा है" प्रदान की गई है, बिना किसी प्रकार की वारंटी के (
LICENSEदेखें)। स्कैनर और YARA नियम केवल पढ़ने योग्य हैं, लेकिनpurge-history.shgit इतिहास को फिर से लिखता है और.claude/हुक फ़ाइलों को क्वारंटाइन में ले जाते हैं — दोनों एक रिपॉजिटरी को बदल सकते हैं। पहले बैकअप लें, प्रत्येक टूल क्या करता है इसकी समीक्षा करें, और इसे अपने जोखिम पर चलाएं। एक साफ स्कैन सुरक्षा की गारंटी नहीं है: संकेतक विकसित होते हैं और नए वेरिएंट दिखाई देते हैं। उन सिस्टम और खातों पर उपयोग करें जिनका निरीक्षण करने के लिए आप अधिकृत हैं। कोई अंतर या बग मिला?SECURITY.mdऔरCONTRIBUTING.mdदेखें।
YARA इंस्टॉल करें (Windows): winget install VirusTotal.YARA — या choco install yara / scoop install yara।
Linux/macOS पर: apt install yara / brew install yara. yara --version से सत्यापित करें।
नोट:
-Mode Localडिफ़ॉल्ट रूप से केवल$env:USERPROFILEको स्कैन करता है। अन्य स्थानों पर रेपो को कवर करने के लिए-CodeRootsपास करें, जैसे-CodeRoots E:\Sources,D:\work।
# Scan local machine + local repos (+ CVE-2026-35603 ProgramData)
pwsh -File Scan-Miasma.ps1 -Mode Local
pwsh -File Scan-Miasma.ps1 -Mode Local -CodeRoots E:\Sources,D:\work
# Scan remote GitHub repos (authenticate on the target account first for private repos/secrets)
gh auth login
pwsh -File Scan-Miasma.ps1 -Mode Remote -Owners your-org,your-user -OutReport report.md
# Everything + JSON + Markdown report
pwsh -File Scan-Miasma.ps1 -OutJson findings.json -OutReport report.md
यदि कोई INFECTED निष्कर्ष है तो एग्ज़िट कोड 1 (CI-अनुकूल)।
# Purge history of an infected repo (review PATHS in the script first)
./purge-history.sh /path/to/repo
# then, after reviewing the verification:
git push origin --force --all && git push origin --force --tags
# YARA scan
yara -r setup-js.yar /path/to/scan
# Linux/macOS: local scan (bash port — defaults to $HOME; pass roots to widen)
./scan-miasma.sh
./scan-miasma.sh ~/src /opt/work
# Statically deobfuscate a captured dropper (read-only — never runs it)
pwsh -File Expand-MiasmaPayload.ps1 -Path .github/setup.js # writes layers + iocs.txt to <Path>.deob/
pwsh -File Expand-MiasmaPayload.ps1 -SelfTest # verify the decode/decrypt engine
डिओबफस्केटर p,a,c,k,e,d पैकर वेव को अनपैक करता है, चार-कोड वेव को डिकोड करता है, स्वचालित रूप से सीज़र शिफ्ट का पता लगाता है और उलटता है (-Shift के साथ ओवरराइड करें), फिर प्रत्येक एम्बेडेड AES-128-GCM ब्लॉब (_b बूटस्ट्रैपर, _p स्टीलर) को डिक्रिप्ट करता है और पुनर्प्राप्त कोड को URL, IP और डेड-ड्रॉप खातों के लिए स्कैन करता है।
# After eradication: generate a prioritized secret-rotation checklist (revokes nothing)
pwsh -File Invoke-MiasmaRotation.ps1 # detects creds reachable here
pwsh -File Invoke-MiasmaRotation.ps1 -OutReport rotation.md
बंडल कम्पोज़िट एक्शन को किसी भी वर्कफ़्लो के पहले चरण के रूप में उपयोग करें:
# In another repo (pin to a tag/SHA for supply-chain safety):
- uses: actions/checkout@v4
- uses: jchable/miasma-toolkit/.github/actions/miasma-guard@main
# with:
# full-scan: 'true' # also run Scan-Miasma.ps1 -Mode Local (needs pwsh)
यह टूलकिट .github/workflows/miasma-ci.yml के माध्यम से स्वयं पर वही गार्ड चलाता है (एक्शन को सापेक्ष पथ से संदर्भित करते हुए)। गार्ड वेव-अज्ञेयवादी है और वर्म के लॉन्चर कॉन्फ़िग फ़ाइलों तक सीमित है, इसलिए यह उन दस्तावेज़ों पर कभी गलत-सकारात्मक नहीं होता जो केवल IOC स्ट्रिंग का उल्लेख करते हैं।
.claude/)उन मशीनों के लिए रीयल-टाइम सुरक्षा जो इस रेपो में Claude Code चलाती हैं। हुक iocs.psd1 का पुन: उपयोग करते हैं (कोई डुप्लिकेट संकेतक नहीं) और .claude/settings.json में वायर्ड होते हैं:
.miasma-quarantine/<timestamp>/… (git-अनदेखा) में स्थानांतरित किया जाता है और .miasma-quarantine/quarantine.log में लॉग किया जाता है — Move-Item के साथ पुनर्स्थापित करें। कुछ भी हार्ड-डिलीट नहीं किया जाता।Miasma.Common.ps1 में Test-MiasmaExcluded): टूलकिट की अपनी फ़ाइलों में वैध रूप से IOC स्ट्रिंग्स होती हैं (iocs.psd1, Scan-Miasma.ps1, scan-miasma.sh, Expand-MiasmaPayload.ps1, Invoke-MiasmaRotation.ps1, purge-history.sh, setup-js.yar, content/, , , ) और कभी अवरुद्ध/क्वारंटाइन नहीं की जाती।DROPPER, INJECT, FORGED, BADDEP, WORKFLOW, RUNNER, PAYLOAD, BUN-DROP, PROGRAMDATANPM-AUDIT, SECRETS (रोटेशन इन्वेंट्री), SIGNATURE, PERSIST, PROGRAMDATA-CFGgh api <404> --jq एरर बॉडी को stdout पर डंप करता है → आउटपुट सत्यता पर कभी भरोसा न करें; $LASTEXITCODE + प्रारूप सत्यापित करें (संख्यात्मक आकार, सटीक ब्रांच नाम) की जाँच करें।master→main रीडायरेक्ट रखता है → branches/master 200 लौटाता है; केवल एक ब्रांच स्वीकार करें यदि लौटाया गया नाम == अनुरोधित नाम।--package-lock-only रहना चाहिए (कोई npm install, कोई स्क्रिप्ट निष्पादित नहीं)।मूल बैकलॉग (bash पोर्ट, गंभीरता बैज, पैकर-वेव डिओबफस्केशन, रोटेशन हेल्पर) हो चुका है। भविष्य के विचार:
scan-miasma.sh: रिमोट/GitHub मोड जोड़ें (वर्तमान में केवल स्थानीय)।--revoke मोड (गेटेड, पुष्टिकरण के साथ) gh/npm/aws के लिए।| फ़ाइल | यह क्या है |
|---|
content/incident-report.fr.md / content/incident-report.en.md | पूर्ण लेख: यह कैसे काम करता है, पेलोड डिओबफस्केशन, IOCs, उन्मूलन |
Scan-Miasma.ps1 | एकीकृत स्कैनर (स्थानीय + रिमोट), संरचित JSON + प्रति-रेपो Markdown रिपोर्ट — इसका उपयोग करें |
iocs.psd1 | साझा संकेतक (हैश, सिग्नेचर, खराब पैकेज, कॉन्फ़िग) जो स्कैनर द्वारा लोड किए जाते हैं — यहाँ IOCs संपादित करें |
Expand-MiasmaPayload.ps1 | setup.js के लिए स्टैटिक डिओबफस्केटर — पैकर/चार-कोड → सीज़र → AES-128-GCM को छीलता है और C2/IOCs निकालता है (पेलोड को कभी निष्पादित नहीं करता) |
Invoke-MiasmaRotation.ps1 | सीक्रेट-रोटेशन चेकलिस्ट — पता लगाता है कि यहाँ कौन सी क्रेडेंशियल्स पहुँच योग्य हैं और रिवोक कमांड प्रिंट करता है (केवल पढ़ने योग्य; कुछ भी रिवोक नहीं करता) |
scan-miasma.sh | Linux/macOS के लिए स्थानीय स्कैन का Bash पोर्ट (क्रॉस-प्लेटफ़ॉर्म सबसेट) |
purge-history.sh | सभी git इतिहास से दुर्भावनापूर्ण फ़ाइलें शुद्ध करें (filter-repo → filter-branch) + बैकअप |
setup-js.yar | ड्रॉपर + लॉन्चर कॉन्फ़िग के लिए YARA नियम |
.github/actions/miasma-guard/ | पुन: प्रयोज्य GitHub Actions कम्पोज़िट एक्शन — यदि ड्रॉपर/लॉन्चर मौजूद है तो बिल्ड करने से मना करता है |
.claude/ | Claude Code हुक — रीयल-टाइम गार्ड/क्वारंटाइन + /miasma-scan कमांड (नीचे देखें) |
| टूल | किसके लिए आवश्यक | आवश्यक? |
|---|
PowerShell 7+ (pwsh) | Scan-Miasma.ps1, Expand-MiasmaPayload.ps1, Invoke-MiasmaRotation.ps1 | आवश्यक (वे टूल्स) |
bash + coreutils (sha256sum/shasum, awk, find) | scan-miasma.sh (Linux/macOS) | केवल bash पोर्ट |
| git | स्थानीय-रेपो इतिहास जाँच, purge-history.sh | आवश्यक |
GitHub CLI (gh, प्रमाणित) | Scan-Miasma.ps1 -Mode Remote | केवल रिमोट स्कैन |
| npm | रिमोट npm audit (केवल लॉकफ़ाइल) | वैकल्पिक (अनुपस्थित होने पर स्वचालित रूप से छोड़ा गया) |
| git-filter-repo | पसंदीदा इतिहास पुनर्लेखन (बिल्ट-इन git filter-branch पर वापस आता है) | वैकल्पिक |
YARA (yara) | setup-js.yar स्कैन | वैकल्पिक |
| हुक | घटना | कार्रवाई |
|---|
Guard-Write.ps1 | PreToolUse (Write/Edit/MultiEdit) | एक ऐसी लिखाई को अवरुद्ध करता है जो वर्म IOC इंजेक्ट करेगी (टूल कॉल रद्द करता है) |
Guard-Bash.ps1 | PreToolUse (Bash) | वर्म निष्पादन को अवरुद्ध करता है — node .github/setup.js, bun/bunx, एक पाइप किया गया bun.sh इंस्टॉलर |
Scan-Write.ps1 | PostToolUse (Write/Edit/MultiEdit) | एक संक्रमित फ़ाइल के लैंड करने के बाद सचेत करता है + क्वारंटाइन करता है |
Session-Sweep.ps1 | SessionStart | तेज़ रेपो स्वीप; किसी भी पूर्व-मौजूद संक्रमण को संदर्भ में रिपोर्ट करता है |
/miasma-scan | कमांड | Scan-Miasma.ps1 के चारों ओर ऑन-डिमांड रैपर |
.claude/hooks|commands.github/actions/miasma-guard/.github/workflows/Guard-Bash निष्पादन को लक्षित करता है, उल्लेख को नहीं: इसके पैटर्न (iocs.psd1 → CmdSigs) एक कमांड पोज़ीशन पर एंकर होते हैं, इसलिए ट्राइएज कमांड जो केवल एक IOC का नाम लेते हैं (grep "node .github/setup.js", yara -r setup-js.yar, cat setup.js) अवरुद्ध नहीं होते — केवल वास्तव में node …/setup.js / bun / एक bun.sh इंस्टॉल पाइप चलाना होता है। नोट: bun/bunx आह्वान को सीधे अवरुद्ध किया जाता है (वर्म का रनटाइम); यदि आपको वास्तव में Bun की आवश्यकता है तो CmdSigs के माध्यम से अनुमति सूची बनाएं।Scan-Miasma.ps1 (केवल पढ़ने योग्य) के विपरीत, ये हुक ट्री को संशोधित करते हैं (क्वारंटाइन)। वे ऑप्ट-इन हैं: Claude Code पहली बार .claude/settings.json लोड करने पर हुक को अनुमोदित करने का संकेत देता है।