DevTap npm Typosquatting Attack

DevTap npm Typosquatting Attack: چھ نقصان دہ پیکجز ٹارگٹ ڈیولپر ورک سٹیشنز

TL؛ ڈاکٹر

1 اپریل اور 3 مئی 2026 کے درمیان، ایک واحد npm پبلشر، user0001، غیر تصدیق شدہ Gmail ایڈریس کے ساتھ رجسٹرڈ tanvisoul9@gmail.com, خاموشی سے چھ پیکجوں کو جان بوجھ کر دھکیل دیا، بنیادی ڈھانچے کی آواز والے ناموں کے ساتھ: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime، اور node-env-resolve.

کے تازہ ترین دو ورژن node-env-resolve، 1.0.7 اور 1.0.8، کو Xygeni کے Malware Early Warning (MEW) سسٹم نے 2 مئی کو جھنڈا لگایا اور 3 مئی کو نقصان دہ ہونے کی تصدیق کی۔

امپلانٹ اس کے لئے غیر معمولی ہے جو یہ نہیں ہے: کوئی ٹیلیگرام بوٹس نہیں ہیں، کوئی OAST کال بیکس نہیں ہیں، نہیں چھٹکارا، اور انسٹال کے وقت AWS اسناد حاصل کرنے کی کوئی کوشش نہیں۔ اس کے بجائے، postinstall.js شروع ہونے والی HKCU رن کلید کا استعمال کرتے ہوئے ونڈوز بوٹ پرسٹینس انٹری لگاتا ہے۔ wscript.exe VBS اسٹب کے خلاف۔ پھر یہ ایک علیحدہ Node.js ایجنٹ بناتا ہے جو مائکروفون کیپچر، براؤزر ہسٹری کی چوری، اسکرین شاٹنگ، اور ماؤس/کی بورڈ سمولیشن کے لیے ماڈیول بناتا ہے۔

ہم اسے کلسٹر کہتے ہیں۔ ڈیو ٹیپ، کٹ کے بعد یہ ڈویلپر کی مشین پر چلنا چھوڑ دیتا ہے۔

لکھنے کے وقت تمام چھ پیکیجز npm پر براہ راست تھے۔ ہم نے انہیں رجسٹری کے بدسلوکی چینل پر جمع کرایا ہے۔ محافظوں کو ناشر سے کسی بھی انسٹال کو ہٹانا زیر التواء کھینچ لینا چاہیے۔

کلسٹر: چھ پیکیجز، ایک پبلیشر

پبلشر کا اکاؤنٹ user0001 غیر تصدیق شدہ ہے۔ اس کا کوئی نہیں ہے۔ SCM تصدیق، کوئی ڈومین سے منسلک ای میل، اور کوئی سابقہ ​​تاریخ نہیں۔ Gmail ہینڈل tanvisoul9 کسی دوسرے npm پبلشر کے ریکارڈ میں ظاہر نہیں ہوتا جو ہم تلاش کر سکے۔

تمام چھ پیکیجز ایک ہی مینٹینر کی فہرست دیتے ہیں، ایک ہی اکاؤنٹ سے شائع کیے گئے تھے، اور ایک ہی شیئر کرتے ہیں۔ package.json بوائلر پلیٹ نہیں ہے repositoryمیں homepage، اور نہیں description ایک لائن سے زیادہ لمبی۔

نام دینے کی حکمت عملی ایک دلچسپ حصہ ہے۔ کلاسک انحصار کنفیوژن یا ٹائپوسکویٹ مہم کے برعکس، ان میں سے کوئی بھی نام کسی مخصوص اپ اسٹریم لائبریری کو نشانہ نہیں بناتا ہے۔ اس کے بجائے، وہ ایک حقیقی میں غائب ہونے کے لئے کیلیبریٹ ہوتے ہیں۔ package.json or npm ls پیداوار.

پیکجپہلا شائعتازہ ترین ورژنورژنکلسٹر میں کردار
Centralogger2026-04-01 12:46 UTC1.0.95، 1.0.5 سے 1.0.9 تککلسٹر کا "لاگنگ یوٹیلیٹی" کور؛ ابتدائی اشاعت
dom-utils-lite2026-04-14 07:36 UTC1.0.33عام DOM مددگار کور
node-fetch-lite2026-04-19 10:22 UTC1.0.23نوڈ فیچ فیملی کی نقل کرتا ہے۔
کنیکٹر ایجنٹ2026-04-25 05:12 UTC1.0.01عام نام "ایجنٹ"
node-gyp-رن ٹائم2026-04-25 05:17 UTC1.0.01مقامی ماڈیول بنانے والے ٹولنگ کی نقل کرتا ہے۔
node-env-حل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 ترتیب میں تین چیزیں کرتا ہے.

سب سے پہلے، یہ این پی ایم ٹری کے باہر ایک انسٹالیشن ڈائرکٹری کا مرحلہ کرتا ہے۔ اسکرپٹ میں رن ٹائم پر پاتھ کی گنتی کی جاتی ہے۔ 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 کنسول ونڈو کے بغیر فائلیں۔ وہ پری ہے۔cisely کیوں یہ آٹورن اسٹبس کے لئے پسند کیا جاتا ہے۔

ایک مماثلت بھی ہے۔ reg delete اندر کا راستہ src/index.js، تجویز کرتا ہے کہ امپلانٹ کو آپریٹر کمانڈ پر صاف طور پر ہٹنے کے قابل بنایا گیا ہے۔

تیسرا، یہ ایک علیحدہ بچے کے عمل کو جنم دیتا ہے:

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

یہاں دو تفصیلات اہم ہیں۔

SERVER_URL ماحول سے پڑھا جاتا ہے۔ نتیجے کے طور پر، C2 اختتامی نقطہ ہر تعیناتی کے قابل ہے اور پیکج میں بیک نہیں کیا جاتا ہے۔ یہ چھوٹا لیکن جان بوجھ کر انتخاب سب سے زیادہ مستحکم-آئی او سی سویپس کو شکست دیتا ہے۔

نیز، پیدا ہونے والا بچہ مکمل والدین کے ماحول کا وارث ہوتا ہے۔ لہذا، کوئی بھی NPM_TOKEN, AWS_*, GITHUB_TOKEN، یا SSH-ایجنٹ ساکٹ ڈویلپر شیل میں موجود انسٹال کے وقت طویل عرصے تک ایجنٹ کی یادداشت میں سفر کرتا ہے۔

ایجنٹ کس چیز کے ساتھ بھیجتا ہے۔

بنڈل src/ درخت میں تین ماڈیولز شامل ہیں جن کے نام ہی کہانی بتاتے ہیں: audioCapture.js, browserHistory.js، اور systemInfo.js.

رن ٹائم انحصار کی فہرست، اسٹیج کے دوران حل کی گئی۔ npm install، ان کی تصدیق کرتا ہے۔

یہ نقطہ نظر ایک افراتفری والے واقعے کو کنٹرول شدہ ردعمل میں بدل دیتا ہے۔

آنکھیں بند کرکے ردعمل ظاہر کرنے کے بجائے، ٹیمیں کام کرتی ہیں۔ واضح ترجیح اور تیزی سے تدارک.

انحصاراس تناظر میں یہ کیا ہے۔
اسکرین شاٹ ڈیسک ٹاپمتواتر اسکرین کیپچر
@nut-tree-fork/nut-jsماؤس اور کی بورڈ آٹومیشن / ان پٹ سمولیشن
بہتر-sqlite3کروم، ایج، اور فائر فاکس ہسٹری SQLite ڈیٹا بیس کا براہ راست پڑھنا
adm-zipاخراج سے پہلے جمع شدہ نوادرات کو بنڈل کرنا
تیزاسکرین شاٹس اور تصویری نوادرات کا سائز تبدیل کرنا / کمپریس کرنا
socket.io-کلائنٹمستقل دو طرفہ C2 چینل
node-machine-idشکار سے باخبر رہنے کے لیے مستحکم فی میزبان فنگر پرنٹ

systemInfo.js کالز os.networkInterfaces() پہلے بیکن سے پہلے اضافی فنگر پرنٹنگ کے لیے۔

آڈیو کیپچر اسٹینڈ آؤٹ سگنل کیوں ہے۔

زیادہ تر npm RATs جن کی ہم MEW میں ٹرائی کرتے ہیں انسٹال وقت کی خفیہ چوری پر رک جاتے ہیں۔ وہ پڑھتے ہیں۔ ~/.npmrc، پڑھیں۔ ~/.aws/credentials، کھرچنا process.env، ویب ہک پر پوسٹ کریں، اور باہر نکلیں۔ یہ توڑنے اور پکڑنے والے معاشی ماڈل کے مطابق ہے۔ اسناد کی نصف زندگی مختصر ہوتی ہے، اور حملہ آور کو تیزی سے رقم کمانے کی ضرورت ہوتی ہے۔

node-env-resolve شکل میں مختلف ہے.

استقامت ریبوٹ سے بچنے کے لیے ترتیب دی گئی ہے۔ ایجنٹ علیحدہ اور طویل عرصے تک چلتا ہے۔ wscript.exe. اس کے پاس جو کٹ ہے وہ ڈویلپر کی مشین پر موجود ہونے کے لیے ہے، نہ کہ پکڑنے اور چھوڑنے کے لیے: ایک مائکروفون ریکارڈر، ایک کی بورڈ/ماؤس ڈرائیور، مکمل براؤزر ہسٹری انجیسٹ، اسکرین کیپچر، اور ایک انٹرایکٹو Socket.IO چینل واپس کنفیگربل C2 پر۔

خاص طور پر مائیکروفون کیپچر وہ لائن ہے جسے یہ مہم پار کرتی ہے جسے زیادہ تر npm میلویئر نہیں کرتے ہیں۔

ایک ڈویلپر ورک سٹیشن، تیزی سے، وہ ورک سٹیشن بھی ہے جہاں ڈویلپرز اسٹینڈ اپ، کسٹمر کالز، ڈیزائن ڈسکشنز، اور آن کال برجز لیتے ہیں۔ ایک امپلانٹ جو مائکروفون کو ریکارڈ کرتا ہے وہ واقعی ڈویلپر کے این پی ایم ٹوکن کے بعد نہیں ہوتا ہے۔ یہ اس کے بعد ہے جو ڈویلپر لیپ ٹاپ کے سامنے کہتا ہے۔

اس صلاحیت کا سیٹ، نیز ابہام کی کمی اور کسی بھی چمکدار انسٹال ٹائم ایکسفلٹریشن کی عدم موجودگی، موقع پرست اسناد کی چوری کے بجائے ہدف تک رسائی کے لیے پیشگی پوزیشننگ کے طور پر پڑھتی ہے۔

ہم صرف اسی سے انتساب کا دعوی نہیں کر رہے ہیں۔ ہم آپریشنل پروفائل کو نوٹ کر رہے ہیں۔

npm typosquatting حملہ - DevTab

آٹھ روزہ تکراری کیڈینس آن node-env-resolve ٹائم لائن میں سب سے زیادہ عملی طور پر بتانے والی تفصیل ہے۔

یہ آگ اور بھول جانے والا قطرہ نہیں ہے۔ پبلشر فعال طور پر ڈراپر کو برقرار رکھتا ہے، جس کا مطلب عام طور پر دو چیزوں میں سے ایک ہوتا ہے۔ یا تو وہ اسے وسیع تر تعیناتی سے پہلے ٹیسٹ کے ماحول کے خلاف بنا رہے ہیں، یا وہ پہلے سے ہی ٹیلی میٹری انسٹال کر چکے ہیں اور اس کا جواب دے رہے ہیں۔

دیگر پانچ پیکجوں نے اپنی ابتدائی اشاعت کے بعد مؤثر طریقے سے کوئی منتھنی نہیں دیکھی۔ یہ معاون کلسٹر کے لیے "اسٹیج ایک بار، نام چھوڑ دیں" کے پیٹرن میں فٹ بیٹھتا ہے جب کہ انجینئرنگ کی کوشش اس پیکج پر مرکوز ہوتی ہے جو کام کرتا ہے۔

انتساب: چھوٹے سراگ، کوئی پختہ فیصلہ نہیں۔

پبلک OSINT سگنل پتلے ہیں، اور ہم ان کو نہیں کھینچیں گے۔ کیا قابل مشاہدہ ہے:

Gmail ہینڈل 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 انتھروپک-سی ایل آئی کلون فیملی۔ ہمیں کوئی نہیں ملا: کوئی مشترکہ C2 پیٹرن، کوئی مشترکہ فائل لے آؤٹ، اور کوئی مشترکہ محاورہ نہیں۔

ہم کیا نہیں کہیں گے: کہ یہ ایک ریاستی اداکار ہے، ایک معروف گروہ ہے، یا جغرافیائی طور پر کسی مخصوص ملک سے منسلک ہے۔

آپریشنل پروفائل ایک چھوٹی، معتدل ہنر مند ٹیم کے ساتھ مطابقت رکھتا ہے جو ڈویلپر ورک سٹیشن کی نگرانی کر رہی ہے۔ یہ ممکنہ طور پر رسائی کے بہاو کے استعمال کے ذریعے مالی طور پر حوصلہ افزائی کرتا ہے، لیکن ممکنہ طور پر ایک علیحدہ خریدار کے لیے سرویس کے طور پر بھی۔

دو بالواسطہ نکات اس کی تائید کرتے ہیں جو پڑھتے ہیں: توجہ حاصل کرنے والے اخراج میکانکس سے اجتناب جو کلسٹر کو تیزی سے جلا دے گا، جیسے ٹیلیگرام بوٹس، oastify.com, یا canarytokens، اور جان بوجھ کر ملاوٹ والے پیکیج کے نام، جو ایک مختصر ہائی والیوم اسپائک پر خاموش لمبی دم کی تنصیب کے حق میں ہیں۔

سمجھوتہ اور کھوج کے اشارے

پیکجز اور پبلشر
فیلڈقدر
این پی ایم پبلشرuser0001
پبلیشر کا ای میلtanvisoul9@gmail.com، غیر تصدیق شدہ
پیکجوں کےCentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
تصدیق شدہ بدنیتی پر مبنیnode-env-resolve@1.0.7, node-env-resolve@1.0.8
میزبان نوادرات
قسمقدر
استقامت کی کلیدHKCU \ سافٹ ویئر \ مائیکروسافٹ \ ونڈوز \ کرنٹ ورژن \ چلائیں
استقامت کی قدرمتغیر نام؛ فارم کا ڈیٹا wscript.exe " \\ .vbs"
ہک انسٹال کریں۔پوسٹ انسٹال: پیکیج مینی فیسٹ میں نوڈ 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 توثیق، ایک Gmail ای میل، نمبر repository فیلڈ، اور ایک دوسرے کے دنوں میں شائع ہونے والے متعدد مختصر، عام، بنیادی ڈھانچے کی آواز والے پیکیج کے نام، بذات خود، دستی جائزے کی ضمانت دینے کے لیے کافی ہیں۔

این پی ایم رجسٹری کو اطلاع دی گئی۔ پبلشر اکاؤنٹ ہٹائے جانے پر ہم اس پوسٹ کو اپ ڈیٹ کریں گے۔

sca-tools-software-composition-analysis-tools
اپنے سافٹ ویئر کے خطرات کو ترجیح دیں، تدارک کریں اور محفوظ کریں۔
اپنا مفت اکاؤنٹ حاصل کریں۔
کوئی کریڈٹ کارڈ کی ضرورت نہیں ہے.

اپنے سافٹ ویئر ڈویلپمنٹ اور ڈیلیوری کو محفوظ بنائیں

Xygeni پروڈکٹ سویٹ کے ساتھ