Vulnérabilité critique d’exécution de code à distance dans React Native Community CLI (CVE-2025-11953)

CVE-2025-11953 est une vulnérabilité critique d’exécution de code à distance (RCE) affectant le CLI React Native Community, largement utilisé, et plus particulièrement le paquet @react-native-community/cli-server-api dans les versions allant de 4.8.0 à 20.0.0-alpha.2. Ce paquet, maintenu par Meta et téléchargé entre 1,5 et 2 millions de fois par semaine, permet aux développeurs de créer des applications mobiles React Native.

La vulnérabilité provient d’un défaut d’injection de commandes système dans le serveur de développement Metro, qui se lie par défaut aux interfaces externes plutôt qu’à localhost. Un attaquant non authentifié sur le même réseau peut exploiter cette faille pour exécuter des commandes système arbitraires sur les ordinateurs des développeurs utilisant des versions vulnérables du CLI.

Avec un score CVSS de 9.8 (Critique) et une grande facilité d’exploitation sans authentification, cette vulnérabilité représente un risque significatif pour l’ensemble de l’écosystème des développeurs React Native. Les organisations doivent donner la priorité à l’application immédiate du correctif pour prévenir toute compromission potentielle de la chaîne d’approvisionnement et le contrôle des postes de travail des développeurs.

Produitcom.facebook.react.packagerconnection
Date06/11/2025 10:50:36
Informations
  • Tendance

Résumé technique

La vulnérabilité se situe dans le point de terminaison /open-url du serveur de développement Metro, qui gère les requêtes POST sans validation d’entrée adéquate. Le point de terminaison accepte les entrées fournies par l’utilisateur et les transmet directement à la fonction non sécurisée open() fournie par le paquet NPM open, entraînant l’exécution de commandes système.

Flux du code vulnérable :

  1. Le serveur Metro se lie par défaut aux interfaces réseau externes (0.0.0.0) au lieu de se limiter à localhost (127.0.0.1).
  2. Le serveur expose le point de terminaison /open-url qui accepte les requêtes POST.
  3. L’entrée contrôlée par l’utilisateur provenant du corps de la requête POST est transmise sans assainissement à la fonction open().
  4. La fonction open() exécute des commandes système pour ouvrir des URL/fichiers, mais peut être manipulée pour exécuter des commandes arbitraires.

Caractéristiques de l’exploitation :

  • Systèmes Windows : les attaquants obtiennent une exécution complète de commandes système avec un contrôle total sur les arguments, permettant l’exécution de commandes shell arbitraires telles que cmd.exe /c commande-malveillante.
  • Systèmes Linux/macOS : les attaquants peuvent lancer des exécutables arbitraires avec un contrôle limité sur les paramètres (bien que des recherches supplémentaires puissent permettre une exécution complète de commandes).

Exemple de vecteur d’attaque :

Un attaquant sur le même réseau peut envoyer une requête POST malveillante au serveur Metro exposé :

POST http://<target-ip>:8081/open-url
Content-Type: application/json

{
  "url": "malicious-payload-here"
}

La vulnérabilité est particulièrement dangereuse car :

  • Aucune authentification requise – tout attaquant réseau peut l’exploiter.
  • Configuration par défaut vulnérable – les développeurs sont exposés dès le lancement de react-native start.
  • Accessible depuis le réseau – non limité à des exploitations locales ; les attaquants sur le même Wi-Fi, VPN ou réseau d’entreprise peuvent lancer l’attaque.
  • Ciblage des développeurs – compromettre les ordinateurs des développeurs peut mener à des attaques sur la chaîne d’approvisionnement affectant les applications en aval.

Recommandations

Le correctif (version 20.0.0) résout la vulnérabilité en validant et en assainissant correctement l’entrée avant de la transmettre à la fonction open(), empêchant ainsi l’injection de commandes.

Appliquer le correctif immédiatement

Mettez à jour le paquet @react-native-community/cli-server-api vers la version 20.0.0 ou supérieure dans tous les projets React Native. Cela peut être fait en :

  • Mettant à jour @react-native-community/cli vers la version 20.0.0 ou ultérieure (qui inclut la version corrigée de cli-server-api).
  • Exécutant npm update @react-native-community/cli-server-api ou yarn upgrade @react-native-community/cli-server-api dans chaque répertoire de projet.
  • Vérifiant la mise à jour avec npm ls @react-native-community/cli-server-api.

Implémenter des restrictions sur la liaison réseau

Si l’application du correctif n’est pas immédiatement possible, configurez le serveur de développement Metro pour qu’il se lie explicitement à localhost, en procédant comme suit :

  • Modifiez la configuration du serveur pour qu’il n’écoute que sur 127.0.0.1 au lieu de 0.0.0.0.
  • Utilisez des règles de pare-feu pour bloquer l’accès externe au port 8081 (port par défaut de Metro).
  • Exécutez les serveurs de développement derrière un VPN ou dans des segments de réseau isolés.

Recherche et surveillance

Lancez des évaluations de sécurité immédiates :

  • Analysez les journaux réseau à la recherche de requêtes POST suspectes vers les points de terminaison /open-url sur le port 8081.
  • Examinez les ordinateurs des développeurs pour détecter des signes de compromission, notamment l’exécution de processus inattendus.
  • Vérifiez les tentatives d’accès non autorisées depuis des adresses IP externes vers les serveurs de développement.
  • Surveillez les connexions sortantes inhabituelles depuis les ordinateurs des développeurs qui pourraient indiquer une activité de commande et contrôle (C2).

Appliquer une défense en profondeur

Implémentez des couches de sécurité supplémentaires :

  • Segmentation réseau : isolez les environnements de développement des réseaux de production.
  • Systèmes de détection d’intrusion (IDS) : configurez des alertes pour les modèles d’injection de commandes ciblant les serveurs Metro.
  • Solutions EDR (Endpoint Detection and Response) : déployez des solutions EDR sur les ordinateurs des développeurs pour détecter l’exécution de processus malveillants.
  • Analyse de la chaîne d’approvisionnement : implémentez une analyse automatisée des dépendances pour identifier les paquets vulnérables avant le déploiement.
  • Principe du moindre privilège : assurez-vous que les comptes des développeurs ne disposent pas de privilèges administratifs inutiles qui pourraient amplifier l’impact d’une compromission.

Vérifiez votre exposition

Tous les développeurs React Native ne sont pas vulnérables :

  • La vulnérabilité n’existe que si vous utilisez Metro comme serveur de développement – les développeurs utilisant des frameworks alternatifs qui ne reposent pas sur Metro ne sont pas concernés.
  • Vérifiez si votre flux de travail de développement utilise activement react-native start ou le bundler Metro.
  • Vérifiez si les versions vulnérables du paquet sont effectivement utilisées dans votre arbre de dépendances.

[Callforaction-THREAT-Footer]

Leave a Reply

Your email address will not be published. Required fields are marked *