- npm ecosystem में विनाशकारी malware variant तेज़ी से फैल रहा है, और GitLab security team ने इसे डिटेक्ट किया है
- malware, Shai-Hulud का विकसित रूप है, जिसमें संक्रमित डेवलपर के दूसरे packages तक अपने-आप संक्रमण फैलाने वाली worm-जैसी propagation structure है
- GitHub·AWS·GCP·Azure आदि से credentials की चोरी के बाद, attacker-controlled GitHub repository में data exfiltration किया जाता है
- GitHub और npm access दोनों एक साथ ब्लॉक होने पर user data को तुरंत delete करने वाला ‘deadman switch’ इसमें शामिल है
- GitLab ने पुष्टि की कि उसके अपने systems संक्रमित नहीं हुए, और Dependency Scanning तथा GitLab Duo Chat के ज़रिए detection और response के उपाय दिए
हमले का अवलोकन
- GitLab Vulnerability Research team ने npm ecosystem में बड़े पैमाने पर सप्लाई चेन हमला डिटेक्ट किया
- internal monitoring system ने कई संक्रमित packages खोजे
- malware को Shai-Hulud का variant पाया गया
- malware, worm-जैले propagation के ज़रिए संक्रमित डेवलपर के दूसरे packages तक अपने-आप फैलता है
- GitLab ने पुष्टि की कि उसने अपने यहाँ malicious package का उपयोग नहीं किया, और security community के साथ जानकारी साझा की
हमले की आंतरिक संरचना
- internal monitoring system द्वारा पकड़े गए malicious npm packages ये काम करते हैं
- GitHub, npm, AWS, GCP, Azure के credentials इकट्ठा करना
- चुराया गया data attacker-controlled GitHub repository में भेजना
- पीड़ित के दूसरे packages को अपने-आप संक्रमित करना
- infrastructure access रुकने पर destructive payload चलाना
- कई संक्रमित packages की पहचान हुई है, और जांच अभी जारी है
तकनीकी विश्लेषण: हमला कैसे आगे बढ़ता है
प्रारंभिक संक्रमण वेक्टर
- malware, multi-stage loading process के ज़रिए system में घुसता है
- संक्रमित package के
package.json में setup_bun.js script जोड़ी जाती है
- ऊपर से यह Bun JavaScript runtime install करने वाले script की तरह दिखती है
- लेकिन वास्तव में यह
bun_environment.js (10MB, obfuscated payload) चलाती है
- छोटा loader file और बड़ा obfuscated payload मिलाकर detection से बचने की कोशिश की गई
credentials संग्रह
- execute होते ही यह कई sources से tokens और secrets इकट्ठा करता है
- GitHub tokens(
ghp_, gho_)
- AWS, GCP, Azure credentials
- npm tokens(
.npmrc और environment variables)
- Trufflehog tool से पूरे home directory को scan करके API keys, passwords, Git history आदि खोजे जाते हैं
data exfiltration network
- चुराए गए GitHub token से “Sha1-Hulud: The Second Coming.” विवरण वाला public repository बनाया जाता है
- यह repository data dropbox की भूमिका निभाती है
- persistence के लिए GitHub Actions runner install किया जाता है
- अगर permissions पर्याप्त न हों, तो वही marker वाले दूसरे repositories खोजकर दूसरे systems के tokens का पुन: उपयोग किया जाता है
- इससे distributed token-sharing network बनता है
सप्लाई चेन propagation
- चुराए गए npm token की मदद से पीड़ित के सभी packages को संक्रमित किया जाता है
- original package डाउनलोड करना
setup_bun.js को preinstall script के रूप में insert करना
bun_environment.js payload जोड़ना
- version number बढ़ाना
- संक्रमित package को npm पर फिर से publish करना
deadman switch
- malware, GitHub (data exfiltration) और npm (propagation) access को लगातार monitor करता है
- अगर दोनों channels ब्लॉक हो जाएँ, तो तुरंत data destruction execute करता है
- Windows: user files delete करना और disk sectors overwrite करना
- Unix-आधारित:
shred command से files overwrite करने के बाद delete करना
- GitHub repositories को bulk में delete करने या npm tokens को बड़े पैमाने पर revoke करने पर, संक्रमित systems द्वारा एक साथ data delete करने का खतरा मौजूद है
compromise indicators (IoC)
- मुख्य detection indicators
- file:
bun_environment.js (malicious post-install script)
- directory:
.truffler-cache/, .truffler-cache/extract/
- process:
del /F /Q /S "%USERPROFILE%*", shred -uvz -n 1, cipher /W:%USERPROFILE%
- commands:
curl -fsSL https://bun.sh/install | bash, powershell -c "irm bun.sh/install.ps1|iex"
GitLab की detection और response support
- GitLab Ultimate users built-in security features से तुरंत exposure जांच सकते हैं
- Dependency Scanning enable होने पर,
package-lock.json या yarn.lock में संक्रमित packages अपने-आप डिटेक्ट हो जाते हैं
- infected packages शामिल होने वाले merge request पर warning दिखाई जाती है
- GitLab Duo Chat के साथ integration के ज़रिए तेज़ query-based detection संभव है
- उदाहरण: “Shai-Hulud v2 campaign से प्रभावित dependencies हैं क्या?”
- Security Analyst Agent project vulnerability data देखकर तुरंत जवाब देता है
- कई repositories मैनेज करने वाली teams के लिए CI/CD-आधारित automated detection और agent-based rapid response साथ में अपनाने की सिफारिश की गई है
आगे की दिशा
- इस हमले को attack infrastructure की सुरक्षा के लिए पीड़ित के data destruction का उपयोग करने वाले नए तरह के supply chain attack के रूप में देखा जा रहा है
- GitLab, community के साथ मिलकर safe recovery strategy विकसित कर रहा है, और automated detection system से variants की लगातार निगरानी कर रहा है
- शुरुआती जानकारी साझा करके deadman switch से होने वाले secondary damage को रोकना इसका लक्ष्य है
1 टिप्पणियां
Hacker News राय
लगभग एक महीने पहले मुझे एक झंझट वाला काम करना था, इसलिए मैंने एक NPM पैकेज ढूंढा
brew install npmचलाते ही dependency waterfall टूट पड़ी, और मैं रुककर risk और benefit के बारे में सोचने लगा, फिर आखिरकारbrew uninstall npmकरके वापस लौट आयाइसकी जगह मैंने पुराने Unix utility pipeline और awk से काम पूरा किया, और अब सोचता हूँ कि वही सबसे अच्छा फ़ैसला था
NPM ऐसा टूल है जो browser compatibility की समस्या हल करने के लिए बना था, इसलिए browser के बिना वाले environment में यह बेवजह की complexity लाता है
Node या Python जैसे dependency-heavy ecosystem के code को main system पर सीधे चलाने से supply chain attack का जोखिम बढ़ता है
इसलिए मैं तो Python या JS interpreter को base system पर install ही नहीं करता
आखिर में मैंने छोड़ दिया, लेकिन अब लगता है कि मैं सही था
किसी ने कहा था, “अगर GitHub malicious repositories को बड़े पैमाने पर delete कर दे, तो हज़ारों systems एक साथ user data नष्ट कर सकते हैं”
यह किसी hostage situation जैसा लगता है — इसलिए “hostage को गोली मार दो” वाला मज़ाक भी आया
मैं भी इस npm attack का शिकार हूँ
यह जानकर झटका लगा कि GitHub CLI HOME directory में plain text OAuth token स्टोर करता है
अगर attacker वहाँ पहुँच जाता, तो वह मेरे account से लगभग सब कुछ कर सकता था
macOS पर यह OS keychain में सुरक्षित रहता है — संबंधित चर्चा
Chrome OS protection का उपयोग करता है, लेकिन Firefox अभी नहीं
आखिरकार sandbox-based access control ही मूल समाधान है
लेकिन platforms के बीच कोई consistent solution नहीं है, और macOS पर भी कोई पूरी तरह perfect तरीका नहीं है
~/.dev-envdirectory बन गई और मेरा laptop GitHub runner में बदल गयाBluefin Linux के read-only file system की वजह से शायद नुकसान कम हुआ
सब लोग सिर्फ npm को दोष दे रहे हैं, लेकिन GitHub की ज़िम्मेदारी भी बड़ी है
वह malicious repositories को जल्दी detect नहीं कर पाया, और malware repositories की समस्या पहले से ही गंभीर है
अगर यह चुपचाप किसी external server पर भेजा गया होता, तो स्थिति और भयानक होती
community level के tools और practices की ज़रूरत है
अगर commercial regulation या build workflow restrictions आएँ, तो यह बड़ी समस्या बन सकती है
मैं सोच रहा था कि सिर्फ NPM ही attack target क्यों बनता है
Python और Java भी बहुत लोकप्रिय हैं, लेकिन हाल में वे अपेक्षाकृत शांत रहे हैं
और version range dependency की culture की वजह से infection बहुत तेज़ी से फैलता है
Java में आम तौर पर specific versions pin की जाती हैं, इसलिए ऐसी घटना कम होती है
इसलिए एक package दर्जनों sub-dependencies खींच लाता है
और कम अनुभव वाले developers भी ज़्यादा हैं, जिससे security कमजोर पड़ती है
दूसरे language ecosystem verification के बाद update करते हैं, लेकिन JS में लोग तुरंत upgrade कर देते हैं
install के समय scripts को खुलकर चलाने देता है, जबकि JVM या Python में ऐसा नहीं है
.npmrcमेंजोड़ने से attack vector कम किया जा सकता है
संबंधित लेख
और क्या इसे disable करने पर dependency टूटने का जोखिम नहीं होगा?
इस attack में सबसे बड़ी चिंता credentials theft है
अगर आपने infected package install किया है, तो environment variables या
.npmrctokens लीक हो चुके हो सकते हैंतुरंत tokens और API keys rotate करनी चाहिए
नियमित rotation, compromise के बाद की प्रतिक्रिया नहीं बल्कि पहले से किया गया preventive measure है
credentials को environment variables या files में store नहीं करना चाहिए; security key या encrypted file का उपयोग करना चाहिए
यह कुछ-कुछ distributed ledger में malicious transaction डालने जैसा है
समस्या यह है कि अब भी कई services plain text storage को default बनाए रखती हैं
ऐसे attacks बार-बार हो रहे हैं, फिर भी समझ नहीं आता कि AI-based detection system काम क्यों नहीं कर रहे
Microsoft AI को इतना बढ़ावा देता है, लेकिन GitHub security में उसका इस्तेमाल होता नहीं दिखता
जैसे उस दौर में, जब firewall द्वारा रोके गए हर प्रयास को attack कहा जाता था, उसका मतलब भी फीका पड़ गया था
अंदर से इसे SonaType IQ Server support करता है
वास्तव में curl project को AI-generated security report spam झेलना पड़ा है
सोचता हूँ कि postinstall scripts को लगातार allow करने की कोई वजह बचती भी है या नहीं
क्या users से यह पूछना बेहतर नहीं होगा कि उन्हें इसे चलाना है या नहीं?
और CI servers में non-interactive installation चाहिए होती है, इसलिए व्यवहार में यह मुश्किल लगता है
लेख बहुत insightful था, लेकिन अंत में यह GitLab security features के प्रचार पर खत्म हुआ, जो थोड़ा खटका