
keyv/cacheable सप्लाई-चेन हमले के लिए स्कैनर: समझौता किए गए npm पैकेजों का पता लगाता है, पेलोड हैश सत्यापित करता है, और रेपो और होस्ट मोड में पर्सिस्टेंस इम्प्लांट ढूंढता है।
अंग्रेज़ी | Português
keyv/cacheable सप्लाई-चेन घटना ("Shai-Hulud: Here We Go Again", 4 अगस्त 2026) के लिए स्टैंडअलोन स्कैनर — 440+ npm पैकेज एक स्व-प्रसार वर्म द्वारा समझौता किए गए हैं जो क्लाउड/CI क्रेडेंशियल्स चुराता है और डेड-मैन स्विच के साथ पर्सिस्टेंस स्थापित करता है।
मिनटों में और कुछ भी इंस्टॉल किए बिना पता लगाता है:
package-lock.json, npm-shrinkwrap.json, yarn.lock (v1 और Berry), pnpm-lock.yaml और bun.lock में — ट्रांज़िटिव डिपेंडेंसी सहित, पूरी चेन के साथ (जैसे eslint → file-entry-cache → flat-cache → [email protected]);node_modules में (ज्ञात आर्टिफैक्ट्स का नाम + SHA-256 हैश);SUSPECT चिह्नित, बिना हैश के कभी पुष्टि नहीं;.claude/settings.json और .vscode/tasks.json में हुक, अस्थायी आर्टिफैक्ट्स (bun-dl-*);keyv/cacheable परिवारों का मेंटेनर खाता समझौता किया गया; हमलावर ने "preinstall": "node setup.mjs" हुक के साथ नए वर्शन प्रकाशित किए — वह कोड जो पैकेज इंस्टॉल होने से पहले चलता है, उसी के विशेषाधिकारों के साथ जिसने npm install चलाया।setup.mjs GitHub से Bun रनटाइम डाउनलोड करता है और उसमें पेलोड चलाता है — उन टूल्स से बचाव जो केवल node प्रोसेस की निगरानी करते हैं।Math_Symbol.js (~728 KB, ऑबफस्केटेड) क्रेडेंशियल्स चुराता है: AWS इंस्टेंस मेटाडेटा, AWS/GCP/Azure कुंजियाँ, Vault टोकन, Kubernetes सर्विस अकाउंट, GitHub Actions सीक्रेट, npm टोकन, साथ ही डिस्क पर प्राइवेट कुंजियों और bearer टोकन के लिए एक सामान्य regex स्वीप।npm install/npm ci चलाया। --ignore-scripts के साथ, हुक नहीं चला।.claude/settings.json (SessionStart) और .vscode/tasks.json (folderOpen) में ऑटोस्टार्ट हुक मिले जो क्लोन किए गए फ़ोल्डर को खोलने पर लोडर चलाते हैं — न कोई npm install, न कुछ इंस्टॉल हुआ। इसमें वे लोग शामिल हैं जिन्होंने घटना की जांच करने के लिए रिपो क्लोन की और AI कोडिंग एजेंट जिन्होंने डायरेक्टरी खोली — AI-एजेंट हुक (.claude/) को सप्लाई-चेन वेक्टर के रूप में उपयोग किए जाने के पहले सार्वजनिक मामलों में से एक।इम्प्लांट एक "वॉचर" (gh-token-monitor) इंस्टॉल करता है जिसे LaunchAgent (macOS) या systemd यूज़र सर्विस + loginctl enable-linger (Linux) जीवित रखता है। हर 60 सेकंड में यह चुराए गए GitHub टोकन को API के विरुद्ध मान्य करता है। जब तक टोकन काम करता है, कुछ नहीं होता। जब प्रतिक्रिया 4xx हो जाती है — यानी जिस क्षण आप टोकन रिवोक करते हैं — यह eval के माध्यम से ~/.config/gh-token-monitor/handler की सामग्री चलाता है: हमलावर द्वारा रिमोट से परिभाषित एक मनमाना कमांड। सार्वजनिक विश्लेषण नहीं जानता कि इसमें क्या है — यह डेटा विनाश, पुनः-इम्प्लांटेशन, रैंसमवेयर या कुछ भी नहीं हो सकता। जोखिम का आकलन संभव नहीं है; इसीलिए प्रतिक्रिया क्रम अनिवार्य है।
तीन गुण जो प्रतिक्रिया बदलते हैं:
host मोड में इस बारे में चेतावनी देता है।[email protected] पासिंग SLSA अटेस्टेशन के साथ भेजा गया था। प्रोवेनेंस बिल्ड इंटीग्रिटी की पुष्टि करता है, सोर्स की नहीं: वैध वर्कफ़्लो ने पहले से ट्रोजनाइज़्ड कोड को संकलित किया।package.json के preinstall हुक और पैकेज में जोड़ी गई दो नई फ़ाइलों (setup.mjs, Math_Symbol.js) में है।eslint → file-entry-cache → flat-cache → keyv है। इसीलिए स्कैनर हर निष्कर्ष में चेन दिखाता है।scan.mjs में निम्नलिखित गुण हैं — सप्लाई-चेन घटना का जवाब देने वाले किसी भी व्यक्ति के लिए महत्वपूर्ण:
npm install नहीं। इसे चलाने से पहले 15 मिनट में पूरे scan.mjs का ऑडिट करें।--update है (एक ताज़ा IOC मेनिफेस्ट डाउनलोड करना), स्पष्ट और वैकल्पिक।docker run --network=none या एक आइसोलेटेड मशीन: बस scan.mjs + iocs.json कॉपी करें।आवश्यकता: Node.js ≥ 18 (npm वाली किसी भी मशीन पर यह पहले से मौजूद है)। दो फ़ाइलें डाउनलोड करें — scan.mjs + iocs.json — और बस: कोई इंस्टॉलेशन नहीं।
सावधानी: यदि आपने यह पूरी रिपॉजिटरी क्लोन की है, तो
fixtures/फ़ोल्डर में परीक्षणों में उपयोग किए गए निष्क्रिय IOC हैं (वास्तविक नाम और वर्शन, डमी सामग्री — कोई मैलवेयर नहीं)। स्कैनर इसे स्वचालित रूप से छोड़ देता है और आउटपुट में चेतावनी देता है; इससे प्राप्त निष्कर्ष केवल तभी दिखाई देते हैं यदि आप इसे जानबूझकर स्कैन करते हैं।
दो रन मोड हैं जो अलग-अलग प्रश्नों के उत्तर देते हैं, और यही तय करता है कि कहाँ चलाना है:
repo मोड लॉकफ़ाइल्स और node_modules पढ़ता है — और लॉकफ़ाइल्स git में रहती हैं, इसलिए इसे केंद्रीकृत किया जा सकता है: एक व्यक्ति कंपनी की हर रिपॉजिटरी को स्कैन करता है।host मोड इम्प्लांट (वॉचर, LaunchAgent/systemd, IDE हुक) की तलाश करता है, जो उस मशीन पर रहता है जहाँ कोड निष्पादित हुआ — यह git में नहीं है और इसे केंद्रीकृत नहीं किया जा सकता।node scan.mjs repo /folder/with/all/the/repos --json=result.json --html=report.html
मिनटों में उत्तर देता है कि "कौन से प्रोजेक्ट एक्सपोज़्ड हैं", बिना किसी को शामिल किए। कई पथ स्वीकार करता है; उपनिर्देशिकाओं में जाता है (मोनोरेपो और वर्कस्पेस सहित)।
निष्कर्ष वाले प्रत्येक प्रोजेक्ट के लिए, पहचानें कि 2026-08-04 09:35 UTC से किसने इसे छुआ (git log, CI लॉग)। वे लोग अपनी मशीन पर चलाते हैं:
node scan.mjs # current directory + host, in ~30 seconds
दायरे में: कोई भी जिसने (a) उस अवधि में npm install/npm ci चलाया; या (b) केवल क्लोन किया और फ़ोल्डर को VS Code या AI एजेंट में खोला — वेक्टर B को किसी इंस्टॉल की आवश्यकता नहीं है।