כותרת Penligent

חשיפת CVE-2025-66478: הרוצח השקט בפעולות השרת של Next.js

מבוא: שינוי הפרדיגמה ומחירו

ההתפתחות של פיתוח אתרים מודרני הייתה מרוץ לקראת שלמות. ההשקה של App Router ב-Next.js 13+, המופעל על ידי React Server Components (RSC), הבטיחה עולם שבו הגבול בין הלקוח לשרת יטשטש עד כדי היעלמות. מפתחים יכלו להפעיל שאילתות מסד נתונים ישירות מרכיבי ממשק המשתמש, והמסגרת טיפלה בעבודה הקשה.

עם זאת, CVE-2025-66478 הגיע כבדיקת מציאות אכזרית. דורג בציון CVSS ביקורתי של 10.0, פגיעות זו של ביצוע קוד מרחוק (RCE) אינה רק שגיאת קידוד; היא מייצגת הפרה מהותית של האמון בשכבת הסידוריות המניעה את האינטרנט המודרני.

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

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

CVE-2025-66478 Penligent

ארכיטקטורת חוסר הביטחון: הבנת טיסת RSC

כדי לנצל את CVE-2025-66478, יש להבין תחילה את הפרוטוקול הקנייני שבו Next.js משתמש. כאשר משתמש מתקשר עם פעולת שרת (למשל, שליחת טופס), הדפדפן אינו שולח מטען JSON סטנדרטי. במקום זאת, הוא שולח זרם סדרתי המותאם לתהליך ההידרציה של React.

פורמט זה, המכונה "פרוטוקול Flight", נראה כך בגוף ה-HTTP הגולמי:

טקסט רגיל

0:["$@1",["$@2",null]] 1:I{"id":"./src/actions/user.js","chunks":["client-chunk-123"],"name":"updateUser","async":true} 2:{"name":"John Doe", "email":"[email protected]"}

מלכודת האמון

הפגיעות קיימת מכיוון שמפרק הסידור בצד השרת פועל באופן נלהב מדי. בגרסאות המושפעות של Next.js (15.x לפני 15.1.9 ו-16.x לפני 16.0.7), המסגרת מנסה לשחזר את עץ הרכיבים המוגדר במטען זה. לפני אימות קפדני אם למשתמש המבקש יש את הסמכות ליצור מופעים של מודולים ספציפיים אלה.

Next.js מאפשר ללקוח להעביר הפניות למודולים בצד השרת. הכוונה היא לאפשר לשרת לבצע פעולות ספציפיות שהוגדרו על ידי המפתח. אולם, החיסרון הוא שתוקף יכול לתפעל הפניות אלה. במקום להפנות אל היעד המיועד ./src/actions/user.js, מטען מעוצב יכול להתייחס למובנים פנימיים של Node.js או לגאדג'טים של זיהום אב טיפוס הזמינים בהיקף הגלובלי.

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

חשיפת CVE-2025-66478

שרשרת ההרג של התוקף: מהסיור ועד לפריצה

מהנדס אבטחה הממונה על הגנת יישום Next.js חייב להבין את אופן הפעולה של התוקף. ניצול CVE-2025-66478 אינו פשוט כמו הפעלת סקריפט; הוא דורש הבנה מעמיקה של מרכיבי הבנייה של היעד.

שלב 1: סיור פסיבי וטביעת אצבעות

התוקף מאשר תחילה שהיעד מריץ גרסה פגיעה של Next.js. זה נעשה בקלות על ידי בדיקת כותרות HTTP (X-Powered-By: Next.js) או ניתוח המבנה של _next/static/ ספרייה.

שלב 2: איסוף "מזהה הפעולה"

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

התוקפים כותבים סקריפט לחילוץ החשישים הללו על ידי ניתוח חבילות ה-JavaScript בצד הלקוח (Webpack chunks). הם מחפשים את registerServerReference שיחות בתוך הקוד הממוזער:

JavaScript

// קטע קוד לקוח ממוזער ...registerServerReference(a,"a9fa42b4c7d1",null)...

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

שלב 3: בניית המטען (טכניקת "React2Shell")

לאחר שנמצא נקודת כניסה תקפה, התוקף בונה את המטען "React2Shell". הם יוצרים POST בקשה עם סוג תוכן של טקסט/רכיב (או דומה, בהתאם לגרסה).

הגוף הוא מבנה אובייקטים רקורסיבי שנועד להפעיל את גאדג'ט הדה-סריאליזציה.

  • יעד: child_process.exec או fs.writeFileSync.
  • מנגנון: ה-payload מגדיר הפניה למודול שמצביעה על ספריות המערכת הללו.
  • הדק: בעת ניתוח, השרת מנסה "לפתור" את המודול.

שלב 4: ביצוע והוצאה

השרת מפרש את הזרם. האובייקט הזדוני מופעל. הפקודה מי אני פועל. מכיוון שהדבר קורה מחוץ לתחום (התגובה HTTP עלולה לקרוס או להחזיר שגיאה), תוקפים מתוחכמים משתמשים בטכניקות OOB (Out-of-Band) ומאלצים את השרת לשלוח בקשת DNS לדומיין מבוקר (לדוגמה, ping attacker.com) כדי לאשר את ה-RCE.

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

בעקבות CVE-2025-66478, ארגונים רבים סרקו את ההיקף שלהם באמצעות כלי DAST (בדיקת אבטחת יישומים דינמית) מסורתיים וקיבלו אישור על תקינות. הם טעו.

סורקים מסורתיים (כגון OWASP ZAP, סריקות ברירת המחדל של Burp Suite Pro או Nessus) נכשלים כאן מסיבות מהותיות:

  1. בורות בפרוטוקול: סורקים סטנדרטיים מתייחסים לגוף פרוטוקול ה-Flight כאל טקסט אטום. הם מנסים להוסיף מרכאות SQL (' או 1=1) או תגי XSS. Next.js פשוט דוחה אותם כזרמי בינארי פגומים. הסורק רואה שגיאה 500 ומניח שהאתר "בטוח", בעוד הפגיעות נותרת ללא שינוי.
  2. עיוורון קונטקסטואלי: סורק מסורתי אינו יודע כיצד לגרד קטעי Webpack כדי למצוא את מזהי הפעולות. הוא אינו יכול "לנחש" חתימה אלפאנומרית בת 12 תווים. ללא המזהה, הדלת נעולה, והסורק אפילו לא מגיע לנתיב הקוד הפגיע.
  3. התחמקות מ-WAF: מכיוון שמבנה המטען מחקה נתוני רכיב React לגיטימיים, WAFs מבוססי חתימה מתקשים להבחין בין שליחת טופס משתמש מורכב לבין ניצול RCE סדרתי.

פער זיהוי זה מדגיש צורך קריטי בתעשייה: לא ניתן לפתור את הבעיות של עידן ה-GenAI באמצעות כלים של Web 2.0.

CVE-2025-66478 PoC Penligent

היתרון של הבינה המלאכותית: איך Penligent פותרת את חידת ההיגיון

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

כאשר Penligent מנתח יישום Next.js, הוא משתמש ב- סוכן RSC. להלן ההבדלים בינו לבין סורק רגיל:

1. ניתוח נכסים חכם (ניתוח מפת מקור)

במקום לבצע fuzzing עיוור, הסוכנים של Penligent מורידים ומנתחים את תוצרי ה-build בצד הלקוח. ה-AI מפרש את עץ התחביר המופשט (AST) של ה-JavaScript הממוזער כדי לזהות שרת$הפניה סמנים. הוא משחזר ביעילות את המפה של כל פונקציה בצד השרת החשופה לאינטרנט, ויוצר מפת שטח התקפה מקיפה שאף סקריפט regex לא יכול להתחרות בה.

2. יצירת מטען מודע להקשר

Penligent מבין את הדקדוק של פרוטוקול React Flight. הוא אינו שולח זבל אקראי. הוא בונה בקשות Flight תחביריות מושלמות המכילות את המטען הזדוני המוטמע עמוק בתוך מבנים תקפים.

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

3. אימות לוגי לעומת זיהוי קריסות

בוחן חדירות אנושי יודע שטעות 500 אינה תמיד פגיעות, ו-200 OK אינו תמיד בטוח. Penligent מנתח את התנהגותי תגובה. אם זמן ההשהיה של הבקשה גדל ב-500 מילי-שניות לאחר הזרקת פקודת עיכוב זמן, Penligent מסיק שה-RCE הצליח, גם אם גוף התגובה HTTP ריק.

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

תיקון וחיזוק: הגנה מעמיקה

בעוד ששימוש בכלים כמו Penligent עוזר לכם לאתר את הפגיעות, תיקונה דורש גישה רב-שכבתית.

הקלה מיידית: התיקון

הפתרון העיקרי הוא לשדרג את Next.js באופן מיידי.

  • גרסאות קבועות: v15.1.9+, v16.0.7+.
  • מנגנון: גרסאות אלה מציגות רשימת אישור קפדנית עבור סוגי סדרתיים ומנקה הפניות למודולים במהלך שלב ההידרציה, ובכך מונעת יצירת מופעים של מודולי מערכת שרירותיים.

הגנה משנית: חיזוק זמן הריצה

אל תסתמכו רק על תיקון המסגרת. הנחו שהיום הבא של 0-day נמצא ממש מעבר לפינה.

  1. הרשאה מינימלית: ודא שתהליך Node.js שמריץ את Next.js מוגבל בהרשאותיו. הוא לא צריך להיות בעל גישה לרוט, ולא צריך להיות מסוגל לכתוב למערכת הקבצים (למעט ספריות זמניות ספציפיות).
  2. פילוח רשת: הגבל את החיבורים היוצאים. אם שרת Next.js שלך נפרץ, הוא לא אמור להיות מסוגל ליזום חיבור מעטפת הפוכה לכתובת IP חיצונית.
  3. השבת מפות מקור בייצור: אמנם אבטחה באמצעות עמימות אינה אסטרטגיה, אך השבתת מפות המקור הציבוריות מקשה משמעותית על תוקפים (ובוטים אוטומטיים) למפות את מזהי הפעולות של השרת שלך.

תצורה מתקדמת

אם אינך יכול לשדרג באופן מיידי, תוכל להשבית באופן זמני את פעולות השרת ב- next.config.js, אם כי הדבר עלול לפגוע בתפקוד היישום:

JavaScript

module.exports = { experimental: { serverActions: false, // מתג כיבוי חירום }, }

מסקנה: העתיד של בינה מלאכותית ואבטחה

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

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

כלים כמו Penligent לא רק מזהים באגים, אלא גם מאמתים את תקינות הלוגיקה של היישום שלכם. בעידן שבו פגם אחד בפיענוח יכול להוביל לפריצה מלאה, שותף AI שעובד 24/7 כדי לבדוק את ההגנות שלכם הוא כבר לא מותרות – הוא הכרח.

השלבים הבאים:

אל תחכו לפריצה. בדקו את גרסת Next.js שלכם עוד היום. אם אתם מנהלים תשתית קריטית, שקלו לפרוס בדיקת חדירה אוטומטית וסוכנת כדי לאמת את החשיפה שלכם ל-CVE-2025-66478 ולפגיעויות אחרות המבוססות על לוגיקה.

הפניות טכניות וקישורים לרשויות

שתף את הפוסט:
פוסטים קשורים