TL; ड
२०२६-०६-१५ र २०२६-०६-१६ को बीचमा एकल npm प्रकाशकले धक्का दिए छ प्याकेजहरू - जम्मा २६ संस्करणहरू — जसले प्रत्येकमा स्थापना-समय स्क्रिप्ट चलाउँछ npm install। प्रत्येक प्याकेजले README लाई "सौम्य" HackerOne / GitHub Bug Bounty अनुसन्धान कलाकृति घोषणा गर्दै पठाउँछ जसले "कहिल्यै" प्रमाणिक मानहरूलाई छुँदैन र "कुनै स्थिरता प्रदर्शन गर्दैन"। कोड अस्वीकरणसँग मेल खाँदैन। लिनक्स सीआई रनरहरूमा स्थापना हुकले वातावरणमा फिंगरप्रिन्ट गर्छ र क्लाउड इन्स्ट्यान्स-मेटाडेटा एन्डपोइन्ट प्रोब गर्छ; विन्डोजमा यसले उचाइ अनुरोध गर्दछ, यसरी चल्छ SYSTEM, र बाह्य होस्टमा कमाण्ड च्यानल खोल्छ। अहिले खोज्नको लागि एउटा सूचक C2 होस्ट हो। 173.255.233[.]239गम्भीरता: उच्चप्रभावित पारिस्थितिक प्रणाली: npm. नामहरू निरन्तर-एकीकरण निर्भरता आवाजमा मिसिन्छन् (metrics-pipeline-d8k2, event-metrics-q3x7, pkg-telemetry-r4f9, र तीन भाइबहिनीहरू)।
आक्रमण: यो कसरी काम गर्छ
क्लस्टरमा भएका प्रत्येक प्याकेज उस्तै तरिकाले बनाइएको छ। package.json एउटै आदेशलाई दुई जीवनचक्रमा तार गर्दछ hooks:
{ "scripts": { "preinstall": "node run.js", "postinstall": "node run.js" } } दुबैमा चलिरहेको छ पूर्व-स्थापना र स्थापना पछि पछि स्थापना चरणहरू असफल भए पनि वा नभए पनि पेलोड फायर हुन्छ भन्ने अर्थ हो। रन.जेएस आफैंमा दस-लाइन प्लेटफर्म डिस्प्याचर हो:
// Platform dispatcher — runs beaconNN.js on Windows, beacon_linux.js on Linux. // GitHub Bug Bounty authorized research. Contact: nicholas@curran.tech 'use strict'; const { execFileSync } = require('child_process'); const path = require('path'); const node = process.execPath; const script = process.platform === 'win32' ? path.join(__dirname, 'beacon34.js') : path.join(__dirname, 'beacon_linux.js'); try { execFileSync(node, [script], { stdio: 'inherit', timeout: 90000 }); } catch (e) {} त्यसपछि व्यवहार अपरेटिङ सिस्टम अनुसार फरक हुन्छ। सबै छवटा प्याकेजहरूमा एउटै दुई टुक्राहरू हुन्छन् — रन.जेएस र प्लेटफर्म बीकनहरू - त्यसैले तिनीहरू छवटा फरक उपकरणहरूको सट्टा आदानप्रदानयोग्य ड्रपरहरू हुन्। तिनीहरू बीचको एक मात्र अर्थपूर्ण भिन्नता प्रकाशन ताल हो: चार नामहरू एक पटक पठाइयो, जबकि दुई प्रत्येक ३०-६० मिनेटमा घण्टाको लागि पुन: जारी गरियो, जसले पुरानोहरू तानिए पनि स्थापनाकर्ताहरू र रिजल्भरहरूको अगाडि ताजा प्रकाशित संस्करण राख्छ।
लिनक्समा (बीकन_लिनक्स.जेएस) स्क्रिप्ट प्रोफाइलहरू जहाँ यो चलिरहेको छ। यसले वातावरण चरहरूको नाम गणना गर्दछ, फाइलहरू पढ्छ /प्रोक, जाँच गर्दछ डकर.सोक, र दौडन्छ होस्टनाम र म को हु। त्यसपछि यसले AWS कन्टेनर इन्स्ट्यान्स-मेटाडेटा एन्डपोइन्टमा HTTP अनुरोध जारी गर्दछ। २१७.२३.१४ [।] २७ — लिङ्क-लोकलले ECS कार्य प्रश्नहरूलाई सम्बोधन गर्दछ जसले यसको आफ्नै कन्फिगरेसन र छोटो अवधिको भूमिका प्रमाणहरू (IMDS, उदाहरण मेटाडेटा सेवा) प्राप्त गर्दछ। परिणामहरू अभियानको सङ्कलकलाई मा पोस्ट गरिन्छ। २१७.२३.१४ [।] २७.
विन्डोजमा (बीकन१८.जेएस / बीकन१८.जेएस) प्याकेजले यसको होस्ट प्रोफाइल भन्दा धेरै काम गर्छ। फ्ल्याग गरिएको कोडले रजिस्ट्री कुञ्जी थप्छ एमएस-सेटिङहरू ह्यान्डलर भएको प्रतिनिधिकार्यान्वयनगर्नुहोस् मान — एक ज्ञात प्रयोगकर्ता-खाता-नियन्त्रण बाइपास जसले सुरु गरिएको प्रक्रियालाई प्रम्प्ट बिना नै माथि उठाएर चलाउन दिन्छ। यसले PowerShell लाई - कार्यान्वयन नीति बाइपास र अभिव्यक्ति आह्वान गर्नुहोस्, मा कार्यान्वयन गर्दछ NT प्राधिकरण\प्रणाली सन्दर्भ, र आदेशहरूको लागि बाह्य होस्टको सर्वेक्षण गर्दछ। विन्डोज कमाण्ड च्यानल a मा चल्छ क्लाउडफ्लेयर सुरुङ, व्यास-सिक्का-सीमा-अभिभावक.trycloudflare[.]com:443, मा फर्कनु ७९.१४१.१६१[.]५८:१२५६, तीन अन्तिम बिन्दुहरू प्रयोग गर्दै: /c2/पोल आदेश ल्याउन, /c2/आउट आउटपुट फिर्ता गर्न, /c2/eof बन्द गर्न।
यहाँ नयाँ के छ: छलावरणको रूपमा अस्वीकरण
उपन्यास तत्व पेलोड होइन - स्थापना-हुक जासूसी र विन्डोज एलिभेसन दुवै राम्रोसँग दस्तावेज गरिएका छन्। यो आवरण कथा हो। प्रत्येक प्याकेजमा एक README हुन्छ जुन जिम्मेवार-प्रकटीकरण कलाकृतिको रूपमा पढिन्छ:
# @ncurran/sandbox-recon-880538 — authorized npm-sandbox security research यो एक बेनाग लेखकको आफ्नै `@ncurran` दायरा अन्तर्गत प्रकाशित प्याकेज अधिकृत HackerOne / GitHub बग बाउन्टी संलग्नता (npm दायरामा छ)।
स्थापना गर्दा यसले निरीक्षण गर्छ यसको आफ्नै कार्यान्वयन वातावरण … वातावरण-चर
मुख्य नामहरू मात्र ... राम्रोसँग चिनिएको छ कि छैन भनेर जाँच गर्छ क्लाउड मेटाडेटा एन्डपोइन्टहरू हो पहुँचयोग्य ... यसले केवल स्थिति कोडहरू, प्रतिक्रिया लम्बाइहरू, र रिपोर्ट गर्दछ ह्यासहरू — कहिल्यै कुनै पनि प्रमाण, टोकन मान, वा तेस्रो-पक्ष डेटा। यसले कुनै पनि कार्य गर्दैन दृढता, कुनै पार्श्व चाल, र कुनै विनाशकारी कार्य छैन।
त्यो पाठमा भएका तीनवटा दावीहरू पठाइएको कोडद्वारा विरोधाभासपूर्ण छन्। README ले "कुनै दृढता छैन" भन्छ, तर Windows बीकनले रजिस्ट्री-आधारित उचाइ कुञ्जी लेख्छ। यसले "कहिल्यै कुनै पनि प्रमाण, टोकन मान" भन्छ, तर Windows पथले मनमानी रूपमा प्राप्त गरिएका आदेशहरू चलाउँछ। प्रणाली, जसले के पढिन्छ वा फिर्ता गरिन्छ भन्ने कुरामा त्यस्तो कुनै सीमा राख्दैन। यसले प्याकेजको नाम पनि दिन्छ — @ncurran/स्यान्डबक्स-रेकन-८८०५३८ — त्यो त्यो होइन जुन यसले पठाउँछ, जसले README हातमा रहेको कलाकृतिको विवरणको सट्टा पुन: प्रयोग गरिएको टेम्प्लेट हो भनेर संकेत गर्दछ। प्याकेजमा सहमति अस्वीकरण जुन पीडितले कहिल्यै स्थापना गर्न सहमत भएन, कुनै सहमति प्रदान गर्दैन। यहाँ वर्गीकरण शब्दहरूको पर्वाह नगरी दुर्भावनापूर्ण छ। अस्वीकरणमा एक शान्त लक्ष्य पनि छ: एक स्वचालित ट्राइज चरण जसले आश्वस्त संकेतहरूको लागि प्याकेज पाठ पढ्छ - "सौम्य," "अधिकृत," नामित कार्यक्रम, सम्पर्क इमेल - पेलोडले विरोधाभासपूर्ण गद्य द्वारा सुरक्षित निर्णय तर्फ धकेल्न सकिन्छ। पाठ मानव र मेसिन समीक्षकहरूको लागि समान रूपमा हो: स्थापना-समय व्यवहारको तौल गर्नुहोस्, README को आत्म-विवरण होइन।
समय रेखा
सबै प्याकेजहरू २४-घण्टाको विन्डो भित्र देखा परे। चार एकल-संस्करण नामहरू पहिले देखा परे, त्यसपछि दुई प्याकेजहरू जुन प्रत्येक ३०-६० मिनेटमा पुन: प्रकाशित भए।
| मिति (UTC) | घटना |
|---|---|
| 2026-06-15 18:32 | पहिलो प्याकेज प्रकाशित - npm:pkg-telemetry-r4f9@1.0.0 |
| 2026-06-15 19:50 | npm:runtime-metrics-w7k2@1.0.0 प्रकाशित |
| 2026-06-15 20:14 | npm:build-tracker-n5p1@1.0.0 प्रकाशित |
| 2026-06-15 20:35 | npm:npm-sandbox-ping-r9t2@1.0.0 प्रकाशित |
| 2026-06-15 21:09–22:42 | npm:event-metrics-q3x7 प्रकाशित 1.0.0 → 1.0.8 (११ संस्करणहरू) |
| 2026-06-15 23:40 → 2026-06-16 04:40 | npm:metrics-pipeline-d8k2 प्रकाशित 1.0.0 → 1.0.10 (११ संस्करणहरू) |
| 2026-06-16 | क्लस्टर पहिचान गरियो र दुर्भावनापूर्ण वर्गीकृत गरियो; धेरै टार्बलहरू पहिले नै रजिस्ट्रीमा ४०४ फर्काइरहेका छन् (चालु) |
अभियान भर्खरैको हो र हटाउने काम अझै पनि समाधान भइरहेको छ: विश्लेषणको समयमा केही संस्करणहरू रजिस्ट्रीमा समाधान भए र अरूले समाधान गरेनन्। सबै २६ संस्करणहरूलाई सम्झौता गरिएको रूपमा व्यवहार गर्नुहोस्।
सम्झौताका सूचकहरू
प्याकेजहरू
| पारिस्थितिकी तंत्र | प्याकेज | संस्करण | स्थिति |
|---|---|---|---|
| npm | metrics-pipeline-d8k2 | 1.0.0 – 1.0.10 | दुर्भावनापूर्ण |
| npm | event-metrics-q3x7 | 1.0.0 – 1.0.8 | दुर्भावनापूर्ण |
| npm | runtime-metrics-w7k2 | 1.0.0 | दुर्भावनापूर्ण |
| npm | build-tracker-n5p1 | 1.0.0 | दुर्भावनापूर्ण |
| npm | npm-sandbox-ping-r9t2 | 1.0.0 | दुर्भावनापूर्ण |
| npm | pkg-telemetry-r4f9 | 1.0.0 | दुर्भावनापूर्ण |
नेटवर्क
| प्रकार | सूचक | टिप्पणीहरू |
|---|---|---|
| IP | 173.255.233[.]239 | C2 कलेक्टर; लिनक्स रिकन POST र विन्डोज फलब्याक :443 |
| डोमेन | diameter-coins-limitations-parents.trycloudflare[.]com | क्लाउडफ्लेयर टनेलमाथि विन्डोज कमाण्ड च्यानल, :443 |
| URI मार्ग | /c2/poll, /c2/out, /c2/eof | विन्डोज कमाण्ड पोल / आउटपुट / बन्द |
| IP | 169.254.170[.]2 | स्थापना हुकबाट AWS ECS उदाहरण-मेटाडेटा अन्त्यबिन्दुको जाँच गरियो |
व्यवहार
| संकेत | विवरण |
|---|---|
| स्थापना hooks | preinstall र postinstall दुबै दौडन्छन् node run.js |
| प्लेटफर्म प्रेषण | run.js रन beacon_linux.js लिनक्समा, beacon34.js / beacon18.js विन्डोजमा |
| लिनक्स पुन: परीक्षण | env-var कुञ्जी नामहरू गणना गर्दछ, पढ्छ /proc, जाँचहरू docker.sock, चल्छ hostname / whoami, प्रोबहरू IMDS |
| झ्यालको उचाइ | ms-settings DelegateExecute रजिस्ट्री UAC बाइपास; PowerShell -ExecutionPolicy Bypass + Invoke-Expression; यसरी चल्छ SYSTEM |
| भेष बदल्नुहोस् | README ले "सौम्य" "अधिकृत" अनुसन्धान र "कुनै दृढता छैन" दाबी गर्छ; यो नपठाइएको प्याकेज नामलाई सन्दर्भ गर्दछ। |
विशेषता र अवलोकन गरिएको व्यवहार
हामी प्रकाशकलाई उसको संकेतद्वारा मात्र वर्णन गर्छौं र खाता पछाडिको कुनै पनि व्यक्तिको पहिचान दाबी गर्दैनौं।
- सिग्नल क्याटलग। सबै छवटा प्याकेजहरू एउटै npm खाताद्वारा प्रकाशित गरिएका थिए, npmresearch8847 ले थप्नुभयो:, उल्लेख गरिएको इमेल सहित npmresearch8847@web-library.net मा जानुहोस्। (इमेल र SCM प्रमाणीकरण दुवै अनुपस्थित छन्; हामीले स्वामित्व प्रमाणित गरेका छैनौं)। README हरू एक अन्तर्गत प्रकाशित हुन्छन् @ncurran लाई क्षेत्र र सम्पर्क दिनुहोस् nicholas@curran.tech बाट, र रन.जेएस भण्डारमा बिन्दुहरू github.com/ncurran/npm-sandbox-research`। छवटा प्याकेजहरूले समान साझा गर्छन् रन.जेएस प्रेषक, एक सामान्य बीकन_लिनक्स.जेएस पुन: चरण, र एकल कलेक्टर होस्ट १७३.२५५.२३३[.]२३९`। नामकरण योजना एकरूप छ: एक सामान्य CI-ध्वनि स्टेम (मेट्रिक्स, टेलीमेटरी, निर्माण-ट्रयाकर, स्यान्डबक्स-पिङ) र छोटो अनियमित प्रत्यय।
- निर्धक्क। छवटा प्याकेजहरू साझा डिस्प्याचर, रिकन स्टेज, र C2 होस्टको बलमा एउटै अभियान जस्तो देखिन्छ। "अधिकृत अनुसन्धान" फ्रेमिङ सबै छवटा README हरूमा एकरूप देखिन्छ। हामीले कुनै पनि बग-बाउन्टी कार्यक्रमले यो गतिविधिलाई अधिकृत गरेको पुष्टि गर्न सकेका छैनौं, र अस्वीकरणको दाबीहरू पठाइएको कोडसँग मेल खाँदैनन्।
- अवलोकन गरिएको क्षमता। पेलोड एक्सरcises चार क्षमता वर्गहरू: दुवैमा स्थापना-हुक कोड कार्यान्वयन पूर्व-स्थापना गर्नुहोस् र स्थापना पछि; बाह्य सङ्कलकमा निस्कने क्रममा होस्ट र CI-वातावरणको खोजी; स्थापना सन्दर्भबाट क्लाउड उदाहरण-मेटाडेटा पहुँचयोग्यता प्रोबिङ; र, Windows मा, स्थानीय विशेषाधिकार वृद्धि, कार्यान्वयनको रूपमा प्रणाली, र बाह्य च्यानलमा फेच-एन्ड-रन कमाण्ड लूप। विन्डोज कमाण्ड लूप एक रिमोट-कन्ट्रोल क्षमता हो: यसले निर्देशनहरूको लागि पोल गर्छ र तिनीहरूको आउटपुट फर्काउँछ।
प्रभाव, प्रवृत्ति र रक्षकहरूले के गर्नुपर्छ
प्रभाव
स्वचालित निर्माण वातावरणको लागि एक्सपोजर उच्चतम हुन्छ। CI मा npm स्थापनाले जीवनचक्र चलाउँछ। hooks धावकले जुनसुकै पहिचान राखे पनि; क्लाउड धावकमा त्यो पहिचानमा प्रायः पहुँचयोग्य मेटाडेटा अन्त्य बिन्दु र भूमिका प्रमाण समावेश हुन्छ। लिनक्स बीकन प्रोबहरूको ठेगाना, २१७.२३.१४ [।] २७, AWS ECS कार्य-मेटाडेटा अन्त्यबिन्दु हो: यसमा पुग्न सक्ने कार्यले सामान्यतया उही लिङ्क-स्थानीय सेवाबाट यसको कार्य भूमिकाको अस्थायी प्रमाणहरू पनि पुन: प्राप्त गर्न सक्छ। स्थापना स्क्रिप्ट भित्रबाट पहुँचयोग्यता जाँच ती प्रमाणहरू तान्नु अघिको चरण हो, त्यसैले हुक चलाउने र त्यो अन्त्यबिन्दुमा पुग्न सक्ने कुनै पनि धावकलाई यसको कार्य भूमिका खुलासा भएको मानिनुपर्छ। विन्डोज विकासकर्ता वा निर्माण होस्टमा पेलोडले उचाइ अनुरोध गर्दछ र कमाण्ड च्यानल खोल्छ, जसले एकल प्रोफाइल-र-निकासबाट अन्तरक्रियात्मक रिमोट कन्ट्रोलमा एक्सपोजरलाई फराकिलो बनाउँछ।
हामीले हटाउनु अघि मालिसियस संस्करणहरूको लागि भरपर्दो डाउनलोड गणनाहरू प्राप्त गर्न सकेनौं, त्यसैले हामी पीडित संख्याहरू अनुमान गर्दैनौं। दुई प्याकेजहरू - एघार र नौ संस्करणहरू घण्टामा - को द्रुत पुन: प्रकाशनले पुरानो संस्करणहरू हटाइँदै गर्दा स्थापनाकर्ताहरू र रिजल्भरहरूको अगाडि ताजा कलाकृतिहरू राख्यो।
उदीयमान ढाँचाहरू
यो क्लस्टर कभरको रूपमा प्रयोग भइरहेको लेबलको उदाहरण हो। "अधिकृत अनुसन्धान," "बग बाउन्टी," र "स्यान्डबक्स परीक्षण" त्यस्ता प्याकेजहरूसँग बढ्दो रूपमा संलग्न छन् जसको स्थापना स्क्रिप्टहरूले होस्टलाई प्रोफाइल गर्नु भन्दा बढी काम गर्छन्। फ्रेमिङले समीक्षकको स्वीकृतको रूपमा घोषणा गर्ने कुनै चीज विरुद्ध कार्य गर्न हिचकिचाहटमा व्यापार गर्दछ। यो दोस्रो परिचित रणनीतिसँग जोडिन्छ: प्याकेज नामहरू आन्तरिक CI टूलिङ जस्तो देखिने गरी इन्जिनियर गरिएको छ ताकि तिनीहरू निर्भरता रूखमा द्रुत नजरबाट चिप्लिए। संयोजनले ढाँचालाई हेर्न लायक बनाउँछ - एउटा नाम जुन पूर्वाधार प्लम्बिङको रूपमा पढिन्छ, गद्यमा बेरिएको जुन स्वीकृत परीक्षणको रूपमा पढिन्छ, एउटा स्थापना हुकलाई अगाडि बढाउँछ जुन एउटा अपरेटिङ सिस्टममा बढ्छ र अर्कोमा क्लाउड प्रमाणहरू जाँच गर्दछ। न त अस्वीकरण न त नरम नामले कोडले स्थापनामा के गर्छ भनेर परिवर्तन गर्छ, र एक ट्राइज प्रक्रिया जसले तिनीहरूलाई दुवैलाई कम गर्ने प्रमाणको रूपमा तौल गर्छ गलत निर्णयमा पुग्नेछ।
रक्षकहरूले के गर्नुपर्छ?
- छ प्याकेज नामहरूको लागि लकफाइलहरू खोज्नुहोस् र लगहरू स्थापना गर्नुहोस्; कुनै पनि मिल्दोजुल्दोलाई घटनाको रूपमा व्यवहार गर्नुहोस्, चेतावनीको रूपमा होइन।
- बाहिर जाने ट्राफिकमा रोक लगाउनुहोस् र सतर्क गराउनुहोस् २१७.२३.१४ [।] २७ र *.ट्रायक्लाउडफ्लेयर[.]कम निर्माण पूर्वाधारबाट होस्टहरू।
- इन्स्ट्यान्स-मेटाडेटा ठेगानाहरूमा स्थापना-समय HTTP अनुरोधहरूको खोजी गर्नुहोस् (169.254.170.2, 169.254.169.254) CI मा प्याकेज प्रबन्धकहरूबाट उत्पन्न।
- प्रभावित संस्करण स्थापना गर्ने धावकबाट पहुँचयोग्य कुनै पनि क्लाउड भूमिका प्रमाणहरू र टोकनहरू घुमाउनुहोस्।
- अडिट पूर्व-स्थापना गर्नुहोस्/स्थापना पछि तपाईंको स्क्रिप्टहरूमा निर्भरता सेट; दोस्रो स्क्रिप्ट फाइल चलाउने लाइफसाइकल हुक पढ्न लायक छ।
- विन्डोज एन्डपोइन्टहरूमा, नयाँ खोज्नुहोस् प्रतिनिधिकार्यान्वयनगर्नुहोस् अन्तर्गत लेखिएका मानहरू एमएस-सेटिङहरू शेल-ह्यान्डलर कुञ्जी — यो पेलोडले प्रयोग गर्ने आदिम उचाइ र प्याकेज नामबाट स्वतन्त्र भरपर्दो सिग्नल।
- लकफाइलहरू पिन र समीक्षा गर्नुहोस्, र स्थापना स्क्रिप्टहरू असक्षम गर्नुहोस् (npm स्थापना गर्नुहोस् - बेवास्ता-स्क्रिप्टहरू) CI मा जहाँ तपाईंको निर्माणलाई तिनीहरूको आवश्यकता पर्दैन।
- स्थापना स्क्रिप्ट भित्र "अधिकृत अनुसन्धान" वा "सौम्य" अस्वीकरणहरूलाई अविश्वसनीय पाठको रूपमा व्यवहार गर्नुहोस्, स्क्रिप्टलाई अनुमति दिने कारणको रूपमा होइन।
गद्य र अनुरोधहरूमा राम्रो मनसाय घोषणा गर्ने प्याकेज प्रणाली कोडमा कोडको आधारमा न्याय गरिनुपर्छ।





