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

ChainDrop: מקוריות תקפה ביותר מ-400 חבילות npm, ו-hooks של Claude Code שאינם דורשים npm install

מחבר

Elias Hawthorne

תאריך פרסום

מודלים אחרונים · 20צפו בכל המודלים →
בנצ'מרקים: Artificial Analysis · מתעדכן יומית
חזרה לכל הפוסטים

ב-4 באוגוסט 2026 תוקפים השתלטו על חשבון ה-GitHub שמאחורי keyv, ספריית מטמון ש-Elastic Security Labs אומרת�הורדה יותר מ-600 מיליון פעמים בחודש הקודם. גם Wiz Research וגם Orca Security מתעדים שקבצים זדוניים נדחפו ישירות לענף הראשי של keyv, ושתהליך העבודה של GitHub Actions של הפרויקט עצמו בנה ופרסם את הגרסה המורעלת — כך שהיא הגיעה ל-npm כשהיא נושאת פרובננס תקף, האישור שכלי שרשרת האספקה משתמשים בו כדי להחליט שחבילה מהימנה. תולעת שמתפשטת מעצמה שחוקרים מכנים ChainDrop השתמשה אז בטוקנים גנובים של npm כדי לחזור על התחבולה בחבילות של מתחזקים אחרים: Elastic מנתה יותר מ-400 חבילות ייחודיות עד 6 באוגוסט, Microsoft Threat Intelligence תיארה את אותו קמפיין ב-4 באוגוסט, והסוכנות לאבטחת סייבר של סינגפור מנתה יותר מ-1,300 גרסאות חבילה שנפגעו עם סך כולל של 2 מיליארד הורדות חודשיות. גם Elastic וגם Microsoft מתארות hooks שמופעלים מחדש כאשר מאגר נפתח ב-Claude Code או ב-Visual Studio Code. רשימת המקורות המלאה של הרשומה, דירוג החומרה והערכת הביטחון נמצאים ב-ארכיון אירועי ה-AI, לצד הערכים האחרים של npm וכלי מפתחים בשרשרת האספקה שנרשמו סביבו.

איך צינור שחרור לגיטימי חתם על הפריצה של עצמו

Wiz Research משחזרת את הדקות הראשונות: מ-09:00 UTC ב-4 באוגוסט השתמש התוקף בזהות שנפרצה כדי להחדיר עומסי התמדה (persistence payloads) של IDE אל ריפו keyv, ולאחר מכן, זמן קצר אחר כך, פרסם גרסה חדשה של keyv המכילה את ה-payload. Wiz מכנה את הגורם שנפרץ כחשבון מתחזק ב-GitHub, ואומרת שחבילות רבות במערכת האקוסיסטם של keyv ו-cacheable באו בעקבות כך.

מסמך התגובה המהיר של Orca Security מפורט יותר לגבי נתיב החתימה. לפי הנאמר בו, התוקף דחף שני קבצים זדוניים — setup.mjs ו-Math_Symbol.js — ישירות לענף הראשי ומיד הוציא גרסאות חדשות. מכיוון שגרסאות אלו נבנו דרך זרימות העבודה של GitHub Actions של החשבון שנפרץ, הגרסאות המורעלות פורסמו ל-npm עם חתימות פרובננס תקפות, וכך עקפו בדיקות שלמות סטנדרטיות של שרשרת האספקה. Zscaler ThreatLabz, צוות מחקר עצמאי שאינו נמנה עם המקורות המצוטטים ברשומה, מגיע לאותה מסקנה ומעניק לכך דרגה: ה-keyv 6.0.0 הזדוני נשא SLSA Build Level 3 פרובננס תקף מכיוון שהתוקף שלט במאגר המקור. BleepingComputer, שדיווח על הקמפיין באותו יום, מתעד את אותו מנגנון — קבצים זדוניים שנדחפו ישירות לענפים הראשיים של הפרויקטים, גרסאות חדשות שנוצרו, פרובננס תקף מכיוון שהבניות רצו דרך זרימות עבודה לגיטימיות של GitHub Actions.

הניתוח של Microsoft מוסיף פרט שנראה כמו סתירה ואינו כזה. בשלב ההתפשטות של התולעת, Microsoft Threat Intelligence מצא שלרבים מהגרסאות הזדוניות לא היה קומיט מתאים בקוד המקור, pull request, תג או מהדורה לגיטימית, מה שהצביע על כך שהתוקפים שינו ופרסמו חבילות tarball ישירות במקום להשתלט על כל מאגר קוד מקור ציבורי. בקריאה משותפת, המקורות מתארים שני משטרי חתימה בתוך קמפיין אחד: המהדורות הראשונות של keyv עברו דרך צינור ה-CI האמיתי של הקורבן ונושאות אישורי מקור שמעידים על כך, בעוד שהמהדורות המאוחרות יותר של התולעת הורכבו ופורסמו במידה רבה באמצעות אסימוני registry גנובים, ולא הותירו שום עקבות מקור. התצפית של Microsoft עצמה היא שדפוס ה-tarball הישיר מסביר מדוע מהדורות זדוניות הופיעו לעתים קרובות כהעלאת גרסת patch רגילה ללא קומיטים מתאימים בקוד המקור או pull requests.

הלקח הלא-נוח מוצג בבירור על ידי Zscaler: מקוריות (provenance) מאמתת את תהליך הבנייה, ולא את זהות החשבון או את שלמותה של מערכת ה-CI שמריצה אותו. היא גם מודה בפער משמעותי לכל מי שמשחזר את התקרית — מנגנון השתלטות החשבון המדויק שבו השתמש התוקף לא היה ידוע בזמן הניתוח שלה.

מה רץ בעת npm install: preinstall, ‏Bun 1.3.13, ואספן של 300 תבניות

Elastic Security Labs מתארת את הטריגר כוו preinstall ב-package.json, אשר מנצל לרעה תכונה לגיטימית של npm שמריצה פקודות שרירותיות לפני שחבילה מסיימת את ההתקנה, ללא צורך באינטראקציה נוספת מצד הקורבן. הוו מפעיל setup.mjs, אשר בודק אם סביבת ההרצה של JavaScript בשם Bun כבר קיימת. אם לא, הדרופר מזהה את הפלטפורמה והארכיטקטורה של המכונה, מוריד את Bun v1.3.13 מדף הגרסאות הרשמי, מחלץ אותו, משתמש בו כדי להריץ את המטען, ולאחר מכן מוחק את הספרייה הזמנית כדי לטשטש את עקבותיו. Wiz זיהתה באופן עצמאי את סוכן המשתמש Bun/1.3.13 שמבצע את הקריאות הזדוניות. הדרופר תומך בריבוי פלטפורמות, ומיועד ל-Linux, macOS ו-Windows.

המטען מוטמן בכבדות, והמקורות חלוקים מעט לגבי גודלו: Elastic מציבה אותו על 711 קילובייט, בעוד Orca Security מציבה אותו על 728 KB. הוא משתמש בהשטחת זרימת בקרה ובסכימת קידוד מחרוזות Base91, ונושא מחרוזות בנושא Dune — laza, kanly, ghola, mentat, lasgun, sietch, fedaykin, tleilaxu, sandworm, sardaukar, ornithopter, navigator — ש-Elastic מציינת שיש להן קווי דמיון לקמפיינים קודמים של Shai-Hulud.

התיאור ההתנהגותי של Microsoft מוסיף שני פרטים שכדאי להכיר. המטען בודק תחילה את הסביבה שלו ויוצא ממערכות בשפה הרוסית, נמנע ממופעים כפולים, ומפעיל עותק רקע מנותק בתחנות העבודה של מפתחים; בתוך CI הוא נשאר מחובר למשימה הפעילה כדי שיוכל להגיע לסודות של תהליכי עבודה, פרטי התחברות של ראנר והרשאות פרסום של OpenID Connect.

הקולקטור הוא המקום שבו התקרית הופכת לסיפור של כלי AI ולא לסיפור גנרי של אישורי גישה. Elastic אומרת שהוא סורק יותר מ-300 תבניות ייחודיות על פני מאגרי אישורי גישה במחשב של מפתח, ושהמיקוד הבולט מכוון אל אישורי כלי AI: Anthropic, Claude, Codex, Cursor, OpenAI ו-Gemini. הוא גם אוסף אישורי AWS, GCP, Azure ו-Alibaba Cloud, אסימוני גישה אישיים של GitHub, אסימוני JWT וסשן, אסימוני HashiCorp Vault, מפתחות SSH פרטיים, אסימוני חשבון שירות של Kubernetes ואסימוני npm. Wiz מדווחת שרשימת היעדים הורחבה בכמעט 70% לעומת קוד Mini Shai-Hulud הקודם שעליו מבוססת הרשימה, עם תוספות חדשות הכוללות מאגרי אישורי סוכני AI עבור Claude, OpenAI, Codex, Cursor ו-Gemini, מאגרי מפתחות למטבעות קריפטוגרפיים עבור Foundry, Solana ו-Monero, master.key של Jenkins, סודות של Argo CD ו-Harbor, תצורות CLI של Alibaba ו-Tencent, וגם /etc/shadow.

גם Microsoft וגם Elastic מתארים את אותו עיצוב של הוצאת מידע. התוצאות עוברות סריאליזציה כ-JSON, נדחסות ב-gzip ומוצפנות באמצעות מפתח AES-256-GCM שנוצר באופן אקראי, והמפתח הזה נעטף באמצעות המפתח הציבורי RSA של התוקף. ה-payload אינו מקודד באופן קשיח את דומיין ה-command-and-control שלו: Elastic אומרת שהוא שולח שאילתה לחוזה חכם של Ethereum בכתובת 0xE1f2395ee43e45A1556EC6438a88c31B83493103 כדי לאחזר את נקודת הקצה הנוכחית בזמן ריצה, כך שניתן להחליף את התשתית בלי לגעת ב-malware. אם זה נכשל, הוא מחפש סמן חתום קריפטוגרפית — thebeautifulmarchoftime — בהיסטוריית הקומיטים של GitHub ומאמת את הדומיין מול מפתח RSA מוטמע. אם שניהם נכשלים, הוא מבצע הוצאת מידע דרך מאגר GitHub ציבורי שהחשבון של הקורבן עצמו יוצר, המתואר "Shai-Hulud: Here We Go Again". Microsoft מציינת שאחד ממסלולי הגיבוי מקודד אסימון GitHub גנוב באמצעות Base64 כפול במקום להצפין אותו.

ההתפשטות מותנית באיכות האסימון. Elastic מדווחת שהתולעת מופעלת רק כאשר סריקת פרטי הכניסה מאתרת אסימון npm עם הרשאת כתיבה לחבילה והיכולת לפרסם ללא אימות דו-גורמי; לאחר מכן היא מורידה את קובץ ה-tarball האחרון של כל חבילה הניתנת לכתיבה, מזריקה את עצמה, מעלה את גרסת ה-patch ומפרסמת מחדש. BleepingComputer מוסיף שכל אסימון מאומת בזמן אמת מול נקודת הקצה whoami של המאגר לפני שהוא נגנב. השגרה הזו היא שהפכה זהות אחת שנפרצה למאות פרסומים, והיא הסיבה לכך שהגרסאות הזדוניות נראות כמו העלאות גרסת patch רגילות.

An HTML card titled 'The first four hours, 4 August 2026', subtitled 'What the sources put where in the infection order, and the three counts the campaign is quoted with'. A four-step numbered column headed 'Infection order' reads: 1, 09:00 UTC: files pushed to main — attacker adds IDE persistence payloads to the keyv repository, then publishes a new keyv version, per Wiz Research; 2, the victim's CI builds the payload — keyv 6.0.0 reaches npm through the compromised account's own GitHub Actions workflow carrying valid provenance and a SLSA Build Level 3 attestation, per Orca Security and Zscaler ThreatLabz; 3, the worm republishes with stolen tokens — stolen npm tokens with write access and 2FA bypass bump patch versions, at peak roughly one infected package per second, per Elastic Security Labs and Zscaler ThreatLabz; 4, IDE hooks travel with the repos — a stolen GitHub App token commits .claude/settings.json and .vscode/tasks.json to up to 50 branches per accessible repository, per Elastic Security Labs. A right-hand panel headed 'Three counts, three units' shows: 400+, unique npm packages compromised by 6 August, per Elastic and Microsoft Threat Intelligence; 868, worm-reached packages across 1,381 versions, per Aikido via BleepingComputer and Orca Security; 1,300+, package versions with 2 billion monthly downloads, per CSA Singapore advisory AD-2026-009, 6 August. A footer reads: each figure is a snapshot taken while the campaign was still running; none of the cited sources claims a final total.

נתיב ההדבקה שלא דורש npm install

הממצא שמבדיל את הקמפיין הזה מתולעי ה-npm הקודמים הוא שההתקנה אינה עוד הדרך היחידה לחדור. Elastic מתארת שני מסלולי הרצה נוספים שמיועדים למשתמשי כלי קידוד מבוססי AI. הוק SessionStart ב-.claude/settings.json מריץ node .claude/setup.mjs כאשר מתחיל סשן Claude חדש. עבור VS Code, משימת folderOpen ב-.vscode/tasks.json מריצה node .vscode/setup.mjs כאשר נפתח מאגר נגוע. הניתוח של Microsoft מונה את אותם ארבעת הארטיפקטים — .claude/settings.json, .claude/setup.mjs, .vscode/tasks.json ו-.vscode/setup.mjs — ומתאר אותם כמסלול הדבקה משני שיכול להפעיל מחדש את המטען לאחר שהתקנת ה-npm המקורית הושלמה.

התנאי שמרחיב זאת באופן דרמטי נמצא בפרטי הגישה הגנובים. כאשר טוקן GitHub App נמצא ביניהם, Elastic מדווחת שהתולעת מבצעת קומיט של ההוקים הזדוניים אל עד 50 ענפים לכל מאגר נגיש, תוך הזרקת .claude/settings.json ו-.vscode/tasks.json לכל אחד מהם. המסקנה של Elastic היא שמפתח שמשכפל אחד מהענפים הללו ופותח אותו עלול להידבק בעצם פתיחת הפרויקט — ללא התקנת חבילה, ולפיכך ללא הגנה מפני סקריפט התקנה, בשום שלב בנתיב.

ההערכה של Zscaler היא שהוקי ההתמדה שורדים הסרת חבילה ומבוצעים מחדש פשוט על ידי פתיחת הפרויקט ב-VS Code או ב-Claude Code, מה שעוקף את מיטיגציית --ignore-scriptsשצוותים רבים אימצו לאחר תולעי npm קודמים. ההמלצה שלה נובעת ישירות מכך: יש להתייחס לקבצי התצורה של IDE וסוכני AI — .claude/, .cursor/, .vscode/, .gemini/ — כאל קוד הרצה, שנבדקים באותה קפדנות כמו קוד מקור.

קיים טביעת אצבע למחצית הריפוזיטורי של המתקפה. Elastic מדווחת שניתן לזהות קומיטים שנוצרו על ידי התולעת לפי שם המחבר claude והודעת הקומיט chore: update config, ו-Wiz מתעדת את אותה מחרוזת הודעה. Elastic מוסיפה שהודעת הקומיט נשאה גם את אסימון GitHub הגנוב לצד מחרוזת הפחדה — IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients — מה שהיא מפרשת כניסיון להרתיע מפתחים מביטול האסימון. Wiz מתעדת את אותה מחרוזת בקומיטים הראשוניים, כאשר ההודעה הקצרה יותר מוחלפת בקומיטים שמציגים את ווי ה-IDE.

A generated abstract illustration on a deep navy field: a tall repository-shaped block stands at centre, its face divided into thin horizontal branch lines. A narrow beam of pale light from an editor-shaped pane at upper left falls across the block, and where the beam touches one branch line, a small bright hook symbol appears and a thin amber thread runs down into a dark pool at the base. The other branch lines remain untouched and faintly lit. No text, numbers, people, brand marks or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

הספירות אינן תואמות, וזו אינה סתירה

כל נתון שפורסם לגבי רדיוס ההשפעה משויך ליחידה אחרת, והיחידות אינן ניתנות להחלפה. Elastic Security Labs, במאמר שפרסמה ב-6 באוגוסט, ספרה יותר מ-400 חבילות npm ייחודיות שנפגעו. Microsoft Threat Intelligence תיארה יותר מ-400 חבילות אצל מפרסמים מרובים שאינם קשורים זה לזה. Aikido, כפי שצוטטה ב-BleepingComputer, הציבה את המספר על לפחות 868 חבילות ב-1,381 גרסאות. Orca Security מדווחת על 10 חבילות keyv ו-cacheable שהורעלו ישירות עם יותר מ-619 מיליון הורדות חודשיות, ואז 868 חבילות נוספות ו-1,381 גרסאות שאליהן הגיע התולעת, עבור יותר מ-2 מיליארד התקנות חודשיות. הודעת הייעוץ AD-2026-009 של CSA בסינגפור, מיום 6 באוגוסט, מתעדת יותר מ-1,300 גרסאות חבילות שנפגעו המייצגות סך מצטבר של 2 מיליארד הורדות חודשיות.

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

נתוני החשיפה של Elastic ברמת הספרייה הם אלה שמצוטטים לרוב והפחות מעורפלים. היא מדווחת ש-keyv לבדו רושם יותר מ-600 מיליון הורדות בחודש הקודם, כאשר flat-cache קרוב ל-580 מיליון, cacheable-request יותר מ-137 מיליון, cacheable יותר מ-30 מיליון ו-cache-manager יותר מ-16 מיליון. ההתראה של CSA מפרטת את הגרסאות הספציפיות שנפגעו, ביניהן keyv 6.0.0, flat-cache 6.1.24, file-entry-cache 11.1.6, cacheable-request 13.0.20, cacheable 2.5.1, cache-manager 7.2.10, @cacheable/utils 2.5.1 ו-ecto 5.0.1.

מלכודת הביטול

צוותי תגובה שהתקינו גרסה נפגעת נתקלים בבעיה שנייה לאחר הראשונה. Elastic מדווחת כי בנתיב גיבוי מותנה של GitHub המטען מנסה להתקין רכיב לניטור אסימונים שמשמר גישה לאישורים ומכיל מטפל הרסני אם האסימון המנוטר מבוטל. Zscaler מתארת את המנגנון בפירוט תפעולי ומכנה אותו מלכודת ביטול אסימון: התולעת מתקינה תהליך רקע שמבצע polling ל-API של GitHub כל 60 שניות באמצעות האסימון הגנוב, ואם האסימון מחזיר שגיאת 4xx — כלומר הקורבן ביטל אותו — מופעל מטען הרסני משני, אשר בהתאם לווריאנט יכול לכלול הרצת קוד מרחוק או מחיקת תיקיית הבית של המשתמש.

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

ההשלכה המעשית מתועדת על ידי BleepingComputer, וכן בהנחיה של Aikido שאותה הוא מצטט: יש להתייחס לתחנת עבודה של מפתח או למריץ CI/CD שהתקין גרסה מושפעת כאל נפגעים גם אם החבילה הוסרה לאחר מכן, מכיוון שהרצה בשלב שני יכולה הייתה לחשוף אסימונים ולערער את שלמות הבנייה. ההנחיה של Microsoft מגיעה לאותה מסקנה מצד הבנייה, ומזהירה שארגונים שהתקינו חבילה מושפעת עם סקריפטים של מחזור חיים מופעלים צריכים להתייחס לתחנת העבודה או למריץ הבנייה כאל חשופים לפגיעה אפשרית, ולבנות מחדש מערכות מושפעות וארטיפקטים במורד הזרם ממקורות מהימנים.

An HTML card titled 'Established, assessed, and not shown', subtitled 'The same five analyses, sorted by how strongly each claim is supported — not by how confidently it is written'. Three columns. ESTABLISHED lists: the keyv maintainer's GitHub account was compromised, files were pushed to main and a release was published on 4 August 2026; at least keyv 6.0.0 shipped through the victim's own CI with valid provenance and SLSA Build Level 3; a preinstall hook ran setup.mjs, which downloaded Bun v1.3.13 to execute an obfuscated payload; the collector scanned 300+ credential patterns including Anthropic, Claude, Codex, Cursor, OpenAI and Gemini; hooks in .claude/settings.json and .vscode/tasks.json run on session start and folder open; a GitHub App token extended the hooks to up to 50 branches per accessible repository; more than 400 unique packages were compromised within days; CSA Singapore published advisory AD-2026-009 on 6 August 2026. ASSESSED lists: attribution to the Mini Shai-Hulud family and a TeamPCP lineage; that the account takeover was the initial access route; that provenance must not be read as proof of safety, since it validates the pipeline and not the account; that IDE configuration files should be treated as executable code. NOT SHOWN lists: how the maintainer account was taken over, reported as unknown by Zscaler; any single final total, since the counts use packages, versions and downloads interchangeably; any confirmed reuse of a stolen AI-tooling credential against a provider account; who the operator is beyond vendor attribution; any remediation outcome, account recovery or enforcement action. A footer cites Elastic Security Labs, Microsoft Threat Intelligence, Wiz Research, Orca Security and CSA Singapore AD-2026-009.

מה מבוסס, מה מוערך, ומה שאיש לא הראה

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

• חשבון ה-GitHub של מתחזק keyv נפרץ, וקבצים זדוניים נדחפו ישירות ל-main לפני פרסום גרסה, ב-4 באוגוסט 2026 — דווח באופן עקבי על ידי Wiz, ‏Orca Security, ‏BleepingComputer ו-CSA Singapore.

• לכל הפחות, keyv 6.0.0 הגיע אל npm דרך צינור ה-CI של הקורבן עצמו כשהוא נושא provenance תקף, כאשר Zscaler מציינת אישור SLSA Build Level 3. זוהי הטענה שהופכת את התקרית לראויה לציון, והיא מאוששת על ידי שלושה ארגונים שלא היו שותפים לכתיבת עבודתו של זה.

• הוק טרום-התקנה (preinstall) הפעיל את setup.mjs, שהוריד את Bun v1.3.13 והריץ מטען מעורפל שסרק למעלה מ-300 דפוסי אישורים, כולל אישורים של כלי קידוד מבוססי AI — Elastic ו-Wiz מסכימות גם על גרסת הריצה וגם על רשימת האישורים שכוונו ל-AI.

• Hooks שנכתבים אל .claude/settings.json ואל .vscode/tasks.json מופעלים עם תחילת סשן ועם פתיחת תיקייה, וטוקן של GitHub App הרחיב זאת לעד 50 ענפים בכל מאגר נגיש — הממצא של Elastic, והבסיס להצהרתה שמפתח עלול להידבק מפתיחת מאגר.

• יותר מ-400 חבילות ייחודיות נפרצו בתוך ימים ספורים, ו-CSA Singapore, רשות רגולטורית לאומית, פרסמה ב-6 באוגוסט 2026 התרעת אבטחה AD-2026-009 ובה מפורטות הגרסאות המושפעות והאינדיקטורים.

מה שהמקורות מתייחסים אליו כהערכה ולא כעובדה צריך להיות מסומן ככזה. Wiz מתארת את ה-payload כצאצא של משפחת התוכנה הזדונית "Mini" Shai-Hulud, הבנוי על מאגרי Shai-Hulud-Open-Source ציבוריים שפורסמו על ידי TeamPCP, עם כמה שינויים קריטיים; Orca Security מייחסת את המתקפה ל-TeamPCP; Zscaler מקשרת את ChainDrop ל-TeamPCP וממקמת אותו בשושלת ייחוס שמתחילה בספטמבר 2025. מדובר בקונסנזוס ייחוס של ספקים, ולא במשהו שמסמך מקור מצוטט מוכיח לגבי אדם או קבוצה בשמם.

שלושה דברים שאף מקור מצוטט אינו מבסס, והכתבה הזו אינה משלימה. ראשית, כיצד בוצעה השתלטות על חשבון המתחזק: Zscaler מציינת בבירור שהמנגנון המדויק לא היה ידוע בזמן הניתוח שלה. שנית, סכום סופי אחד: המספרים 400, 868 ו-1,300 סופרים חבילות, חבילות-וגרסאות וגרסאות בנקודות זמן שונות, ואף מקור אינו טוען שהקמפיין נסגר. שלישית, והחשוב ביותר עבור הטענה הספציפית ל-AI ברשומה הזו, אף מקור מצוטט אינו מדווח על מקרה מאומת של פרטי זיהוי גנובים של Anthropic, Codex, Cursor, Gemini או OpenAI שהופעלו מחדש מול חשבון של ספק. מה שמתועד הוא כוונה ויכולת — רשימת יעדים מפורשת, וכלי איסוף שנבנה כדי להגיע אליה — ולא פריצה מוכחת במורד הזרם למערכות של ספק AI.

מה השתנה לאחר מכן — ומה מגיב צריך לעשות

התרופה הקונקרטית ביותר ברשומה היא שינוי בפלטפורמה. Elastic ממליצה לשדרג ל־npm 12 ואילך, אשר חוסם ווי preinstall כברירת מחדל; ההנחיה של Microsoft ממליצה באופן עצמאי על npm CLI v12 ועל תכונת min-release-age, שמעכבת גרסאות חדשות מספיק זמן כדי שהקהילה תספיק לזהות פגיעה לפני שהיא מגיעה לבנייה.

מעבר לכך, שלבי התגובה שהמקורות מפרסמים חופפים במידה רבה.

• Elastic: בטלו את כל אסימוני GitHub, כולל אסימוני סשן, במכונות המושפעות; בטלו וצרו מחדש אסימוני npm, במיוחד אסימוני אוטומציה עם הרשאת כתיבה ועקיפת אימות דו-גורמי; חפשו במאגרים קומיטים לא מורשים עם ההודעה chore: update config from claude@users.noreply.github.com; בצעו רוטציה לסודות של ענן, Kubernetes, Vault, כלי AI ו-CI/CD; הפעילו אימות דו-גורמי בחשבונות npm.

• Microsoft: נקו את מטמוני npm ו-yarn בנקודות קצה ובמארחי בנייה מושפעים, נעלו גרסאות ידועות כתקינות, בדקו קבצי lock וארטיפקטים לאיתור גרסאות שנפגעו כולל הפניות טרנזיטיביות, בנו מחדש תמונות בסיס משותפות ומריצי בנייה מוזהבים, ובדקו היקפי טוקנים, אישורי תהליכי עבודה ומקוריות שחרור, מכיוון שהתקרית תואמת ניצול לרעה של צינור CI/CD באמצעות פרסום OIDC.

• CSA Singapore: יש להסיר את הגרסאות שנפגעו מסביבות פיתוח, בנייה ו-CI/CD, להתייחס למערכות שנפגעו כאל מערכות שנפרצו ולבנות אותן מחדש, לסובב הרשאות גישה, לבדוק סביבות ענן וקוד מקור לאיתור גישה בלתי מורשית, לנטר אחר אינדיקטורים שפורסמו, ולחזק את בקרות רשימות ההיתרים המאושרות, אימות היושרה ובקרות מקוריות (provenance).

• Zscaler: התייחסו אל .claude/, .cursor/, .vscode/ ו-.gemini/ כאל קוד הרצה, והפסיקו להתייחס לפרובננס של SLSA או Sigstore כהוכחה לבטיחות — במקום זאת, שלבו אותו עם זיהוי אנומליות בהתנהגות פרסום, כגון פרסום מחוץ לשעות העבודה, פרסום גרסאות בכמות גדולה ומפרסמים לראשונה.

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

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