SOC Prime Bias: Критичний

05 Гру 2025 16:35

CVE-2025-55182 та CVE-2025-66478: Високоточне виявлення RSC/Next.js RCE

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Стежити
CVE-2025-55182 та CVE-2025-66478: Високоточне виявлення RSC/Next.js RCE
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Вразливість виконання віддаленого коду впливає на додатки Next.js, які використовують React Server Components. Проблема може бути викликана без попереднього доступу шляхом надсилання спеціально сконструйованого багаточастинного HTTP-запиту. Хоча існує кілька публічних доказів концепції експлуатації, багато з них ненадійні або некоректні. Стаття представляє високоточну техніку виявлення, що покладається на характеристичну серверну помилку у відповідь.

Розслідування

Дослідники вивчили логіку аналізу компонент React Server і виявили, що посилання на властивість через двокрапку може викликати помилку 500, коли цільовий об’єкт відсутній. Вони потім створили багаточастинний пейлоад, який надійно викликає цю умову і підтвердили повторюваний шаблон відповіді. Запропоноване правило виявлення помічає HTTP 500 відповіді, які містять відмінний E{"digest" фрагмент у тілі.

Пом’якшення

Кроки з пом’якшення включають оновлення уражених версій Next.js до версій, що містять додаткові збереження навколо позначення двокрапкою. Організації повинні розгорнути WAF-правила для блокування шкідливої багаточастинної структури та забезпечити, що всі вхідні запити, які стосуються React Server Components, перевіряються та очищаються.

Відповідь

Команди безпеки повинні сканувати відкриті веб-додатки на запитані характеристики запитів-відповідей і пріоритетно виправити вразливі екземпляри Next.js. Якщо є підозра на експлуатацію, ізолюйте постраждалий сервер, зберігайте та переглядайте журнали для доказів виконання коду та застосовуйте відповідні патчі без затримки.

Потік атаки

Ми все ще оновлюємо цю частину. Підпишіться, щоб отримувати повідомлення

Повідомити мене

Імітаційне виконання

Передумова: Тест на телеметрію та базовий перед польотом має бути пройдено.

Підстава: У цьому розділі детально описано точне виконання техніки противника (TTP), призначеної для виклику правила виявлення. Команди та наратив повинні прямо відображати ідентифіковані TTPs і мати на меті генерувати точну телеметрію, очікувану логікою виявлення. Абстрактні або нерелевантні приклади призведуть до неправильної діагностики.

  • Опис атаки та команди:
    Атакуючий, визначивши, що ціль працює на уразливій версії Next.js, створює шкідливий багаточастинний запит, що іммітує потік завантаження активу. ЗадаючиUser-AgentдоAssetnote/1.0.0та ін’єктуючи внутрішні заголовки Next.jsNext-Action: xтаX-Nextjs-Request-Id: b5dce965, пейлоад активує серверну компоненту, яка десеріалізує ненадійні дані, викликаючи виняток під час виконання. Сервер відповідає HTTP 500 і включає серіалізований дайджест (E{"digest), за яким спостерігає правило виявлення.

  • Скрипт регресійного тестування:

    #!/usr/bin/env bash
    #
    # Симуляція експлуатації для правила виявлення Next.js RCE (T1595.002)
    # Генерує точний зразок пакету, очікуваного правилом Sigma.
    #
    TARGET="http://127.0.0.1"
    ENDPOINT="/"
    USER_AGENT="Assetnote/1.0.0"
    BOUNDARY="----WebKitFormBoundary$(date +%s)"
    
    # Мінімальний багаточастинний корпус; вміст не має значення для виявлення.
    read -r -d '' PAYLOAD <<EOF
    --$BOUNDARY
    Content-Disposition: form-data; name="file"; filename="exploit.txt"
    Content-Type: text/plain
    
    exploit
    --$BOUNDARY--
    EOF
    
    curl -s -o /dev/null -w "%{http_code}n" -X POST "${TARGET}${ENDPOINT}" 
      -H "User-Agent: ${USER_AGENT}" 
      -H "Next-Action: x" 
      -H "X-Nextjs-Request-Id: b5dce965" 
      -H "Content-Type: multipart/form-data; boundary=${BOUNDARY}" 
      --data-binary "$PAYLOAD"

    Запустіть скрипт на машині, яка може дістатися до цільового веб-сервера. Очікуваний HTTP-статус500та журнал помилок сервера міститимеE{"digestрядок.

  • Команди очищення:

    # Жодних постійних змін на цілі; просто видаліть будь-які тимчасові файли локально
    rm -f /tmp/exploit_payload.tmp 2>/dev/null || true