SOC Prime Bias: Critique

05 Déc 2025 16:35

CVE-2025-55182 et CVE-2025-66478 : Détection de haute fidélité pour RSC/Next.js RCE

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Suivre
CVE-2025-55182 et CVE-2025-66478 : Détection de haute fidélité pour RSC/Next.js RCE
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Une faille d’exécution de code à distance affecte les applications Next.js qui utilisent les composants serveur React. Le problème peut être déclenché sans accès préalable en envoyant une requête HTTP multipart spécialement conçue. Bien que plusieurs exploits de preuve de concept publics existent, beaucoup sont peu fiables ou incorrects. L’article présente une technique de détection de haute fidélité qui repose sur une réponse d’erreur serveur caractéristique.

Investigation

Les chercheurs ont examiné la logique d’analyse des composants serveur React et ont découvert qu’une référence de propriété délimitée par deux-points peut produire une erreur 500 lorsque l’objet ciblé est manquant. Ils ont ensuite construit un charge utile multipart qui déclenche de manière fiable cette condition et ont confirmé un schéma de réponse répétable. La règle de détection proposée signale les réponses HTTP 500 qui contiennent le fragment distinctif E{"digest" dans le corps.

Atténuation

Les étapes d’atténuation incluent la mise à niveau des versions de Next.js affectées vers des versions intégrant des gardes supplémentaires autour de la notation par deux-points. Les organisations devraient déployer des règles WAF pour bloquer la structure multipart malveillante et s’assurer que toutes les requêtes entrantes touchant les composants serveur React sont validées et assainies.

Réponse

Les équipes de sécurité devraient analyser les applications web exposées pour détecter la signature requête-réponse décrite et prioriser les correctifs pour les instances Next.js vulnérables. Si une exploitation est suspectée, isoler le serveur impacté, préserver et examiner les journaux pour des preuves d’exécution de code, et appliquer les patchs pertinents sans délai.

Flux d’attaque

Nous mettons toujours à jour cette partie. Inscrivez-vous pour être notifié

Notifiez-moi

Exécution de simulation

Condition préalable : la vérification pré-flight de la télémetrie et de la base de référence doit avoir réussi.

Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT directement refléter les TTP identifiés et viser à générer exactement la télémetrie attendue par la logique de détection. Les exemples abstraits ou non liés entraîneront un mauvais diagnostic.

  • Narratif et commandes d’attaque :
    L’attaquant, ayant identifié que la cible utilise une version vulnérable de Next.js, crée une requête multipart malveillante qui imite un flux de chargement d’actif légitime. En configurant le User-Agent à Assetnote/1.0.0 et en injectant les en-têtes internes Next.js Next-Action: x et X-Nextjs-Request-Id: b5dce965, la charge utile déclenche le composant côté serveur qui désérialise des données non fiables, entraînant une exception d’exécution. Le serveur répond avec HTTP 500 et inclut le digeste sérialisé (E{"digest), que la règle de détection surveille.

  • Script de test de régression :

    #!/usr/bin/env bash
    #
    # Simulation d'exploitation pour la règle de détection RCE de Next.js (T1595.002)
    # Génère le modèle de paquet exact attendu par la règle Sigma.
    #
    TARGET="http://127.0.0.1"
    ENDPOINT="/"
    USER_AGENT="Assetnote/1.0.0"
    BOUNDARY="----WebKitFormBoundary$(date +%s)"
    
    # Corps multipart minimal ; le contenu est inutile pour la détection.
    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"

    Exécutez le script sur une machine pouvant atteindre le serveur web cible. Le statut HTTP attendu est 500 et le journal d’erreurs du serveur contiendra la chaîne E{"digest.

  • Commandes de nettoyage :

    # Aucune modification persistante sur la cible ; simplement supprimer les fichiers temporaires locaux
    rm -f /tmp/exploit_payload.tmp 2>/dev/null || true