זו אינה חולשה במוצר. זה מקרה שבו חבילות npm תקינות קיבלו גרסה חדשה שמישהו אחר שתל בה קוד, והיא עלתה לרשת תחת השם המוכר. מי שהתקין באותו חלון זמן קיבל את הקוד הזה יחד עם החבילה.
מה החולשה?
כשמתקינים חבילת npm, ההתקנה יכולה להריץ קוד. זה מנגנון קיים ולגיטימי, חבילות משתמשות בו כדי לבנות רכיבים מקומיים אחרי ההורדה. הוא גם אומר שהתקנה אינה פעולה פסיבית של העתקת קבצים.
בגרסאות הנגועות הוטמע קובץ בשם install.js שרץ בזמן ההתקנה, ולפי הרשומה הוא מפעיל נוזקה בשם node-gyp.dll על מכונות Windows. השם נבחר כדי להיראות כמו רכיב לגיטימי, כי node-gyp הוא כלי בנייה מוכר בעולם ה-npm.
לסוג המקרה הזה קוראים supply chain compromise, פגיעה בשרשרת האספקה. מה שמייחד אותו הוא שהקורבן לא עשה שום דבר חריג. הוא הריץ פקודת התקנה רגילה על חבילה שהוא סומך עליה כבר שנים.
ועוד נקודה שמשנה את הגודל: eslint-config-prettier אינו משהו שרוב האנשים מתקינים ישירות. הוא מגיע כתלות של תלות, בתוך סביבת הפיתוח, ולכן הוא יכול להיות מותקן אצל מי שמעולם לא שמע עליו.
מי מושפע?
הרשומה מונה מספרי גרסאות מדויקים, וזה המקרה שבו המספרים הם כל הסיפור.
eslint-config-prettier בגרסאות 8.10.1, 9.1.1, 10.1.6 ו-10.1.7. eslint-plugin-prettier בגרסאות 4.2.2 ו-4.2.3. synckit 0.11.9. pkgr/core 0.2.8. got-fetch 5.1.1 ו-5.1.2.
המטען עצמו מכוון ל-Windows. מכונת פיתוח על Linux או על macOS שהתקינה את אותה גרסה לא תריץ את ה-DLL, אבל היא כן משכה חבילה נגועה, ולכן היא עדיין רלוונטית לשאלה מה נכנס לפרויקט ולמה שנבנה ממנו.
האם מנוצלת בפועל?
כאן השאלה שונה מהרגיל, כי הניצול הוא עצם ההפצה. הגרסאות האלה היו זמינות להתקנה, ומי שהתקין אותן הריץ את הקוד.
החולשה נוספה ב-22 בינואר 2026 לקטלוג ה-KEV שמנהלת סוכנות הסייבר האמריקאית CISA, הרשימה שמרכזת חולשות עם עדות לניצול ממשי, ומועד התיקון לגופים הפדרליים בארצות הברית היה 12 בפברואר 2026. את האירוע תיארו בזמנו כמה גופי מחקר, בהם Socket ו-StepSecurity.
מה עושים?
בדקו אילו גרסאות מותקנות אצלכם בפועל. npm ls eslint-config-prettier eslint-plugin-prettier synckit got-fetch מציג את מה שיושב בעץ התלויות, כולל מה שנגרר פנימה בלי שביקשתם.
בדקו גם את קובץ הנעילה. package-lock.json שומר את הגרסאות שהותקנו, וגם אם היום מותקנת גרסה תקינה, הקובץ יגיד לכם אם בשלב כלשהו נמשכה אחת מהגרסאות שברשימה.
אם אחת מהן הותקנה על מכונת Windows, זו כבר לא שאלה של עדכון. על המכונה הזאת רץ קוד לא ידוע, ולכן מה שנדרש הוא טיפול באירוע: החליפו פרטי אימות ו-token-ים שהיו זמינים מאותה מכונה, כולל אלה של מערכות הבנייה, וחפשו את node-gyp.dll.
עברו לגרסאות תקינות והצמידו אותן. אחרי אירוע כזה, נעילת גרסאות במקום משיכה חופשית של הגרסה האחרונה היא ההבדל בין להחליט מה נכנס לבין לקבל את מה שמגיע.