- npm के लिए Bitwarden CLI पैकेज को चल रहे Checkmarx सप्लाई चेन हमले के हिस्से के रूप में समझौता-ग्रस्त किया गया, और अभी तक पुष्टि किया गया प्रभाव दायरा
@bitwarden/cli2026.4.0 बिल्ड तक सीमित है - पैकेज में शामिल
bw1.jsमैलवेयर वही इन्फ्रास्ट्रक्चर और obfuscation तकनीक इस्तेमाल करता है, जैसेaudit.checkmarx[.]cx/v1/telemetry, और यह समझौता-ग्रस्त GitHub Action के जरिए CI/CD compromise के संकेतों से भी मेल खाता है - संग्रह का दायरा सिर्फ GitHub tokens तक सीमित नहीं है, बल्कि AWS, Azure, GCP credentials,
.npmrc, SSH keys, environment variables, और Claude/MCP config files तक फैला हुआ है - चुराई गई जानकारी का इस्तेमाल सार्वजनिक GitHub repositories बनाने और commits करने, npm token के जरिए दोबारा वितरण फैलाने, और workflow injection के लिए किया जाता है; इसमें
~/.bashrcऔर~/.zshrcमें बदलाव जैसी persistence क्षमताएं भी शामिल हैं - Bitwarden CLI इस्तेमाल करने वाले संगठनों को इस घटना को credentials exposure और CI/CD compromise के रूप में लेना चाहिए, और CI logs की समीक्षा व संभावित रूप से उजागर हुए secrets को बदलना महत्वपूर्ण है
अवलोकन
- Bitwarden CLI npm पैकेज को चल रहे Checkmarx सप्लाई चेन हमले के हिस्से के रूप में समझौता-ग्रस्त किया गया, और पुष्टि किया गया लक्षित संस्करण
@bitwarden/cli2026.4.0है- मैलिशियस कोड पैकेज में शामिल
bw1.jsमें मौजूद था - हमले का रास्ता Bitwarden की CI/CD pipeline के भीतर समझौता-ग्रस्त GitHub Action के उपयोग के संकेतों से मेल खाता है, और अन्य repositories में देखे गए अभियान पैटर्न से भी समानता रखता है
- मैलिशियस कोड पैकेज में शामिल
- अब तक पुष्टि की गई सीमा Bitwarden CLI बिल्ड तक सीमित है, और यह समझौता बड़े Checkmarx campaign में पहचाने गए GitHub Actions सप्लाई चेन vector का अनुसरण करता है
- केवल npm के लिए CLI पैकेज प्रभावित है
- Chrome extension, MCP server, और अन्य आधिकारिक distributions पर अभी तक प्रभाव की पुष्टि नहीं हुई है
- जांच अभी जारी है, और पूर्ण तकनीकी विश्लेषण, प्रभावित versions, compromise indicators, और response guidance बाद में जारी किए जाएंगे
- यदि आप Bitwarden CLI का उपयोग करते हैं, तो CI logs की समीक्षा और संभवतः उजागर हुए secrets को बदलना आवश्यक है
तकनीकी विश्लेषण
- मैलिशियस payload
bw1.jsपिछले दिन विश्लेषित Checkmarx केmcpAddon.jsके साथ मुख्य इन्फ्रास्ट्रक्चर साझा करता है- यह समान C2 endpoint
audit.checkmarx[.]cx/v1/telemetryका उपयोग करता है, और__decodeScrambledतथा seed0x3039के साथ obfuscate किया गया है - यह GitHub API के जरिए commit-आधारित exfiltration और npm registry के जरिए token theft व redistribution भी करता है
- यह समान C2 endpoint
- एम्बेडेड payload संरचना भी उसी परिवार की है
- gzip+base64 संरचना के भीतर GitHub Actions
Runner.Workermemory को scrape कर GitHub tokens को निशाना बनाने वाली Python script शामिल है - redistributed npm packages के लिए
setup.mjsloader, GitHub Actions workflow YAML, hardcoded RSA public key, और वैचारिक घोषणा-संबंधी strings भी शामिल हैं
- gzip+base64 संरचना के भीतर GitHub Actions
- credentials collection का दायरा बहुत व्यापक है
- GitHub tokens को
Runner.Workermemory scraping और environment variables से एकत्र किया जाता है - AWS credentials को
~/.aws/files और environment variables से खोजा जाता है - Azure tokens को
azdसे, और GCP credentials कोgcloud config config-helperके जरिए एकत्र किया जाता है .npmrc, SSH keys, environment variables, और Claude/MCP config files भी लक्षित हैं
- GitHub tokens को
- GitHub के जरिए exfiltration का तरीका भी स्पष्ट रूप से देखा गया है
- पीड़ित खाते के अंतर्गत Dune-थीम naming rule
{word}-{word}-{3digits}का पालन करने वाली public repositories बनाई जाती हैं - encrypted results को commit किया जाता है, और commit message में
LongLiveTheResistanceAgainstMachinesmarker के साथ token डाला जाता है
- पीड़ित खाते के अंतर्गत Dune-थीम naming rule
- इसमें सप्लाई चेन propagation mechanism भी शामिल है
- चुराए गए npm tokens से write-access वाले packages खोजकर preinstall hook जोड़कर दोबारा प्रकाशित किया जाता है
- GitHub Actions workflow inject कर repository secrets को अतिरिक्त रूप से एकत्र किया जाता है
- रूसी locale kill switch मौजूद है
- यदि system locale
"ru"से शुरू होता है, तो यह चुपचाप समाप्त हो जाता है - यह
Intl.DateTimeFormat().resolvedOptions().localeऔरLC_ALL,LC_MESSAGES,LANGUAGE,LANGenvironment variables की जांच करता है
- यदि system locale
- runtime Bun v1.3.13 है और इसे GitHub Releases से डाउनलोड किया जाता है
Checkmarx घटना से अलग बिंदु
bw1.jsमें अतिरिक्त compromise indicators हैं जो Checkmarx incident दस्तावेज़ में नहीं थे- hardcoded lock file
/tmp/tmp.987654321.lockके जरिए concurrent execution रोका जाता है ~/.bashrcऔर~/.zshrcमें payload inject कर shell profile persistence हासिल की जाती है- repository description को
Shai-Hulud: The Third Comingपर सेट करना और debug string में"Would be executing butlerian jihad!"शामिल करना जैसी स्पष्ट branding का उपयोग किया गया है
- hardcoded lock file
- साझा tooling एक ही malware ecosystem से मजबूत जुड़ाव का संकेत देती है, लेकिन operational signatures attribution को और कठिन बनाते हैं
- Checkmarx हमले के सामने आने के बाद TeamPCP ने
@pcpcatssocial account के जरिए इसकी जिम्मेदारी लेने का दावा किया था - संबंधित मैलवेयर ने सामान्य दिखने वाले description से खुद को छिपाने की कोशिश की थी
- Checkmarx हमले के सामने आने के बाद TeamPCP ने
- इस payload का सार्वजनिक रवैया अलग है
- Shai-Hulud repository names,
"Butlerian Jihad"घोषणा, और machines के खिलाफ resistance का दावा करने वाले commit messages जैसे वैचारिक चिह्न सीधे मैलवेयर के भीतर शामिल हैं - साझा इन्फ्रास्ट्रक्चर का उपयोग करने वाले किसी दूसरे operator, अधिक वैचारिक उप-समूह, या अभियान के सार्वजनिक रवैये में बदलाव—इन सभी संभावनाओं को अभी नकारा नहीं जा सकता
- Shai-Hulud repository names,
सिफारिशें
- जिन संगठनों ने मैलिशियस Bitwarden npm पैकेज इंस्टॉल किया है, उन्हें इस घटना को credentials exposure और CI/CD compromise घटना के रूप में मानना चाहिए
- डेवलपर systems और build environments से प्रभावित पैकेज को तुरंत हटाएं, और उन environments में उजागर हुए हो सकने वाले सभी credentials बदलें
- इसमें GitHub tokens, npm tokens, cloud credentials, SSH keys, और CI/CD secrets शामिल हैं
- GitHub में unauthorized repository creation और असामान्य workflows की जांच करें
.github/workflows/के अंतर्गत अप्रत्याशित files, संदिग्ध workflow runs, artifact downloads, और Dune-थीम name pattern{word}-{word}-{3digits}का पालन करने वाली public repositories की जांच करें- यदि प्रभाव की संभावना हो, तो नए प्रकाशित repositories में नीचे दिए गए keywords की जांच करें
atreidescogitorfedaykinfremenfutargesseritgholaharkonnenheighlinerkanlykralizeclasgunlazamelangementatnavigatorornithopterphibianpowindahpranaprescientsandwormsardaukarsayyadinasietchsiridarsligstillsuitthumpertleilaxu
- npm में unauthorized publishing की audit करें
- अनधिकृत publish, version changes, और नए जोड़े गए install hooks की जांच करें
- cloud environments में access logs की दोबारा समीक्षा करें
- असामान्य secret access, token use, और नए जारी किए गए credentials को ट्रैक करने की आवश्यकता है
- endpoints और runners पर देखे गए exfiltration infrastructure तथा file access traces को खोजें
audit[.]checkmarx[.]cxके लिए outbound connections की जांच करें- यह देखें कि सामान्य रूप से उपयोग न होने वाले environments में Bun execution हुआ था या नहीं
.npmrc,.git-credentials,.env, cloud credential stores,gcloud,az,azdaccess traces की समीक्षा करें/tmp/tmp.987654321.lockकी मौजूदगी और~/.bashrc,~/.zshrcमें संशोधन भी जांचें
- GitHub Actions में unauthorized workflow creation की समीक्षा करें
- यह जांच जरूरी है कि क्या workflow किसी temporary branch में बनाया गया था
format-results.txtजैसे artifact बनाए गए या डाउनलोड किए गए थे या नहीं, यह भी देखें
- लंबी अवधि में भविष्य के सप्लाई चेन incidents के blast radius को कम करना आवश्यक है
- token permissions का दायरा घटाएं और जहां संभव हो short-lived credentials का उपयोग करें
- package creation और publishing permissions सीमित करें और GitHub Actions permissions को सख्त करें
- अनावश्यक artifact access बंद करें, और सामान्य release प्रक्रिया के बाहर बने public repositories या workflow changes की निगरानी करें
compromise indicators
-
मैलिशियस पैकेज
-
नेटवर्क indicators
94[.]154[.]172[.]43https://audit.checkmarx[.]cx/v1/telemetry
-
फाइल सिस्टम indicators
/tmp/tmp.987654321.lock/tmp/_tmp_<Unix Epoch Timestamp>/package-updated.tgz
1 टिप्पणियां
Hacker News की राय
सोच रहा हूँ कि minimum release wait period रखने से बेहतर कोई बचाव है भी या नहीं
अगर
.npmrcमें सिर्फmin-release-age=7भी रखा होता, तो करीब 19 घंटे पहले अपलोड होकर बाद में malicious निकले@bitwarden/cli 2026.4.0को पाने वाले 334 लोग शायद बच जातेयही बात
axios,ua-parser-js,node-ipcजैसे मामलों पर भी काफ़ी फिट बैठती है, औरevent-streamजैसे लंबे समय तक छिपे रहने वाले मामलों को भले न रोके, लेकिन ज़्यादातर acute supply-chain attacks पर असरदार लगती हैnpm/pnpm/bun/uv में wait time जोड़ने के config examples हैं, और one-click से जांचकर लागू करने वाला कोई tool नहीं मिला, इसलिए मैंने खुद https://depsguard.com बनाया
अभी-अभी इसी तरह के आइडिया वाला https://cooldowns.dev भी देखा
यह सिर्फ minimum release wait period नहीं लगाता, बल्कि npm/uv आदि को wrap करने वाले wrapper की तरह install से पहले हर dependency को commercial vulnerability database से मिलाकर known issues या suspicious signals की जांच करता है
असल दुनिया में कोई न कोई हमेशा तुरंत update करेगा, लेकिन ऐसे incidents सामने आने की प्रक्रिया खुद fast-update users पर कुछ हद तक निर्भर लगती है
अगर registry binaries को वैसे ही pull करना पड़े, तो cooldown से risk थोड़ा कम किया जा सकता है
GitHub तक घुसपैठ वाले long-tail cases के लिए commit·maintainer heuristics और AI-based code change analysis चलाकर, anomaly दिखने पर human review की ज़रूरत लगती है
संदर्भ के लिए, मैं यहीं काम करता हूँ
इस incident का मूल बिंदु यह है कि build pipeline compromise हो गई थी और उसी से दूषित package deploy हुआ
फिर भी अगर आप काम के लिए अहम चीज़ npm पर चला रहे हैं, तो dependencies को pinning करना बेहतर है
बहुत से developers मानते हैं कि lockfile काफ़ी है, लेकिन अगर
^range बची हो, तो lockfile update के समय ऐसा नया version आ सकता है जिसे मैंने explicitly चुना ही नहींअगर system से कंपनी के अस्तित्व पर असर पड़ सकता है, तो यह झंझट उठाना भी ठीक है
https://github.com/doy/rbw Bitwarden CLI का Rust alternative है
Rust ecosystem भी धीरे-धीरे npm की तरह बड़े और गहरे dependency tree वाला लगने लगा है, लेकिन फिर भी JavaScript में आम तौर पर जितने authors पर भरोसा करना पड़ता है, उससे यह काफ़ी कम है
फिर भी कम से कम versions pin किए हुए हैं
rbw + vaultwardenका combination self-hostable Rust version of Bitwarden की तरह काम करता है, इसलिए काफ़ी अच्छा हैया फिर भाषाओं की standard library में और ज़्यादा functionality जोड़ी जाए
Bitwarden CLI का अनुभव बहुत खराब रहा
मैंने
bw listचलाया और सोचा था कि सिर्फ password names दिखेंगे, लेकिन असल में passwords और current TOTP codes तक सब दिखा दिएऔर भी डरावनी बात यह थी कि server पर ssh करके tmux के अंदर weechat खोला, तो
bwcommand का पूरा content weechat input history में accessible थाक्यों हुआ, इसका मुझे बिल्कुल पता नहीं, और यह tmux और weechat sessions के पार भी बना रहा; server reboot करने पर ही गया
उसके बाद मैंने
bwCLI तुरंत हटा दिया और दोबारा install करने का कोई इरादा नहींसंदर्भ के लिए, terminal के तौर पर ghostty इस्तेमाल करता हूँ
सोच रहा हूँ कि क्या weechat में कोई
bwcliextension है; और मुझे तो अभी इस incident से ही पता चला कि Bitwarden का CLI भी हैमैं local में keepass इस्तेमाल करता हूँ
CLI नहीं इस्तेमाल किया, लेकिन browser plugin इस्तेमाल करता हूँ
अगर यह compromise हो जाए तो बहुत बड़ी मुसीबत होगी, लेकिन इसे रोकने के लिए क्या करना चाहिए समझ नहीं आता
सोच रहा हूँ कि क्या verified पुराना version चलाते रहना ही जवाब है
यह बात फिर अजीब लगती है कि मेरी ज़िंदगी का बड़ा हिस्सा इस पर निर्भर है कि ये secrets, secrets ही बने रहें
इसलिए मैं password manager browser extensions बिल्कुल नहीं इस्तेमाल करता
पहले browser integration में security problems वाला product देखने के बाद से मैं इन्हें पूरी तरह avoid करता हूँ; iOS integration पर अपेक्षाकृत ज़्यादा भरोसा है, फिर भी सावधान रहता हूँ
developer package managers, OS package managers, browser extensions, यहाँ तक कि standalone apps के auto-updates तक सबमें
Socket जैसी कंपनियों को malicious updates पकड़ने का समय मिलना चाहिए; अगर सब लोग publish के कुछ ही मिनटों में download कर लें, तो ऐसी detection का मतलब ही नहीं बचेगा
मैं इस setup की ज़ोरदार सिफारिश करता हूँ
शीर्षक देखकर थोड़ा घबरा गया था, लेकिन paranoia की हद तक जाए बिना भी जो कुछ तर्कसंगत रूप से किया जा सकता है, वह मैं कर रहा हूँ, ऐसा लगता है
https://cooldowns.dev
https://depsguard.com
दूसरा वाला मैं maintain करता हूँ, और अगर पहले वाले के बारे में पहले पता होता तो शायद इसे बनाता ही नहीं
दोनों लगभग एक जैसा काम करते हैं, बस मेरा वाला Rust में है इसलिए थोड़ा overkill है
यहाँ सबसे अहम बात यह है कि सिर्फ npm install ही काफ़ी था
अगर compromise point
preinstallहो, तो install के बाद inspect करने की पारंपरिक सोच तुरंत ढह जाती हैक्योंकि तब तक payload को execute होने का मौका मिल चुका होता है
यह बात agents, CI, ephemeral sandbox environments में और दिलचस्प हो जाती है; exposure time छोटा हो तब भी, अगर installs अपने-आप बार-बार होते रहें, तो compromise होना आसान है
एक और ध्यान देने वाली बात यह है कि यह payload सिर्फ secrets पर नहीं, बल्कि AI tooling settings पर भी निशाना साध रहा था
shell profile tampering ऐसा रास्ता बन सकती है जिससे अगला coding assistant पढ़ने वाला context दूषित हो जाए
इस नज़रिये पर AgentSH के काम के साथ https://www.canyonroad.ai/blog/the-install-was-the-attack/ में ज़्यादा विस्तार से लिखा है
आखिरकार आप real binary तो चलाने वाले ही हैं
और सख्ती से देखें तो install से पहले package को manually download करके inspect भी किया जा सकता है; अगर install program के behavior और scope की गहरी समझ नहीं है, तो malicious code को download और unpack करने की प्रक्रिया पर यूँ ही भरोसा करना और भी अजीब है
Russian locale kill switch — यह एक साथ साहसी भी लगता है और डरपोक भी
Discretion is the better part of valorजैसी हर तरह की कहावत याद आ जाती हैकुल मिलाकर यह अपने ही पैर पर कुल्हाड़ी न मारने वाला रवैया लगता है
Vault7leak में भी यह था कि NSA और CIA source छिपाने के लिए ऐसे traces जानबूझकर छोड़ते हैं, और दूसरे state actors भी यह technique आसानी से इस्तेमाल कर सकते हैंबहुत खुला हुआ misdirection trace लगता है, लेकिन साथ ही यह धारणा भी मज़बूत करता है कि कोई state actor शामिल था
KeePass user बनकर रहो तो ऐसा stress काफ़ी कम हो जाता है
पिछले 5 सालों में भी local infra पर KeePass इस्तेमाल करके मैंने कई security incidents से बचाव किया है
ऐसा नहीं कि KeePass access tool में यह असंभव हो, तो फर्क आखिर क्या है, यह साफ़ नहीं है
अब तक मानता रहा कि यह संभव नहीं होगा, लेकिन सच कहूँ तो मैंने गहराई से देखा नहीं
अगर दो devices offline रहते हुए अलग-अलग password जोड़ें और बाद में फिर online हों, तो क्या होता है?
backup encrypt करते हैं तो उसका password कहाँ रखें, और cloud provider का password कहाँ रखें?
इस attack में खास तौर पर प्रभावशाली बात यह है कि attackers को GitHub down न होने वाले timing से बिल्कुल मेल बैठाना पड़ा
https://mrshu.github.io/github-statuses/
इसलिए मैं third-party password managers इस्तेमाल ही नहीं करता
क्योंकि आपको लगातार भरोसा करना पड़ता है कि वे security, updates, backups जैसी चीज़ें सही से संभालेंगे
मैंने खुद एक stateless password generator बनाया है, इसलिए devices के बीच data backup या sync की ज़रूरत ही नहीं पड़ती
इसमें बहुत लंबा और मजबूत master password, service name और username देकर उपयुक्त parameters के साथ scrypt hash चलाया जाता है, जिससे brute force व्यावहारिक रूप से असंभव हो जाता है
अहम accounts पर 2FA भी साथ में इस्तेमाल करता हूँ