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

ה-SDK של Tensorlake ב-npm הורעל כדי לגנוב אישורי גישה של סוכני AI — וכדי למחוק את תיקיית הבית שלך אם ביטלת את הטוקן

מחבר

Alistair Wren

תאריך פרסום

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

ב-8 באוקטובר 2026, מהדורה מורעלת של tensorlake — ה-SDK של npm עבור הפלטפורמה של Tensorlake, שמריצה קוד לא מהימן שנוצר על ידי LLM בתוך ארגזי חול מבודדים — הגיעה למרשם npm. גרסה 0.5.144 פורסמה ב-01:12:07 UTC; חוקרי Socket אומרים שהם סימנו אותה כעבור כ-11 דקות. זו לא הייתה מהדורה מאושרת. Tensorlake מציינת שהתוקף דחף קוד ישירות למאגר ה-GitHub של החברה ופרסם אותו באמצעות תהליך השחרור של הפרויקט עצמו, כך שהחבילה נשאה provenance תקף של npm — אישור חתום שמראה היכן היא נבנתה, עבור קוד מקור שכבר הורעל. החברה אומרת שהגרסה הייתה פעילה במשך כשעה ו-40 דקות, מ-01:12 עד 02:54 UTC, לפני ש-npm הסירה אותה.

המטען לא נזקק לייבוא ולא לסוכן פועל. preinstall וו במניפסט החבילה הריץ node lib/setup.mjs, מטעין מעורפל שהפיל את סביבת ההרצה Bun על המכונה והשתמש בה כדי להריץ lib/Math_Symbol.js, גונב פרטי גישה בגודל 856,501 בייט ותולעת שמתפשטת מעצמה. כל מי שהריץ התקנה רגילה של אותה גרסה אחת הפעיל אותה. מכיוון שזו הייתה תגית ה-latest של החבילה, זו הגרסה שאליה הגיעה התקנת ברירת מחדל כל עוד היא הייתה פעילה.

מה שהופך את הרשומה הזו לראויה לשימור אינו גודלו של המטען — משפחת Shai-Hulud תועדה בעבר. זוהי רשימת המטרות. לצד אסימוני npm ו-GitHub, פרטי גישה ל-AWS, סודות Kubernetes ו-Vault, מפתחות SSH, .env קבצים, סיסמאות דפדפן וארנקי קריפטו, הבנייה הזו אספה במיוחד תצורת כלי פיתוח AI וקבצי MCP — אלה המשויכים ל-Claude Code, Cursor, Kiro, Windsurf ו-Zed, לפי Socket. היא גם כתבה את קובץ .claude/settings.json ואת קובץ .vscode/tasks.json של עצמה לתוך מאגרים שאליהם יכלה להגיע, כך שהקוד ירוץ שוב בפעם הבאה שמפתח יפתח את הפרויקט הזה ב-Claude Code או ב-VS Code. זוהי מתקפת שרשרת אספקה שמכוונת ישירות למכונות שעליהן אנשים בונים סוכנים.

איך הגרסה יצאה מחשבון של מתחזק

Socket, SafeDep ו-Aikido כל אחת פרסמה ניתוח משלה ב-8 באוקטובר, והתיאורים שלהן של המנגנון תואמים זה לזה. דירוג הביטחון של הארכיון לרשומה זו הוא A, היא אינה מסומנת כשנויה במחלוקת, ושום דבר שנמצא במקורות אינו סותר אף אחד מהם.

המאמר של SafeDep מתחקה אחר שמונה קומיטים אל ענף ה-main של המאגר בין 01:20 ל-03:57 UTC ב-7 באוקטובר, המיוחסים לחשבון מנהל מאגר ובוצעו דרך ממשק האינטרנט של GitHub. הקומיט שהארכיון מציין כקומיט הזדוני הראשון הוא 41b38f0, גרסה בת ארבעה קבצים מ-03:44:48 UTC ב-7 באוקטובר, שהודעתה היא "Add files via upload" ושהיא נושאת את החתימה ה-verified של GitHub — GitHub חותמת על קומיטים שנוצרים בעורך האינטרנט שלה, כך ש"verified" מתעד את משטח העריכה, ולא את האדם. הקומיט הזה לא נגע בקבצים מלבד typescript/lib/Math_Symbol.js ו-typescript/lib/setup.mjs, לפי ה-API של GitHub: המטען, ותו לא.

SafeDep מציעה קריאה של התנהגות המפעיל, המסומנת כהסקה שלה עצמה: העריכה הראשונה של hook ה-preinstall שברה את תחביר ה-JSON של הקובץ, וקומיט תיקון בא בעקבותיה כעבור תשע עשרה דקות, שאותו היא מתארת כתואם לאדם שעורך קבצים בדפדפן ולא ל-pipeline מתוסרט. שום דבר שפורסם על ידי Socket, SafeDep, Aikido, StepSecurity או Tensorlake אינו נוקב בשיטה שבה הושתלט על חשבון המתחזק.

התוקף לא נזקק לאסימון npm. SafeDep מדווח שהחשבון הפעיל את זרימת העבודה publish_npm.yaml של הפרויקט ידנית ב-8 באוקטובר בשעה 00:08 UTC; יומן הבנייה מראה את קבצי המטען בתוך קובץ ה-tar שפורסם. הגרסה השתמשה ב-npm trusted publishing, ובחבילות האחיות tensorlake-native-* שפורסמו מאותה הרצה נושאות מקור SLSA תקף — מקור שהוא באמת תקף לבנייה של קוד מקור מורעל. הגרסה פורסמה שתים עשרה דקות לאחר תחילת זרימת העבודה.

הארכיון מתעד שהמאגר נפרץ במשך בערך 20 שעות לפני שהפרסום הופעל — הפער שהציר הזמן שלהלן פורש קומיט אחר קומיט — מה שתואם להצהרה של Tensorlake עצמה שהתוקף פרסם "דרך זרימת העבודה שלנו לשחרור".

מה עשה הפיילוד לאחר שהורץ

A screenshot of a card titled 'A credential stealer with an AI-tooling list', kicked 'tensorlake@0.5.144 · what the payload collected', subtitled 'Per Socket, SafeDep and Tensorlake's advisory — grouped by what each collector reached for'. Three columns of paired labels sit side by side. 'Publishing and source control' lists npm tokens from .npmrc, the token API and the OIDC exchange; GitHub tokens with a repository and workflow permission check; GitHub Actions secrets read from Runner.Worker memory; and cryptocurrency browser wallets across 14 extensions. 'AI agent tooling' lists ~/.claude.json for Claude Code settings; ~/.kiro/settings/mcp.json for Kiro MCP config; .cursor, Windsurf and Zed config and MCP files; and .claude/settings.json and .vscode/tasks.json written back into reachable repositories. 'Cloud, cluster and endpoint' lists AWS via STS, SSM Parameter Store and Secrets Manager; Kubernetes service-account tokens and kubeconfigs; HashiCorp Vault at 127.0.0.1:8200; SSH and GPG keys, .env files and Docker and CLI files; the Wallets row, wallet.dat, Exodus, Electrum and MetaMask; and saved passwords via a downloaded HackBrowserData binary. A footer reads 'Collector list per Socket's initial assessment, SafeDep's decoded payload analysis and the Tensorlake advisory (GHSA-8g63-53c9-65j2). Socket flags AI development tooling for Claude Code, Cursor, Kiro, Windsurf and Zed by name.'

ההערכה של Socket מזהה איסוף מקבצים מקומיים, מסביבות CI, וממקורות Kubernetes ו-Vault, בנוסף להוצאת נתונים החוצה, להתמדה ולהרצת קוד שסופק מרחוק. SafeDep שחזרה את המטען המפוענח: lib/setup.mjs מוריד את Bun 1.3.13 מהפצת GitHub הרשמית ומשתמש בו כדי להריץ את התולעת, והוא מסתיים על מריצי CI — היעד הוא מכונת מפתח, לא סוכן בנייה. SafeDep גם מצאה שהמטען נושא עותק פשוט של אותו טוען, שאותו הוא שותל בחבילות ובמאגרים אחרים.

הפיילוד מריץ שלוש שכבות ערפול, שאותן פענחה SafeDep בלי להריץ את הדגימה: מערך מחרוזות של מערפל, צופן מותאם אישית המשתמש במלח svksjrhjkcejg — זהה לזה שדווח בפרצת keyv המוקדמת יותר — ו-AES-256-GCM על אחד עשר קבצים מוטמעים, כולל סקריפטים, הוקים ושני מפתחות ציבוריים RSA. השורה הראשונה שלו נושאת את תג הבנייה WORMTAG='tensrlake', עם שגיאת איות, וכך SafeDep מבדילה את הבנייה הזו מהדבקה חוזרת מתמשכת.

מעבר להגדרות כלי ה-AI, רשימת האיסוף רחבה וספציפית: ~/.claude.json ו-~/.kiro/settings/mcp.json עבור הגדרות סוכן; מפתחות SSH, קבצי CLI בענן, .npmrc, .env, קבצי Docker ו-Kubernetes והיסטוריית shell; wallet.dat בנוסף לנתוני Exodus, Electrum ו-Ledger Live ותוספי ארנק בדפדפן כגון MetaMask ו-Phantom; AWS STS, ‏SSM Parameter Store ו-Secrets Manager; סודות GitHub Actions הנקראים מזיכרון התהליך Runner.Worker; ואסימוני חשבון שירות של Kubernetes ואסימוני Vault. הוא שאב קובץ בינארי לפי פלטפורמה מ-iseekaigogo[.]com/hbd/<platform> והריץ אותו עם הארגומנטים "dump -b all -c password -f json" — ארגומנטים התואמים לכלי HackBrowserData, אם כי SafeDep מציין שהקובץ הבינארי עצמו לא אותר ומתייג את הזיהוי כהסקה. התולעת, מוסיף SafeDep, יוצאת בלוקאלים רוסיים.

A screenshot of a card titled 'Persistence, resolution, and the wipe trigger', kicked 'tensorlake@0.5.144 · staying power', subtitled 'The release was removed in under two hours; the implant it installed was built to outlive that.' Three columns sit side by side. 'Persistence: gh-token-monitor' lists a systemd user service on Linux, a LaunchAgent com.user.gh-token-monitor on macOS, a scheduled task with a PowerShell monitor on Windows, and files left behind in ~/.local/bin, ~/.config and %LOCALAPPDATA%. 'Endpoint resolution order' lists, in numbered order, the primary endpoint iseekaigogo[.]com:443/router; an Ethereum contract 0xb614155Fd88...1Df091B9; the public RPC endpoints that contract is read through, given as ~30 by Socket and 35 by SafeDep; signed GitHub commits found by the string thebeautifulmarchoftime; and public dead-drop repositories described as 'Shai-Hulud: Here We Go Again'. 'The dead-man switch' lists a poll of api.github.com/user every 60s, for 24 hours, firing on a 40x response to that token, with the effect rm -rf ~/ (advisory: home dir), armed only if the account has no orgs, and the order that matters: remove monitor, then revoke. A footer reads 'Per Socket's blog and SafeDep's analysis, with the C2 endpoint, the contract and the gh-token-monitor service confirmed in Tensorlake's advisory. Socket and SafeDep give different counts of the public RPC endpoints the contract is read through.'

ההתמדה היא מכוונת. Socket כתבה על המטען: "השילוב הזה מרחיב את הסיכון מעבר למפתח API בודד שנגנב," והוסיפה כי "ההתמדה יכולה לשמר את גישת התוקף לאחר שהתלות שנפגעה מוסרת." SafeDep מדווחת שהתולעת מבצעת קומיטים של קבצי hook של Claude Code ו-VS Code תחת זהות מחבר ה-git claude, ושותלת תהליך עבודה בשם "Run Copilot" שמוציא את כל סודות המאגר ואז מוחק את ההרצה ואת הענף. הייעוץ של Tensorlake אומר למפתחים שבודקים את הלוגים שלהם לחפש ענף בשם dependabot/github_actions/format/setup-formatter וקומיטים שנכתבו תחת אותה זהות.

ההתפשטות פועלת על טוקנים גנובים ולא על פגיעות שנייה. Socket אומרת שהתולעת ממנה את החבילות המשויכות לזהות הפרסום של הקורבן, בונה אסמכתאות מקור של Sigstore, ומפרסמת מחדש גרסאות מורעלות. SafeDep מוסיפה את הפרט שבתוך CI היא מוסיפה תלות של git וחותמת את הפלט שלה באמצעות Fulcio ו-Rekor — כך שהמקור על החבילה שהיא מפרסמת לאחר מכן תקף כמו שהמקור על 0.5.144 היה.

עשרים השעות שלפני הפרסום

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

A screenshot of a card titled 'Compromised source in the repo, then one manual publish', kicked 'tensorlake@0.5.144 · the ~20-hour window', subtitled 'All times UTC. Commit times per SafeDep's timeline and the GitHub API; publish and removal times per the Tensorlake advisory.' Three columns sit side by side. '7 October 2026 — source, main branch' lists 01:20 setup.mjs and Math_Symbol.js added; 01:24 the preinstall script added; 01:43 package.json JSON repaired; 02:13 to 03:44 four loader and payload revisions; 03:44 commit 41b38f0, the payload commit; 03:57 the version set to 0.5.144. '8 October 2026 — release and removal' lists 00:08 publish_npm.yaml started by hand; 01:12:07 version 0.5.144 published to npm; 01:22:02 issue #1014 opened by StepSecurity; 01:23:10 flagged by Socket, about eleven minutes in; 02:54 the version removed, after roughly 1h 40m live; 20:24 version 0.5.145 published next. '9 October 2026 — disclosure closed' lists advisory GHSA-8g63-53c9-65j2; pull request #1016, source reverted and 0.5.145 cut; issue #1014 closed as completed; 0.5.143 as the last version stated unaffected; and no usage seen, per Tensorlake's user-agent telemetry. A footer reads 'The ~20-hour gap between the first rogue commit and the publish is SafeDep's commit timeline, and matches the archive's own upstream record.'

קריאה לרוחב: קובצי המטען נחתו בענף הראשי של המאגר ב-7 באוקטובר, הגרסה הוגדרה ל-0.5.144 בשעה 03:57 באותו בוקר, ושום דבר לא פורסם עד שחשבון הפעיל ידנית את זרימת העבודה של השחרור בשעה 00:08 ביום שלמחרת. קוד המקור שנפרץ שהה בענף במשך כעשרים שעות לפני שצינור הבנייה של הפרויקט עצמו בנה אותו. זו כל המתקפה על נתיב השחרור — בלי אישור מזויף, בלי קובץ tar שפורסם מחדש. נתוני המקור היו מדויקים לגבי בנייה של קוד שלעולם לא היה אמור להימצא בענף.

מפסק איש המת

החלק באירוע הזה שחסר תקדים בפרצות npm קודמות הוא מה שקורה לאחר שקורבן מגיב כראוי. אם אסימון ה-GitHub הגנוב שייך לחשבון ללא ארגונים, כך מדווחת SafeDep, התולעת מתקינה gh-token-monitor: שירות שדוגם את api.github.com/user עם אותו אסימון גנוב בכל 60 שניות, במשך 24 שעות. כאשר GitHub מחזיר 40x — כפי שקורה ברגע שהאסימון מבוטל — המוניטור מריץ handler שסופק על ידי התוקף ומוחק את ספריית הבית של המשתמש.

Socket מתארת את אותו רכיב ככזה שמשתמש במוניטור PowerShell שנשמר דרך ONLOGON משימה מתוזמנת, ומפעיל handler שסופק על ידי התוקף דרך Invoke-Expression, ומציינת שהקוד מכיל את המחרוזת המילולית "IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner", שנראתה בגלים קודמים של Shai-Hulud. SafeDep מכנה את ה-handler בשם rm -rf ~/. הניסוח של Socket מפורש שזה מופעל ללא תלות במקום שבו מתרחש הביטול; המוניטור הוא מקומי, והביטול אינו. כל ארבעת המקורות — Socket, SafeDep, StepSecurity וההמלצה של Tensorlake עצמה — מציגים את אותו סדר פעולות: הסירו תחילה את המוניטור, ורק אחר כך בטלו.

מה מבוסס, ומה רק מוסק

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

• Tensorlake מציינת שאין שימוש בגרסה. בהודעת הייעוץ שלה נאמר כי החברה מנטרת את השימוש ב-SDK באמצעות כותרות user-agent וכי היא "לא ראתה כל שימוש בגרסה זו מאז ששוחררה". זוהי הצהרה של ספק בנוגע לטלמטריה של עצמו, ולא ספירה מבוקרת.

• נתון ההורדות אינו ספירת הדבקות. Socket מדווחת על החבילה בכ-12,000 הורדות שבועיות ומציינת שזה מתאר את השימוש הכולל בחבילה, ולא הורדות של הגרסה הזדונית; SafeDep מציינת כ-106,000 הורדות חודשיות עבור אותה חבילה. אף אחד מהם אינו ראיה לכך ש-0.5.144 הורצה במקום כלשהו. חלון המהדורה המסומנת של Socket וחלון השעתיים של Tensorlake עולים בקנה אחד עם גרסה שהוסרה לפני שהתפשטה.

• הבאגים של המטען עצמו אולי הגבילו אותו. SafeDep מצאה שניים: נתיב ההתפשטות של npm זקוק ל-./dist/Math_Symbol.js בדיסק ונעצר בלעדיו, והמטעין המושתל מחפש את ai_init.js בעוד שהתולעת כותבת math_init.js. SafeDep מתייגת את הממצאים האלה כמגבלות על ההתפשטות, והמאמר מתייחס אליהם כקריאה של ניתוח אחד את הקוד, ולא כהבטחה שדבר לא התפשט.

• אישור הפרובננס אמיתי. זו אינה טענה שנויה במחלוקת: פרובננס של npm מתעד היכן נבנתה חבילה ובאיזה תהליך עבודה, ובמקרה הזה הוא תיעד את האמת — תהליך השחרור של הפרויקט עצמו, אשר בנה קוד מקור מורעל. ההתראה של Tensorlake אומרת זאת במפורש: "החבילה נושאת פרובננס npm תקף". Socket מנסחת את אותה נקודה בפשטות כשהיא מציינת שפרובננס "אומר היכן נבנתה חבילה. הוא לא אומר שהקוד בטוח".

מספר פרטים בתפוצה הם טענות המבוססות על ניתוח יחיד, ויש לקרוא אותן ככאלה. המנגנון הספציפי שבו השיג התוקף את חשבונו של המתחזק לא פורסם על ידי אף אחת מחברות החקירה או על ידי Tensorlake. כתובת החוזה של Ethereum ותפקידה בפתרון נקודת הקצה מופיעים בתיאורים של SafeDep ו-Socket — Socket אומרת שהמטען פותר את נקודת הקצה שלו דרך חוזה Ethereum תוך שימוש בכ-30 נקודות קצה ציבוריות של RPC עם גיבוי GitHub, בעוד SafeDep מעמידה את מספר ה-RPC על 35 ומדווחת שב-8 באוקטובר החזיר החוזה את iseekaigogo.com — ו-Tensorlake מאשרת את נקודת הקצה ואת החוזה בהודעת הייעוץ שלה. מספר ה-RPC המדויק שונה בין שני הכתובים; התכנון אינו.

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

מה השתנה לאחר מכן

התגובה הייתה מהירה ומתואמת יותר מהתקרית.

• הגרסה נעלמה. היא הייתה זמינה מ-01:12 עד 02:54 UTC ב-8 באוקטובר, לפי Tensorlake; SafeDep מדווחת ש-npm הסירה אותה. בשאילתה ישירה במרשם npm ב-10 באוקטובר עבור מאמר זה, 0.5.144 אינה מופיעה עוד בין הגרסאות שפורסמו של החבילה, והתג העדכני ביותר של החבילה הוא 0.5.148. ההתראה של Tensorlake מפנה מפתחים אל 0.5.143 כגרסה האחרונה שאינה מושפעת.

• הייעוץ פורסם עם תיקון. הייעוץ GHSA-8g63-53c9-65j2 של Tensorlake קובע שחבילות ה-PyPI וה-crates.io של tensorlake וממשק ה-CLI של tensorlake לא הושפעו — רק חבילת ה-npm הושפעה — ושגרסאות 0.5.143 וקודמות לא הושפעו. SafeDep מדווחת שהמתחזקים החזירו את קוד המקור בבקשת משיכה #1016 ושחררו 0.5.145.

• שרשור החשיפה שלם באופן יוצא דופן. החוקר של StepSecurity, אשיש קורמי, פתח בעיה ב-GitHub #1014 בשעה 01:22:02 UTC ב־8 באוקטובר — כעשר דקות לאחר הפרסום — תוך הצבעה על הפוסט של StepSecurity עצמה אודות מה שהיא מכנה תולעת "טוקן ערובה". אוליבר סמית' מ-Aikido העיר שהמטען הוחדר בקומיט 41b38f0 וזיהה אותו כגונב מידע חדש בשם Shai-Hulud. המתחזק דיוויד לורנצו — זהות המתחזק הרשומה בחבילת npm בתור calavera — השיב ב־9 באוקטובר ואישר את ייעוץ האבטחה וסגר את הבעיה כהושלמה באותו היום. כותרת הבעיה עצמה משקפת את הראיות: היא החלה כדיווח "עלול להיות זדוני" ושונה שמה, עד לסגירתה, לתיאור המטען כזדוני ללא הסתייגות.

• הקמפיין שאליו זה שייך גדול יותר מהחבילה הזו. Socket, SafeDep ו-Aikido כולם ממקמים את מהדורת Tensorlake בגל ChainDrop / Mini Shai-Hulud שתועד לראשונה בתחילת אוגוסט 2026, שכל קורבנות ה-npm שלו כללו את keyv, cacheable וחבילות קשורות. הודעת הייעוץ של Tensorlake אומרת את אותו הדבר, תוך ציטוט של Socket, SafeDep ו-Aikido.

ההנחיה של Socket לכל מי שהתקין את הגרסה היא שיש להתייחס למארח כאל נפגע: בדקו lockfiles, מניפסטים ויומני בנייה עבור הגרסה; הסירו את השירות gh-token-monitor לפני ביטול של כל טוקן; לאחר מכן החליפו אישורים ממחשב נקי. ההודעה של Tensorlake מוסיפה את אותו סדר ומציעה לבדוק במרשמי החבילות ובמאגרים שהטוקנים החשופים יכלו לכתוב אליהם עבור הפצות לא צפויות. המאמר של Aikido ממליץ להגדיר ignore-scripts=true ב.npmrc כדי לחסום הוקים של הת�קנה, ולהתייחס לכל מחשב שבו ההוק רץ כאל נפגע לחלוטין.

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