Axios के npm पर compromise होने से remote access trojan वितरित हुआ
(stepsecurity.io)- व्यापक रूप से उपयोग होने वाले axios HTTP client के दो malicious versions npm पर प्रकाशित किए गए, जो install होने पर remote access trojan (RAT) वितरित करते हैं
- हमलावर ने maintainer account credentials की चोरी के जरिए GitHub Actions को bypass किया और malicious package को manually upload किया
- malicious versions में fake dependency
plain-crypto-js@4.2.1शामिल थी, जोpostinstallscript से RAT install करती है और निशान मिटा देती है - RAT macOS, Windows, Linux तीनों को संक्रमित करता है और C2 server (
sfrclak.com:8000) से संपर्क करके अतिरिक्त payload डाउनलोड करता है - npm और GitHub ने तेज़ी से malicious versions हटा दिए, लेकिन supply chain security मज़बूत करने और credentials की सुरक्षा का महत्व फिर सामने आया
axios npm supply chain attack का overview
- 31 मार्च 2026 को, व्यापक रूप से उपयोग होने वाली axios HTTP client library के दो malicious versions (
axios@1.14.1,axios@0.30.4) npm पर प्रकाशित किए गए - हमलावर ने axios के प्रमुख maintainer के npm credentials चुराकर GitHub Actions CI/CD pipeline को bypass किया और malicious packages manually publish किए
- दोनों versions में
plain-crypto-js@4.2.1नाम की fake dependency डाली गई, यह packagepostinstallscript के जरिए remote access trojan (RAT) install करता है - RAT macOS, Windows, Linux सभी को target करता है और C2 (Command and Control) server (
sfrclak.com:8000) से संपर्क कर second-stage payload डाउनलोड करता है - install के बाद यह malicious code और उसके निशान हटा देता है और साफ
package.jsonसे replace कर forensic detection से बचता है
attack timeline
- 30 मार्च 05:57 UTC:
plain-crypto-js@4.2.0(normal version) प्रकाशित - 30 मार्च 23:59 UTC:
plain-crypto-js@4.2.1(malicious version) प्रकाशित,postinstallhook जोड़ा गया - 31 मार्च 00:21 UTC:
axios@1.14.1प्रकाशित, malicious dependency डाली गई - 31 मार्च 01:00 UTC:
axios@0.30.4प्रकाशित, वही malicious dependency डाली गई - 31 मार्च 03:15 UTC: npm ने दोनों malicious versions हटा दिए
- 31 मार्च 04:26 UTC: npm ने
plain-crypto-jsको security holder stub (0.0.1-security.0) से replace किया
axios overview
- axios JavaScript ecosystem में सबसे व्यापक रूप से उपयोग होने वाले HTTP clients में से एक है, और Node.js व browser दोनों में इस्तेमाल होता है
- साप्ताहिक downloads 30 करोड़ से अधिक हैं, इसलिए केवल एक malicious release भी व्यापक नुकसान की संभावना रखती है
- सामान्य developers के लिए
npm installके दौरान malicious code install होना पहचानना मुश्किल है
attack stages
-
चरण 1 — maintainer account takeover
- हमलावर ने
jasonsaaymannpm account takeover किया और email कोifstap@proton.meमें बदल दिया - इसके बाद 1.x और 0.x release branches दोनों में malicious builds प्रकाशित किए
- सामान्य release GitHub Actions के OIDC Trusted Publisher के जरिए प्रकाशित होती हैं, लेकिन
axios@1.14.1manual publish था, इसलिए उसमेंgitHeadऔर OIDC signature नहीं था - अनुमान है कि हमलावर ने लंबे समय तक मान्य npm access token का उपयोग किया
- हमलावर ने
-
चरण 2 — malicious dependency की pre-deployment
plain-crypto-js@4.2.1कोnrwise@proton.meaccount से प्रकाशित किया गया- यह
crypto-jsका भेष धारण करता है और वही description व repository URL इस्तेमाल करता है - इसमें
"postinstall": "node setup.js"hook शामिल है, जो install के समय अपने-आप चलता है - attack के बाद
package.mdकोpackage.jsonसे replace कर सबूत मिटाने की तैयारी की गई
-
चरण 3 — axios में dependency injection
plain-crypto-js@^4.2.1को runtime dependency के रूप में जोड़ा गया- code में इसे एक बार भी import नहीं किया गया → phantom dependency
npm installके समय यह अपने-आप install होकरpostinstallscript चलाता है
RAT dropper (setup.js) analysis
-
obfuscation techniques
- strings को array
stq[]में encrypt करके रखा गया और_trans_1(XOR) व_trans_2(Base64+reverse) से decrypt किया गया - C2 URL है
http://sfrclak.com:8000/6202033 - decrypted strings में OS identifiers (
win32,darwin), file paths, shell commands आदि शामिल हैं
- strings को array
-
platform-specific payloads
-
macOS
- AppleScript को
/tmpमें लिखकरosascriptसे चलाया जाता है - C2 से RAT binary लेकर
/Library/Caches/com.apple.act.mondमें save और execute किया जाता है - file name को Apple system daemon जैसा दिखाने के लिए चुना गया
- AppleScript को
-
Windows
- PowerShell path खोजने के बाद
%PROGRAMDATA%\\wt.exeमें copy किया जाता है - VBScript के जरिए C2 से PowerShell RAT download और execute किया जाता है
- temporary files (
.vbs,.ps1) execution के बाद delete कर दिए जाते हैं
- PowerShell path खोजने के बाद
-
Linux
curlसे/tmp/ld.pydownload करnohup python3से चलाया जाता है/tmp/ld.pyfile बनी रहती है- तीनों platforms में
packages.npm.org/product0~2POST body का उपयोग कर वैध npm traffic जैसा भेष बनाया जाता है
-
-
self-deletion and concealment
setup.jsऔरpackage.jsondelete किए जाते हैंpackage.mdकोpackage.jsonसे replace कर normal package जैसा भेष बनाया जाता है- इसके बाद
npm auditया manual review से detection संभव नहीं रहता - हालांकि
node_modules/plain-crypto-js/का मौजूद होना खुद infection का सबूत है
StepSecurity Harden-Runner के जरिए execution verification
- Harden-Runner GitHub Actions में network, process, और file events को real time में log करता है
axios@1.14.1install के दौरान C2 से दो connections (curl,nohup) detect किए गए- पहला connection
npm installशुरू होने के 2 सेकंड बाद हुआ - दूसरा 36 सेकंड बाद हुआ और background process के रूप में चलता रहा
- पहला connection
- process tree analysis के अनुसार
nohupprocess PID 1 (init) के अधीन orphan process के रूप में रहकर लगातार चलता रहा - file event logs में
package.jsonको दो बार overwrite किया गया- पहली बार: install के दौरान malicious version लिखा गया
- दूसरी बार: 36 सेकंड बाद साफ stub से replace किया गया
indicators of compromise (IOC)
-
malicious npm packages
- axios@1.14.1 · shasum: 2553649f232204966871cea80a5d0d6adc700ca
- axios@0.30.4 · shasum: d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71
- plain-crypto-js@4.2.1 · shasum: 07d889e2dadce6f3910dcbc253317d28ca61c766
-
network
- C2 domain: sfrclak.com
- IP: 142.11.206.73
- URL:
http://sfrclak.com:8000/6202033
-
file paths
- macOS:
/Library/Caches/com.apple.act.mond - Windows:
%PROGRAMDATA%\\wt.exe - Linux:
/tmp/ld.py
- macOS:
-
attacker accounts
jasonsaayman(compromised maintainer)nrwise(attacker-created account)
-
safe version
- axios@1.14.0 (normal)
impact verification and response procedure
npm list axiosयाpackage-lock.jsonमें 1.14.1 / 0.30.4 की जाँच करेंnode_modules/plain-crypto-jsकी मौजूदगी जाँचें- OS-specific RAT files मिलने पर system को पूर्ण रूप से compromised मानें
- CI/CD logs में इन versions के install history की जाँच करें और सभी secrets व tokens rotate करें
recovery steps
- axios को safe version (1.14.0 या 0.30.3) पर pin करें
plain-crypto-jsfolder हटाकरnpm install --ignore-scriptsके साथ दोबारा install करें- RAT के निशान मिलें तो system rebuild करें
- सभी credentials (AWS, SSH, CI/CD आदि) rotate करें
- CI/CD pipeline की जाँच करें और secrets बदलें
- automated builds में
--ignore-scriptsoption का उपयोग करें - C2 domain/IP को firewall या
/etc/hostsसे block करें
StepSecurity Enterprise features
-
Harden-Runner
- GitHub Actions में network egress whitelist लागू करता है
- abnormal traffic को block और log करता है
sfrclak.com:8000connection को पहले से block किया जा सकता है
-
Dev Machine Guard
- developer PCs पर installed npm packages की real-time monitoring
axios@1.14.1,0.30.4installed systems की तुरंत पहचान
-
npm Package Cooldown Check
- newly published packages पर अस्थायी install block period लागू करता है
plain-crypto-js@4.2.1जैसी तेज़ malicious publishing को detect कर सकता है
-
Compromised Updates Check
- real-time malicious package DB के आधार पर PR merge को block करता है
axios@1.14.1,plain-crypto-js@4.2.1तुरंत register किए गए
-
Package Search
- पूरे organization के PRs और repositories में किसी specific package के introduction points खोजता है
- impact range (repository, team, PR) तुरंत समझी जा सकती है
-
AI Package Analyst
- npm registry की real-time monitoring और behavior-based malicious detection
- दोनों malicious versions को publish होने के कुछ मिनटों में detect किया गया
-
Threat Center Alert
- attack summary, IOC, response procedure सहित threat intel alert प्रदान करता है
- SIEM integration के जरिए real-time visibility मिलती है
acknowledgements
- axios maintainers और community ने GitHub issue #10604 के जरिए तेज़ी से response दिया
- GitHub ने compromised account suspend किया और npm ने malicious versions हटाकर security holder लागू किया
- maintainers, GitHub, और npm के coordinated response से दुनिया भर के developers को होने वाला नुकसान कम किया गया
2 टिप्पणियां
मैंने कभी नहीं सोचा था कि इस स्तर का पैकेज भी compromise हो सकता है, लेकिन axios तो उम्मीद से भी बढ़कर निकला।
Hacker News की राय
npm, bun, pnpm, uv सभी अब पैकेज के लिए न्यूनतम रिलीज़ अवधि सेट करने को सपोर्ट करते हैं
मैंने
~/.npmrcमेंignore-scripts=trueजोड़ रखा है, और केवल इस सेटिंग से भी कमजोरी को कम किया जा सकता थाbun और pnpm डिफ़ॉल्ट रूप से lifecycle scripts नहीं चलाते
हर पैकेज मैनेजर के लिए सेटिंग के उदाहरण इस प्रकार हैं:
exclude-newer = "7 days"min-release-age=7minimum-release-age=10080minimumReleaseAge = 604800दिलचस्प बात यह है कि सभी में समय की इकाइयाँ अलग-अलग हैं
अगर आप LLM agent का उपयोग करते हैं, तो इस सेटिंग की वजह से failure हो सकता है, इसलिए
AGENTS.mdयाCLAUDE.mdमें इससे जुड़ा निर्देश जोड़ना चाहिएtimeoutकी जगहtimeoutMinutesmin-release-age=7 # daysवास्तव में लागू न हो, ऐसा संभव है~/.yarnrc.ymlमेंnpmMinimalAgeGate: "3d"सेट किया जा सकता हैयह सुनकर झटका लगा कि Axios supply chain attack का शिकार हुआ
Axios के अंदर खुद malicious code नहीं था, लेकिन
plain-crypto-js@4.2.1नाम की एक नकली dependency inject की गई, जिसने postinstall script चलाकर RAT (remote access trojan) इंस्टॉल कियाpnpm या bun की तरह postinstall scripts को manual approval के बाद चलाने वाले users के लिए यह राहत की बात है
यह दावा भी सामने आया कि package managers एक failed experiment हैं
SQLite जैसी high-quality C libraries हैं जो एक ही
.cfile में मिल जाती हैं, और इस तरीके से transitive dependency की समस्या से बचा जा सकता हैज़्यादातर attack surface ऐसी indirect dependencies से ही आती है
OpenSSL तक code quality issues की वजह से rewrite किया जा रहा है, और JS में standard library को बढ़ाना कठिन होने से polyfills की भरमार है
इसके बजाय npm जैसे repositories में quality standards कड़े करने और केवल ज़िम्मेदार maintainers को रजिस्टर करने देने का सुझाव दिया गया
मज़ाक में कहा गया कि दिन की शुरुआत इस आत्म-व्यंग्य भरे अभिवादन से होती है: “आज कौन-सा npm पैकेज हैक हुआ होगा?”
Linux users को सलाह दी गई कि वे bwrap का इस्तेमाल करके npm, pip, cargo, gradle जैसी सभी build logic को sandbox करें
bwrap, Docker की तरह isolated environment देता है, लेकिन इसमें image की ज़रूरत नहीं होती. Flatpak भी इसी तकनीक पर आधारित है
server deployment में container hardening महत्वपूर्ण है, और CI/CD environment को untrusted zone की तरह ट्रीट करना अहम है
AI चलाते समय भी यही sandbox उपयोग करना अच्छा रहेगा
requireकरते ही वह चल सकता हैdependency समस्याएँ बार-बार देखकर यह चिंता जताई गई कि क्या Rust ecosystem भी कभी ऐसा ही कुछ झेलेगा
standard library को बहुत बड़ा बनाना आसान नहीं, लेकिन विश्वसनीय package quality assurance system की ज़रूरत है
AI की वजह से यह अतिरिक्त काम अब संभव हो गया है, और कुछ लोगों ने माना कि असल में यह पहले से ही किया जाना चाहिए था
NPM supply chain attacks के exposure को कम करने के लिए मुख्य नियम
--frozen-lockfileoption ही पर्याप्त सुरक्षा दे सकते हैं“ऐसे attacks से पूरी तरह बचना हो तो क्या करना चाहिए?” इस सवाल पर
यह राय आई कि Qubes OS पर जाना चाहिए, ताकि password manager और build environment को पूरी तरह अलग रखा जा सके
इसे रासायनिक प्रयोगशाला के PPE जैसा बताया गया—जैसे वहाँ सुरक्षा उपकरण चाहिए, वैसे ही development environment में isolation और protection चाहिए
pip भी पहले ही virtualenv के बाहर install को रोकना शुरू कर चुका है, और उम्मीद है कि आगे package managers sandbox के बाहर execution को मना करने वाला option देंगे
pnpm और bun अब डिफ़ॉल्ट रूप से postinstall scripts को ignore करते हैं, लेकिन npm अब भी उन्हें चलाता है
~/.npmrcमेंignore-scripts=trueसेट करना अच्छा हैnpm अभी भी हर हफ़्ते 8 करोड़ downloads दर्ज करता है
यह अटकल भी लगाई गई कि इस incident में credentials leak संभवतः LiteLLM के पहले वाले incident से जुड़ा हो सकता है
Python या Node.js का इस्तेमाल असुरक्षित लग सकता है, लेकिन वास्तव में यह एक व्यापक समस्या है