TL; ड
अप्रिल १ र मे ३, २०२६ को बीचमा, एकल npm प्रकाशक, user0001, अप्रमाणित Gmail ठेगानासँग दर्ता गरिएको tanvisoul9@gmail.com, जानाजानी नरम, पूर्वाधार-ध्वनियुक्त नामहरू सहित छ प्याकेजहरू चुपचाप अगाडि बढायो: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, र node-env-resolve.
पछिल्ला दुई संस्करणहरू node-env-resolve, १.०.७ र १.०.८, मे २ मा Xygeni को मालवेयर अर्ली वार्निङ (MEW) प्रणाली द्वारा फ्ल्याग गरिएको थियो र मे ३ मा दुर्भावनापूर्ण पुष्टि भयो।
यो इम्प्लान्ट जे छैन त्यसको लागि असामान्य छ: त्यहाँ कुनै टेलिग्राम बटहरू छैनन्, कुनै OAST कलब्याकहरू छैनन्, कुनै अस्पष्टता, र स्थापनाको समयमा AWS प्रमाणपत्रहरू हडप्ने कुनै प्रयास छैन। बरु, postinstall.js सुरु हुने HKCU रन कुञ्जी प्रयोग गरेर विन्डोज बुट-पर्सिस्टेन्स प्रविष्टि रोप्छ wscript.exe VBS स्टब विरुद्ध। त्यसपछि यसले एक अलग Node.js एजेन्ट उत्पन्न गर्छ जसले माइक्रोफोन क्याप्चर, ब्राउजर-इतिहास चोरी, स्क्रिनसटिङ, र माउस/किबोर्ड सिमुलेशनको लागि मोड्युलहरू बन्डल गर्दछ।
हामी यो क्लस्टरलाई देवट्याप, किट पछि यो विकासकर्ताको मेसिनमा चलिरहेको छ।
सबै छ प्याकेजहरू लेख्ने समयमा npm मा लाइभ थिए। हामीले तिनीहरूलाई रजिस्ट्रीको दुरुपयोग च्यानलमा पेश गरेका छौं। डिफेन्डरहरूले प्रकाशकबाट हटाउन बाँकी रहेका कुनै पनि स्थापनाहरू तान्नु पर्छ।
क्लस्टर: छ प्याकेजहरू, एक प्रकाशक
प्रकाशक खाता user0001 अप्रमाणित छ। यसमा कुनै SCM प्रमाणीकरण, कुनै डोमेन-बाउन्ड इमेल छैन, र कुनै पूर्व इतिहास छैन। Gmail ह्यान्डल tanvisoul9 हामीले फेला पार्न सक्ने कुनै पनि अन्य npm प्रकाशक रेकर्डमा देखा पर्दैन।
सबै छवटा प्याकेजहरूले एउटै मर्मतकर्तालाई सूचीबद्ध गर्छन्, एउटै खाताबाट प्रकाशित गरिएका थिए, र एउटै साझा गर्छन् package.json बोइलरप्लेट। छैन repository, no homepage, र नहीं description एउटै लाइन भन्दा लामो।
नामकरण रणनीति रोचक भाग हो। क्लासिक निर्भरता-भ्रम वा टाइपोस्क्वाट अभियान जस्तो नभई, यी मध्ये कुनै पनि नामले कुनै विशिष्ट अपस्ट्रीम पुस्तकालयलाई लक्षित गर्दैन। बरु, तिनीहरूलाई वास्तविकमा गायब हुन क्यालिब्रेट गरिन्छ। package.json or npm ls आउटपुट।
| प्याकेज | पहिलो प्रकाशित | पछिल्लो संस्करण | संस्करण | क्लस्टरमा भूमिका |
|---|---|---|---|---|
| सेन्ट्रलगगर | 2026-04-01 12:46 UTC | 1.0.9 | १०, १.०.० देखि १.०.९ सम्म | क्लस्टरको "लगिङ युटिलिटी" आवरण; सबैभन्दा पहिले प्रकाशित |
| डोम-युटिल्स-लाइट | 2026-04-14 07:36 UTC | 1.0.3 | 3 | जेनेरिक DOM-सहायक आवरण |
| नोड-फेच-लाइट | 2026-04-19 10:22 UTC | 1.0.2 | 3 | नक्कल नोड-फेच परिवार |
| कनेक्टर-एजेन्ट | 2026-04-25 05:12 UTC | 1.0.0 | 1 | जेनेरिक नाम "एजेन्ट" |
| नोड-जिप-रनटाइम | 2026-04-25 05:17 UTC | 1.0.0 | 1 | नक्कल गर्ने नेटिभ-मोड्युल निर्माण उपकरण |
| नोड-एनभी-रिजल्भ | 2026-04-25 05:21 UTC | 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}\"" /fwscript.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/ tree मा तीन मोड्युलहरू छन् जसको नामले मात्र कथा बताउँछ: audioCapture.js, browserHistory.js, र systemInfo.js.
चरणबद्ध समयमा समाधान गरिएको रनटाइम निर्भरता सूची npm install, तिनीहरूलाई पुष्टि गर्दछ।
यो दृष्टिकोणले अराजक घटनालाई नियन्त्रित प्रतिक्रियामा परिणत गर्छ।
आँखा चिम्लेर प्रतिक्रिया जनाउनुको सट्टा, टोलीहरूले यससँग काम गर्छन् स्पष्ट प्राथमिकता र द्रुत उपचार.
| निर्भरता | यस सन्दर्भमा यो केको लागि हो |
|---|---|
| स्क्रिनसट-डेस्कटप | आवधिक स्क्रिन क्याप्चर |
| @नट-ट्री-फोर्क/नट-जेएस | माउस र किबोर्ड स्वचालन / इनपुट सिमुलेशन |
| राम्रो-sqlite3 | क्रोम, एज, र फायरफक्स इतिहास SQLite डाटाबेसहरूको प्रत्यक्ष पठन |
| एडम-जिप | बन्डलिङले उत्खनन गर्नुअघि कलाकृतिहरू सङ्कलन गर्यो |
| तेज | स्क्रिनसटहरू र छवि कलाकृतिहरूको आकार परिवर्तन / कम्प्रेस गर्दै |
| socket.io-क्लाइन्ट | निरन्तर द्विदिशात्मक C2 च्यानल |
| नोड-मेसिन-आईडी | पीडित ट्र्याकिङको लागि स्थिर प्रति-होस्ट फिंगरप्रिन्ट |
systemInfo.js कलहरू os.networkInterfaces() पहिलो बिकन अघि थप औंठाछापको लागि।
अडियो क्याप्चर किन उत्कृष्ट संकेत हो
MEW मा हामीले ट्राइज गर्ने धेरैजसो npm RAT हरू स्थापना-समय गोप्य चोरीमा रोकिन्छन्। तिनीहरूले पढ्छन् ~/.npmrcपढ्नुहोस ~/.aws/credentials, स्क्र्याप process.env, वेबहुकमा पोस्ट गर्नुहोस्, र बाहिर निस्कनुहोस्। त्यो स्म्याश-एन्ड-ग्र्याब आर्थिक मोडेलमा मिल्छ। प्रमाणपत्रहरूको आधा-जीवन छोटो हुन्छ, र आक्रमणकारीले छिटो मुद्रीकरण गर्न आवश्यक छ।
node-env-resolve आकारमा फरक छ।
रिबुट बाँच्नको लागि पर्सिस्टन्स सेट अप गरिएको छ। एजेन्ट अलग्गै चल्छ र लामो समयसम्म चल्छ wscript.exe। यसले बोक्ने किट विकासकर्ताको मेसिनमा हुनको लागि हो, समातेर छोड्नको लागि होइन: माइक्रोफोन रेकर्डर, किबोर्ड/माउस ड्राइभर, पूर्ण ब्राउजर-इतिहास इन्जेस्ट, स्क्रिन क्याप्चर, र कन्फिगर गर्न मिल्ने C2 मा फिर्ता अन्तरक्रियात्मक Socket.IO च्यानल।
विशेष गरी माइक्रोफोन क्याप्चर भनेको यो अभियानले पार गर्ने सीमा हो जुन धेरैजसो npm मालवेयरले पार गर्दैन।
विकासकर्ता कार्यस्थान, बढ्दो रूपमा, त्यो कार्यस्थान पनि हो जहाँ विकासकर्ताहरूले स्ट्यान्ड-अपहरू, ग्राहक कलहरू, डिजाइन छलफलहरू, र अन-कल ब्रिजहरू लिन्छन्। माइक्रोफोन रेकर्ड गर्ने इम्प्लान्ट वास्तवमा विकासकर्ताको npm टोकन पछि हुँदैन। यो ल्यापटपको अगाडि विकासकर्ताले भनेको कुरा पछि हुन्छ।
त्यो क्षमता सेट, साथै अस्पष्टताको अभाव र कुनै पनि आकर्षक स्थापना-समय एक्सफिल्ट्रेसनको अनुपस्थिति, अवसरवादी प्रमाणपत्र चोरीको सट्टा लक्षित पहुँचको लागि पूर्व-स्थितिको रूपमा पढिन्छ।
हामी यसबाट मात्र श्रेय दाबी गरिरहेका छैनौं। हामी सञ्चालन प्रोफाइललाई ध्यान दिइरहेका छौं।

आठ-दिने पुनरावृत्ति तालिकामा 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 स्ट्याक छैन, र पाठ्यपुस्तकभन्दा बाहिर कुनै नयाँ दृढता चाल छैन। HKCU रन कुञ्जी। यो एक सक्षम इन्टिग्रेटर हो, उपकरण लेखक होइन।
हामीले प्रकाशित कलाकृतिहरू भित्र गैर-अंग्रेजी स्ट्रिङहरू, इम्बेडेड टिप्पणीहरू, लोकेल डेटा, वा कम्पाइलर-आउटपुट टाइमजोन फिंगरप्रिन्टहरू फेला पारेनौं।
हामीले पहिले नै ट्र्याक गरेका अघिल्ला अभियानहरूसँग कोड ओभरल्यापको लागि जाँच गर्यौं, जसमा समावेश छ शाई-हुलुद, ओलिभियन, बिल्डकाइट, र हालैको हेईबाई / claude-code-best एन्थ्रोपिक-CLI क्लोन परिवार। हामीले कुनै पनि फेला पारेनौं: कुनै साझा C2 ढाँचाहरू छैनन्, कुनै साझा फाइल लेआउटहरू छैनन्, र कुनै साझा मुहावराहरू छैनन्।
हामी के भन्ने छैनौं: यो एक राज्य अभिनेता हो, एक ज्ञात समूह हो, वा भौगोलिक रूपमा कुनै विशेष देशसँग बाँधिएको छ।
सञ्चालन प्रोफाइल विकासकर्ता-कार्यस्थान निगरानी गर्ने सानो, मध्यम कुशल टोलीसँग मिल्दोजुल्दो छ। यो सम्भवतः पहुँचको डाउनस्ट्रीम प्रयोग मार्फत आर्थिक रूपमा प्रेरित छ, तर सम्भवतः छुट्टै खरीददारको लागि सेवाको रूपमा जासूसी पनि हुन सक्छ।
दुई अप्रत्यक्ष बुँदाहरूले समर्थन गर्छन्: ध्यान खिच्ने एक्सफिल्ट्रेसन मेकानिक्सबाट बच्ने जसले क्लस्टरलाई छिटो जलाउँछ, जस्तै टेलिग्राम बटहरू, oastify.com, वा क्यानरीटोकनहरू, र जानाजानी नरम प्याकेज नामहरू, जसले छोटो उच्च-भोल्युम स्पाइकको सट्टा शान्त लामो-पुच्छर स्थापनाहरूलाई समर्थन गर्दछ।
सम्झौता र पत्ता लगाउने सूचकहरू
| प्याकेजहरू र प्रकाशक | |
|---|---|
| क्षेत्र | मूल्य |
| npm प्रकाशक | user0001 |
| प्रकाशकको इमेल | tanvisoul9@gmail.com, अप्रमाणित |
| प्याकेजहरू | सेन्ट्रलगगर, डोम-युटिल्स-लाइट, नोड-फेच-लाइट, कनेक्टर-एजेन्ट, नोड-जिप-रनटाइम, नोड-एनभी-रिजल्भ |
| दुर्भावनापूर्ण पुष्टि भयो | नोड-एनभी-रिजल्भ@१.०.७, नोड-एनभी-रिजल्भ@१.०.८ |
| होस्ट कलाकृतिहरू | |
|---|---|
| प्रकार | मूल्य |
| दृढता कुञ्जी | HKCU\सफ्टवेयर\माइक्रोसफ्ट\विन्डोज\करेन्टभर्सन\रन |
| दृढता मान | चर नाम; wscript.exe फारमको डेटा " \\ .vbs" |
| हुक जडान गर्नुहोस् | postinstall: प्याकेज म्यानिफेस्टमा नोड postinstall.js |
| इम्प्लान्ट मोड्युलहरू | src/audioCapture.js, src/browserHistory.js, src/systemInfo.js |
| स्टेजिङ निर्देशिका | परियोजनाको node_modules बाहिर INSTALL_DIR समाधान गरियो; स्थापनाको समयमा postinstall.js द्वारा स्थान सेट गरियो |
| नेटवर्क | |
|---|---|
| प्रकार | मूल्य |
| C2 यातायात | socket.io-client, निरन्तर द्विदिशात्मक च्यानल |
| C2 अन्त्यबिन्दु | SERVER_URL वातावरण चर मार्फत एजेन्टलाई प्रदान गरिएको; प्रकाशित कलाकृतिहरूमा हार्ड-कोड गरिएको छैन। |
पत्ता लगाउने नोटहरू
C2 अन्त्य बिन्दुको आवश्यकता बिना नै दुई नियमहरूले यो परिवारलाई समात्छन्।
पहिले, आन्तरिक कार्य गर्ने पोस्टइन्स्टल स्क्रिप्टहरूलाई फ्ल्याग गर्नुहोस् npm install प्याकेजको आफ्नै निर्देशिका बाहिरको बाटोमा। कुनै पनि वैध पूर्व-निर्मित डाउनलोडर, जस्तै node-gyp पुनर्निर्माण वा पूर्वनिर्मित-बाइनरी डाउनलोडरहरू, प्याकेज भित्र वा प्लेटफर्ममा लेख्छ-standard प्रमाणित ह्यासहरू सहितको क्यास मार्गहरू। यसले भर्खरै सिर्जना गरिएकोमा लेख्दैन INSTALL_DIR डिस्कमा अन्यत्र।
दोस्रो, जारी गर्ने पोस्टइन्स्टल स्क्रिप्टहरूलाई फ्ल्याग गर्नुहोस् reg add HKCU\…\Run संग wscript.exe लन्चरको रूपमा। यो npm प्याकेजबाट अनिवार्य रूपमा कहिल्यै वैध हुँदैन। यसलाई फ्ल्याग गर्नुहोस् र क्वारेन्टाइन गर्नुहोस्।
पुष्टि हुनुभन्दा पहिले अर्को सिबलिङ प्याकेज पत्ता लगाउनको लागि तेस्रो ह्युरिस्टिक उपयोगी छ: कुनै पनि नभएको नयाँ npm प्रकाशक SCM प्रमाणीकरण, Gmail इमेल, होइन repository क्षेत्र, र एक अर्काको दिन भित्र प्रकाशित धेरै छोटो, सामान्य, पूर्वाधार-ध्वनि प्याकेज नामहरू, आफैंमा, म्यानुअल समीक्षाको वारेन्टी गर्न पर्याप्त छन्।
npm रजिस्ट्रीमा रिपोर्ट गरियो। प्रकाशक खाता हटाइएपछि हामी यो पोस्ट अपडेट गर्नेछौं।






