{"id":174931,"date":"2026-09-28T13:52:18","date_gmt":"2026-09-28T11:52:18","guid":{"rendered":"https:\/\/jfrog.com\/blog\/la-vulnerabilite-rce-critique-cve-2025-11953-met-en-danger-les-developpeurs-react-native\/"},"modified":"2026-09-30T13:33:33","modified_gmt":"2026-09-30T11:33:33","slug":"cve-2025-11953-critical-react-native-community-cli-vulnerability","status":"publish","type":"post","link":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/","title":{"rendered":"La vuln\u00e9rabilit\u00e9 RCE critique CVE-2025-11953 met en danger les d\u00e9veloppeurs React Native"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-156364 aligncenter\" src=\"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/03-Blog-inner-main-img-863X300.png\" alt=\"\" width=\"863\" height=\"300\" \/><\/p>\n<p><strong>Mise \u00e0 jour du 9 f\u00e9vrier 2026\u00a0:<\/strong> clarification de la diff\u00e9rence d\u2019impact avant la version\u00a017.0.0 et \u00e0 partir de la version\u00a017.0.0.<\/p>\n<p>L\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a r\u00e9cemment d\u00e9couvert et divulgu\u00e9 la CVE-2025-11953, une vuln\u00e9rabilit\u00e9 de s\u00e9curit\u00e9 critique (<a href=\"https:\/\/www.first.org\/cvss\/calculator\/3-1#CVSS:3.1\/AV:N\/AC:L\/PR:N\/UI:N\/S:U\/C:H\/I:H\/A:H\" target=\"_blank\" rel=\"noopener\">CVSS\u00a09,8<\/a>) affectant le package NPM <a href=\"https:\/\/www.npmjs.com\/package\/@react-native-community\/cli\" target=\"_blank\" rel=\"noopener\">@react-native-community\/cli<\/a>, extr\u00eamement populaire et t\u00e9l\u00e9charg\u00e9 environ 2\u00a0millions de fois par semaine.<\/p>\n<p>Cette vuln\u00e9rabilit\u00e9 permet \u00e0 des pirates distants non authentifi\u00e9s de d\u00e9clencher facilement l\u2019ex\u00e9cution de commandes arbitraires du syst\u00e8me d\u2019exploitation sur la machine ex\u00e9cutant le serveur de d\u00e9veloppement de react-native-community\/cli, ce qui repr\u00e9sente un risque important pour les d\u00e9veloppeurs.<\/p>\n<p>React Native est un framework populaire permettant de cr\u00e9er des applications mobiles multiplateformes \u00e0 l\u2019aide de JavaScript. La vuln\u00e9rabilit\u00e9 se trouve dans un package appartenant au projet plus vaste <a href=\"https:\/\/github.com\/react-native-community\/cli\" target=\"_blank\" rel=\"noopener\">React Native Community CLI<\/a>, qui a \u00e9t\u00e9 s\u00e9par\u00e9 du code source principal de react-native il y a quelques ann\u00e9es afin d\u2019en faciliter la maintenance. Cette interface en ligne de commande est un ensemble d\u2019outils qui aident les d\u00e9veloppeurs \u00e0 cr\u00e9er des applications mobiles React Native. Elle est officiellement utilis\u00e9e pour cr\u00e9er des <a href=\"https:\/\/reactnative.dev\/docs\/getting-started-without-a-framework\" target=\"_blank\" rel=\"noopener\">applications mobiles React Native sans recourir \u00e0 un framework<\/a>, ainsi que des applications <a href=\"https:\/\/microsoft.github.io\/react-native-windows\/\" target=\"_blank\" rel=\"noopener\">React Native pour Windows<\/a>, React Native pour macOS, etc.<\/p>\n<p>Contrairement aux vuln\u00e9rabilit\u00e9s classiques des serveurs de d\u00e9veloppement, qui ne peuvent \u00eatre exploit\u00e9es que depuis la machine locale d\u2019un d\u00e9veloppeur, un second probl\u00e8me de s\u00e9curit\u00e9 rep\u00e9r\u00e9 par l\u2019\u00e9quipe dans le code source principal de React Native <strong>expose le serveur de d\u00e9veloppement<\/strong> <strong>aux attaques provenant de r\u00e9seaux externes<\/strong>. Ce second probl\u00e8me rend la premi\u00e8re vuln\u00e9rabilit\u00e9 extr\u00eamement critique.<\/p>\n<p>Nous tenons \u00e0 remercier l\u2019\u00e9quipe de s\u00e9curit\u00e9 et les ing\u00e9nieurs de Meta <a href=\"https:\/\/github.com\/react-native-community\/cli\/commit\/15089907d1f1301b22c72d7f68846a2ef20df547\" target=\"_blank\" rel=\"noopener\">pour leur prise en charge rapide de la vuln\u00e9rabilit\u00e9 CVE-2025-11953<\/a>.<\/p>\n<h2>Qui est affect\u00e9 par la CVE-2025-11953\u00a0?<\/h2>\n<p>Les d\u00e9veloppeurs qui ont initialis\u00e9 leur projet React Native avec une version vuln\u00e9rable de @react-native-community\/cli et qui <strong>ex\u00e9cutent le serveur de d\u00e9veloppement Metro<\/strong> \u00e0 l\u2019aide de l\u2019une des commandes suivantes ou de commandes similaires sont vuln\u00e9rables \u00e0 CVE-2025-11953\u00a0:<\/p>\n<pre class=\"language-yaml\"><code> npm start\r\n npm run [start|android|ios|windows|macos]\r\n npx react-native [start|run-android|run-ios|run-windows|run-macos]\r\n npx @react-native-community\/cli [start|run-android|run-ios|run-windows|run-macos]\r\n<\/code><\/pre>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-156251 aligncenter\" src=\"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/React-Native-CVE-image1.png\" alt=\"\" width=\"400\" height=\"413\" \/><\/p>\n<p style=\"text-align: center;\"><i><span style=\"font-weight: 400;\">\u00a0Serveur de d\u00e9veloppement de react-native (Metro) en cours d\u2019ex\u00e9cution<\/span><\/i><\/p>\n<p style=\"text-align: left;\">Bien que la vuln\u00e9rabilit\u00e9 soit exploitable par d\u00e9faut lors de l\u2019initialisation d\u2019un projet react-native \u00e0 l\u2019aide de @react-native-community\/cli, il est important de comprendre que tous les d\u00e9veloppeurs ayant install\u00e9 cette biblioth\u00e8que en tant que d\u00e9pendance ne sont pas n\u00e9cessairement vuln\u00e9rables.<\/p>\n<p>Plus pr\u00e9cis\u00e9ment, les d\u00e9veloppeurs qui utilisent React Native avec un framework n\u2019employant pas Metro comme serveur de d\u00e9veloppement ne sont g\u00e9n\u00e9ralement pas vuln\u00e9rables.<\/p>\n<p>La vuln\u00e9rabilit\u00e9 affecte directement les versions\u00a04.8.0 \u00e0 20.0.0-alpha.2 du package @react-native-community\/cli-server-api. Elle est corrig\u00e9e depuis la version\u00a020.0.0.<\/p>\n<p>Dans les versions\u00a04.8.0 ant\u00e9rieures \u00e0 la version\u00a017.0.0, la vuln\u00e9rabilit\u00e9 peut permettre \u00e0 des pirates distants non authentifi\u00e9s d\u2019ex\u00e9cuter des fichiers ex\u00e9cutables d\u00e9j\u00e0 pr\u00e9sents sur une machine distante (sans fournir le moindre argument). Cette possibilit\u00e9 peut \u00eatre utile aux pirates capables de transf\u00e9rer, d\u2019une mani\u00e8re ou d\u2019une autre, des fichiers ex\u00e9cutables sp\u00e9cialement con\u00e7us vers la machine distante.<\/p>\n<p>Cependant, \u00e0 partir de la version\u00a017.0.0 et jusqu\u2019\u00e0 la version\u00a020.0.0-alpha.2, <strong>la vuln\u00e9rabilit\u00e9 devient encore plus critique<\/strong> et peut conduire \u00e0 l\u2019ex\u00e9cution compl\u00e8te et non authentifi\u00e9e de commandes distantes du syst\u00e8me d\u2019exploitation. Nous allons en pr\u00e9senter les d\u00e9tails ici.<\/p>\n<p>Voici comment v\u00e9rifier si le package vuln\u00e9rable est pr\u00e9sent dans un projet Node.js particulier\u00a0:<\/p>\n<pre class=\"language-yaml\"><code> cd \r\n npm list @react-native-community\/cli-server-api\r\n<\/code><\/pre>\n<p>Le package peut \u00e9galement \u00eatre install\u00e9 globalement sur votre syst\u00e8me. Vous pouvez le v\u00e9rifier en ex\u00e9cutant\u00a0:<\/p>\n<pre class=\"language-yaml\"><code> npm list -g @react-native-community\/cli-server-api\r\n<\/code><\/pre>\n<p>Notez que le package concern\u00e9 est g\u00e9n\u00e9ralement inclus avec @react-native-community\/cli dans les versions correspondantes. Par cons\u00e9quent, les projets utilisant les versions 4.8.0 \u00e0 20.0.0\u2011alpha.2 de @react-native-community\/cli sont susceptibles d\u2019inclure des versions vuln\u00e9rables de @react-native-community\/cli-server-api.<\/p>\n<p>Sous Windows, nous avons d\u00e9montr\u00e9 que cette vuln\u00e9rabilit\u00e9 permet l\u2019ex\u00e9cution de commandes arbitraires du syst\u00e8me d\u2019exploitation (notamment de commandes shell avec un contr\u00f4le total des param\u00e8tres). Sous macOS et Linux, la vuln\u00e9rabilit\u00e9 permet l\u2019ex\u00e9cution de fichiers ex\u00e9cutables arbitraires avec un contr\u00f4le limit\u00e9 des param\u00e8tres. Des recherches suppl\u00e9mentaires pourraient permettre d\u2019obtenir l\u2019ex\u00e9cution de commandes arbitraires du syst\u00e8me d\u2019exploitation sur ces plateformes.<\/p>\n<h2>Comment att\u00e9nuer la CVE-2025-11953\u00a0?<\/h2>\n<p>L\u2019ex\u00e9cution des \u00e9tapes suivantes permettra d\u2019att\u00e9nuer la CVE-2025-11953\u00a0:<\/p>\n<ul>\n<li>Mettez \u00e0 jour @react-native-community\/cli-server-api vers la version\u00a020.0.0 ou une version ult\u00e9rieure, qui comprend un correctif pour cette vuln\u00e9rabilit\u00e9, dans chacun de vos projets react-native. Il s\u2019agit de la solution recommand\u00e9e.<\/li>\n<li>Pour renforcer la s\u00e9curit\u00e9, ou si la mise \u00e0 niveau est impossible, liez explicitement le serveur de d\u00e9veloppement \u00e0 l\u2019interface localhost en ajoutant l\u2019option \u00ab\u00a0&#8211;host 127.0.0.1\u00a0\u00bb, comme dans les exemples ci-dessous\u00a0:<\/li>\n<\/ul>\n<pre class=\"language-yaml\"><code> npx react-native start --host 127.0.0.1\r\n npx @react-native-community\/cli start --host 127.0.0.1\r\n<\/code><\/pre>\n<h2>R\u00e9sum\u00e9 de la CVE-2025-11953<\/h2>\n<p>Le serveur de d\u00e9veloppement Metro, lanc\u00e9 par @react-native-community\/cli, se lie par d\u00e9faut aux interfaces externes (ce qui constitue d\u00e9j\u00e0 en soi un petit probl\u00e8me de s\u00e9curit\u00e9). Le point de terminaison <code style=\"color: black; background-color: lightgray;\">\/open-url<\/code> du serveur traite une requ\u00eate POST comprenant une valeur saisie par l\u2019utilisateur. Cette valeur est transmise \u00e0 la fonction non s\u00e9curis\u00e9e <code style=\"color: black; background-color: lightgray;\">open()<\/code>, fournie par le package NPM open, ce qui entra\u00eene l\u2019ex\u00e9cution d\u2019une commande du syst\u00e8me d\u2019exploitation.<\/p>\n<p>Un pirate non authentifi\u00e9 pr\u00e9sent sur le r\u00e9seau peut ainsi envoyer une requ\u00eate POST au serveur et ex\u00e9cuter des commandes shell arbitraires avec des param\u00e8tres qu\u2019il contr\u00f4le.<\/p>\n<p style=\"text-align: center;\"><code style=\"background-color: lightgray;\"><img loading=\"lazy\" decoding=\"async\" width=\"988\" height=\"899\" class=\"wp-image-156254 aligncenter\" src=\"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/React-Native-CVE-image3.png\" alt=\"&lt;code style=\" \/>\" width=\"400\" height=\"364\" \/&gt;<em>ex\u00e9cution de calc.exe \u00e0 la suite de notre exploitation de la vuln\u00e9rabilit\u00e9<\/em><\/code><\/p>\n<h2>D\u00e9tails techniques de la CVE-2025-11953<\/h2>\n<p>Lors de la cr\u00e9ation d\u2019un projet React Native, les d\u00e9veloppeurs peuvent choisir <a href=\"https:\/\/reactnative.dev\/docs\/environment-setup\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">d\u2019utiliser un framework existant<\/span><\/a>, comme Expo, qui emploie sa propre interface en ligne de commande et n\u2019est pas vuln\u00e9rable. Ils peuvent \u00e9galement <a href=\"https:\/\/reactnative.dev\/docs\/getting-started-without-a-framework\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">cr\u00e9er leur application sans framework<\/span><\/a>, comme nous le ferons ici, s\u2019ils pr\u00e9f\u00e8rent d\u00e9velopper leur propre framework ou s\u2019ils ont certaines contraintes avec lesquelles un framework donn\u00e9 interf\u00e8re.<\/p>\n<p>Le processus de d\u00e9veloppement commence g\u00e9n\u00e9ralement par l\u2019utilisation de @react-native-community\/cli afin d\u2019initialiser un nouveau projet \u00e0 l\u2019aide de la commande <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">npx @react-native-community\/cli init MyApp<\/code>. Celle-ci met en place la structure, les d\u00e9pendances et les fichiers de configuration n\u00e9cessaires au projet. Pendant la phase de d\u00e9veloppement actif, les d\u00e9veloppeurs s\u2019appuient sur l\u2019interface en ligne de commande pour lancer le serveur de d\u00e9veloppement Metro (\u00e0 l\u2019aide de commandes telles que <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">npx react-native start<\/code>). Ce serveur transmet le bundle JavaScript \u00e0 l\u2019application en cours d\u2019ex\u00e9cution (sur un \u00e9mulateur ou un appareil mobile) et active des fonctionnalit\u00e9s de d\u00e9veloppement essentielles, telles que le rechargement \u00e0 chaud et l\u2019actualisation rapide, afin de permettre des it\u00e9rations rapides.<\/p>\n<p>Lors de l\u2019ex\u00e9cution de <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">npx react-native start<\/code>, le fichier cli.js de react-native transmet la commande au package @react-native-community\/cli (une d\u00e9pendance facultative de react-native), qui ex\u00e9cute sa fonction <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">build\\index.js::setupAndRun()<\/code>. \u00a0 Cette fonction charge les commandes de l\u2019interface en ligne de commande (c\u2019est-\u00e0-dire la <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">commande start<\/code>) en appelant <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">loadConfigAsync<\/code>, qui trouve et utilise le fichier <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">node-modules\/react-native\/react-native.config.js<\/code> pendant le processus.<\/p>\n<pre class=\"language-javascript\"><code> const commands = [];\r\n const {\r\n   bundleCommand,\r\n   startCommand,\r\n } = require('@react-native\/community-cli-plugin');\r\n commands.push(bundleCommand, startCommand);\r\n<\/code><\/pre>\n<p style=\"text-align: center;\"><em>node-modules\/react-native\/<strong>react-native.config.js<\/strong> &#8211; ajoute <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">startCommand<\/code> \u00e0 une liste de commandes export\u00e9e, qui est ensuite ajout\u00e9e \u00e0 la liste des commandes de l\u2019interface en ligne de commande.<\/em><\/p>\n<p>Le fichier react-native.config.js importe <a href=\"https:\/\/github.com\/facebook\/react-native\/blob\/v0.80.2\/packages\/community-cli-plugin\/src\/commands\/start\/index.js#L19\" target=\"_blank\" rel=\"noopener\"><b>startCommand<\/b><\/a> depuis @react-native\/community-cli-plugin, qui est charg\u00e9 d\u2019ex\u00e9cuter le serveur de d\u00e9veloppement.<\/p>\n<pre class=\"language-javascript\"><code> import runServer from '.\/runServer';\r\n \/* ... *\/\r\n const startCommand: Command = {\r\n   name: 'start',\r\n   func: runServer,\r\n   description: 'Start the React Native development server.',\r\n<\/code><\/pre>\n<p style=\"text-align: center;\"><em>Extrait du fichier <a href=\"https:\/\/github.com\/facebook\/react-native\/blob\/v0.80.2\/packages\/community-cli-plugin\/src\/commands\/start\/index.js#L19\"><span style=\"font-weight: 400;\">index.js<\/span><\/a> de la commande start<\/em><\/p>\n<p>Lorsque la commande <strong>start<\/strong> s\u2019ex\u00e9cute &#8211; elle appelle <a href=\"https:\/\/github.com\/facebook\/react-native\/blob\/v0.80.2\/packages\/community-cli-plugin\/src\/commands\/start\/runServer.js\"><span style=\"font-weight: 400;\">runServer.js<\/span><\/a>:<\/p>\n<pre class=\"language-javascript\"><code> \/* ... *\/\r\n\r\n import {createDevServerMiddleware} from '.\/middleware'; \/* *** 1 *** *\/\r\n\r\n \/* ... *\/\r\n\r\n \/* *** 2 *** *\/\r\n const { middleware: <strong>communityMiddleware<\/strong> } = createDevServerMiddleware({\r\n     host: hostname,\r\n     port,\r\n     watchFolders,\r\n   });\r\n\r\n \/* ... *\/\r\n\r\n   \/* *** 3 *** *\/\r\n   await <strong>Metro.runServer<\/strong>(metroConfig, {\r\n     host: args.host,\r\n     secure: args.https,\r\n     secureCert: args.cert,\r\n     secureKey: args.key,\r\n     unstable_extraMiddleware: [<strong>communityMiddleware<\/strong>, middleware],\r\n     websocketEndpoints: {\r\n       ...communityWebsocketEndpoints,\r\n       ...websocketEndpoints,\r\n     },\r\n   });\r\n<\/code><\/pre>\n<p style=\"text-align: center;\"><em>Version simplifi\u00e9e de <a href=\"https:\/\/github.com\/facebook\/react-native\/blob\/v0.80.2\/packages\/community-cli-plugin\/src\/commands\/start\/runServer.js\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">runServer.js<\/span><\/a><\/em><\/p>\n<p><span style=\"font-weight: 400;\">runServer.js<\/span> effectue les op\u00e9rations suivantes\u00a0:<\/p>\n<ol>\n<li>Le code importe la fonction<strong> createDevServerMiddleware<\/strong> depuis <a href=\"https:\/\/github.com\/facebook\/react-native\/blob\/v0.80.2\/packages\/community-cli-plugin\/src\/commands\/start\/middleware.js#L85\"><span style=\"font-weight: 400;\">.\/middleware<\/span><\/a>, qui l\u2019importe elle-m\u00eame depuis le fichier index.ts de @react-native-community\/cli-server-api.<\/li>\n<li>Il ex\u00e9cute <strong>createDevServerMiddleware<\/strong>, qui cr\u00e9e un <strong>middleware<\/strong>, c\u2019est-\u00e0-dire une fonction ajout\u00e9e \u00e0 un serveur HTTP qui intercepte les requ\u00eates entrantes, ajoute des fonctionnalit\u00e9s, puis les transmet au gestionnaire suivant. Dans notre cas, le gestionnaire <a href=\"https:\/\/github.com\/react-native-community\/cli\/blob\/v19.1.1\/packages\/cli-server-api\/src\/index.ts#L38\"><span style=\"font-weight: 400;\">ajout\u00e9<\/span><\/a> qui nous int\u00e9resse est <a href=\"https:\/\/github.com\/react-native-community\/cli\/blob\/v19.1.1\/packages\/cli-server-api\/src\/index.ts#L38\"><b>\/open-url<\/b><\/a>, pris en charge par le gestionnaire <strong>openURLMiddleware<\/strong>. Le middleware est affect\u00e9 \u00e0 la variable <strong>communityMiddleware<\/strong>.<\/li>\n<li>Ex\u00e9cute le serveur Metro, avec <strong>communityMiddleware<\/strong> comme param\u00e8tre. Il s\u2019agit du serveur de d\u00e9veloppement de la CLI.<\/li>\n<\/ol>\n<p>Examinons maintenant le gestionnaire <strong>openURLMiddleware<\/strong> ajout\u00e9 au serveur dans le cadre de <strong>communityMiddleware<\/strong>\u00a0:<\/p>\n<pre class=\"language-javascript\"><code> async function openURLMiddleware(req: IncomingMessage, ...) {\r\n   if (req.method === 'POST') {\r\n\r\n     \/* ... *\/\r\n\r\n     const {url} = req.body as {url: string};\r\n\r\n     await open(url);\r\n\r\n     \/* ... *\/\r\n\r\n   }\r\n   next();\r\n }\r\n export default connect().use(json()).use(openURLMiddleware);\r\n<\/code><\/pre>\n<p style=\"text-align: center;\"><em>Extrait simplifi\u00e9 de la fonction openURLMiddleware du fichier <a href=\"https:\/\/github.com\/react-native-community\/cli\/blob\/v19.1.1\/packages\/cli-server-api\/src\/openURLMiddleware.ts\" target=\"_blank\" rel=\"noopener\"><i><span style=\"font-weight: 400;\">openURLMiddleware.ts<\/span><\/i><\/a><\/em><\/p>\n<p>Cette fonction est appel\u00e9e avec un param\u00e8tre <strong>req<\/strong> correspondant \u00e0 une requ\u00eate HTTP POST au format JSON, comprenant un champ de type cha\u00eene nomm\u00e9 <strong>url<\/strong>. Elle r\u00e9cup\u00e8re la valeur du champ <strong>url<\/strong>, <strong>qui est une cha\u00eene non assainie provenant directement de l\u2019utilisateur<\/strong>, et l\u2019utilise comme param\u00e8tre de l\u2019appel \u00e0 <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">open()<\/code>.<\/p>\n<ol>\n<li>La fonction <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">open()<\/code> est import\u00e9e depuis la version\u00a06.4.0 du <a href=\"https:\/\/github.com\/sindresorhus\/open\/tree\/v6.4.0\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">package NPM \u00ab\u00a0open\u00a0\u00bb<\/span><\/a>.<\/li>\n<li><code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">open(url)<\/code> effectue les op\u00e9rations suivantes sur les machines Windows\u00a0:\n<ol type=\"a\">\n<li>Elle d\u00e9finit \u00ab\u00a0cmd\u00a0\u00bb comme <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">commande<\/code> \u00e0 ex\u00e9cuter.<\/li>\n<li>Construit le tableau <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">cliArguments<\/code> : <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">['\/c', 'start', '\"\"', '\/b']<\/code><\/li>\n<li>Elle \u00e9chappe le caract\u00e8re &amp; en le faisant pr\u00e9c\u00e9der de ^ dans la <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">cha\u00eene cible<\/code>, qui correspond \u00e0 l\u2019URL que nous avons fournie.<\/li>\n<li>Ajoute la cha\u00eene <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">target<\/code> \u00e0 <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">cliArguments<\/code><\/li>\n<li>Ex\u00e9cute la commande suivante :<br \/>\n<code style=\"color: green; background-color: lightgray; font-family: courier; font-size: 16px;\"><code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">childProcess.spawn(command, cliArguments, childProcessOptions);<\/code><\/code><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>La commande cmd <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">start<\/code> peut accepter une seule URL comme param\u00e8tre et l\u2019ouvrir dans le navigateur par d\u00e9faut gr\u00e2ce \u00e0 son sch\u00e9ma d\u2019URI HTTP. Elle accepte \u00e9galement le format suivant pour ex\u00e9cuter des commandes\u00a0:<br \/>\n<code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">start \u201ctitle\u201d \/b command optional_command_parameters<\/code><\/p>\n<p>Dans le cas de <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">open(\u201ccalc.exe\u201d)<\/code>, le nouveau processus suivant est cr\u00e9\u00e9\u00a0:<\/p>\n<pre class=\"language-javascript\"><code> cmd \/c start \u201c\u201d \/b calc.exe\r\n<\/code><\/pre>\n<p>Ce qui entra\u00eene l\u2019ex\u00e9cution de calc.exe.<\/p>\n<p>Pour ex\u00e9cuter n\u2019importe quelle commande arbitraire, nous pourrions d\u00e9finir le param\u00e8tre <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">url<\/code> de open sur une commande <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">cmd \/c <\/code>. Par exemple, cela entra\u00eenerait la cr\u00e9ation du processus suivant\u00a0:<\/p>\n<pre class=\"language-javascript\"><code> cmd \/c start \"\" \/b cmd \/c echo abc &gt; c:\\temp\\pwned.txt\r\n<\/code><\/pre>\n<p style=\"text-align: center;\">React Native CVE &#8211; image5<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-156260\" src=\"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/React-Native-CVE-image5.png\" alt=\"React Native CVE - image5\" width=\"519\" height=\"178\" \/><br \/>\n<em>Un nouveau fichier pwned.txt est cr\u00e9\u00e9 dans C:\\temp \u00e0 la suite de notre commande cmd.exe \/c, ce qui prouve que l\u2019ex\u00e9cution de code arbitraire a r\u00e9ussi.<\/em><\/p>\n<h3>Surfaces d\u2019attaque sur diff\u00e9rents syst\u00e8mes d\u2019exploitation<\/h3>\n<p>Contrairement \u00e0 Windows, comme indiqu\u00e9 ci-dessus, le package open utilise des chemins de code diff\u00e9rents sous macOS et Linux, en ex\u00e9cutant respectivement <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">open <\/code> et <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">xdg-open <\/code>. Sur les syst\u00e8mes d\u2019exploitation de type Unix, le processus cr\u00e9\u00e9 s\u2019attend \u00e0 ce que chaque argument soit une cha\u00eene distincte dans <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">cliArguments<\/code>. Ce comportement diff\u00e8re de celui de Windows, o\u00f9 le processus cr\u00e9\u00e9 attend une seule cha\u00eene d\u2019argument <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">lpCommandLine<\/code>, <a href=\"https:\/\/github.com\/nodejs\/node\/blob\/v24.4.1\/deps\/uv\/src\/win\/process.c#L566\" target=\"_blank\" rel=\"noopener\">constitu\u00e9e<\/a> avant l\u2019appel \u00e0 <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">CreateProcess<\/code>.<\/p>\n<p>En outre, les deux commandes sont ex\u00e9cut\u00e9es sans shell. Combin\u00e9s au fait que nous ne contr\u00f4lons qu\u2019une seule cha\u00eene (url), ces \u00e9l\u00e9ments ne permettent pas d\u2019ex\u00e9cuter directement des commandes arbitraires sur macOS et Linux.<\/p>\n<p>xdg-open et open d\u00e9terminent tous deux si la cha\u00eene fournie correspond \u00e0 un fichier ou \u00e0 un URI, puis agissent en cons\u00e9quence.<\/p>\n<p>La surface d\u2019attaque permettant d\u2019obtenir une ex\u00e9cution de code sur ces syst\u00e8mes d\u2019exploitation peut d\u00e9pendre de la configuration du syst\u00e8me et comprend g\u00e9n\u00e9ralement les possibilit\u00e9s suivantes\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">Trouver un sch\u00e9ma d\u2019URI dont le gestionnaire peut permettre de franchir une \u00e9tape de l\u2019exploitation (soit gr\u00e2ce \u00e0 une fonctionnalit\u00e9, soit en exploitant une vuln\u00e9rabilit\u00e9 du gestionnaire lui-m\u00eame).<\/li>\n<\/ul>\n<ul>\n<li aria-level=\"1\">Ex\u00e9cuter un fichier local \u00e0 l\u2019aide d\u2019un sch\u00e9ma d\u2019URI classique ou file:\/\/. (\u00c9ventuellement, combiner cette m\u00e9thode \u00e0 une primitive de d\u00e9p\u00f4t de fichiers.)<\/li>\n<\/ul>\n<ul>\n<li aria-level=\"1\">Ex\u00e9cution d\u2019un fichier distant sur le serveur de l\u2019attaquant \u00e0 l\u2019aide des sch\u00e9mas d\u2019URI smb:\/\/, dav:\/\/ ou similaires. (ce qui d\u00e9clenchera probablement des bo\u00eetes de dialogue de s\u00e9curit\u00e9 demandant l\u2019approbation de l\u2019utilisateur victime)<\/li>\n<\/ul>\n<p>En conclusion, l\u2019ex\u00e9cution de commandes arbitraires du syst\u00e8me d\u2019exploitation sur ces plateformes pourrait \u00eatre r\u00e9alisable moyennant des recherches suppl\u00e9mentaires.<\/p>\n<h3>Le serveur de d\u00e9veloppement ne devrait-il pas se lier uniquement \u00e0 localhost\u00a0?<\/h3>\n<p>Comme nous l\u2019avons montr\u00e9 pr\u00e9c\u00e9demment, lors de l\u2019ex\u00e9cution du serveur de d\u00e9veloppement Metro, celui-ci indique explicitement qu\u2019il d\u00e9marre sur l\u2019interface localhost\u00a0:<\/p>\n<pre><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-156263 aligncenter\" src=\"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/React-Native-CVE-image4.png\" alt=\"React Native CVE - image4\" width=\"465\" height=\"171\" \/><\/pre>\n<p>Cependant, en r\u00e9alit\u00e9, nous pouvons constater que le serveur est \u00e0 l\u2019\u00e9coute sur toutes les interfaces ! (0.0.0.0 et IPv6 [::]) :<\/p>\n<pre><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-156264 aligncenter\" src=\"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/React-Native-CVE-image2.png\" alt=\"React Native CVE - image2\" width=\"472\" height=\"62\" \/><\/pre>\n<p>Comme indiqu\u00e9 pr\u00e9c\u00e9demment, cela est d\u00fb \u00e0 une autre vuln\u00e9rabilit\u00e9 que nous avons d\u00e9couverte et divulgu\u00e9e dans <a href=\"https:\/\/github.com\/facebook\/react-native\/tree\/HEAD\/packages\/community-cli-plugin#readme\">@react-native\/community-cli-plugin<\/a>, et qui a \u00e9t\u00e9 consid\u00e9r\u00e9e comme \u00ab\u00a0informative\u00a0\u00bb.<\/p>\n<p>Lors de l\u2019ex\u00e9cution de <strong>npx react-native start<\/strong>, le code atteint la fonction runServer.js::<a href=\"https:\/\/github.com\/facebook\/react-native\/blob\/eca6c1b96530da9c49bf996b84ea85aeb0248b2a\/packages\/community-cli-plugin\/src\/commands\/start\/runServer.js#L47\" target=\"_blank\" rel=\"noopener\">runServer<\/a> :<\/p>\n<pre class=\"language-javascript\"><code> async function runServer(\r\n   _argv: Array,\r\n   cliConfig: Config,\r\n   args: StartCommandArgs,\r\n ) {\r\n\r\n   \/* ... *\/\r\n\r\n   const hostname = args.host?.length ? args.host : 'localhost'; \/\/ *** 1 ***\r\n\r\n   \/* ... *\/\r\n\r\n   const protocol = args.https === true ? 'https' : 'http';\r\n   const devServerUrl = url.format({protocol, hostname, port}); \/\/ *** 2 ***\r\n\r\n   \/* ... *\/\r\n\r\n   console.info(`Starting dev server on ${devServerUrl}\\n`); \/\/ *** 3 ***\r\n\r\n   \/* ... *\/\r\n\r\n   await Metro.runServer(metroConfig, {\r\n     host: args.host, \/\/ *** 4 ***\r\n<\/code><\/pre>\n<p style=\"text-align: center;\"><em>Parties pertinentes de la fonction <a href=\"https:\/\/github.com\/facebook\/react-native\/blob\/eca6c1b96530da9c49bf996b84ea85aeb0248b2a\/packages\/community-cli-plugin\/src\/commands\/start\/runServer.js#L47\">runServer<\/a> du fichier runServer.js<\/em><\/p>\n<p><span style=\"font-weight: 400;\">Nous supposerons que la commande start est appel\u00e9e avec les valeurs par d\u00e9faut et sans param\u00e8tres facultatifs. Suivons chacune des \u00e9tapes de l\u2019exemple de code ci-dessus\u00a0:<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li aria-level=\"1\"><code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">hostname<\/code> contient le param\u00e8tre <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">host<\/code> s\u2019il a \u00e9t\u00e9 fourni, ou <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">\u00ab\u00a0localhost\u00a0\u00bb<\/code> dans le cas contraire.<\/li>\n<li aria-level=\"1\"><code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">devServerUrl<\/code> est form\u00e9e \u00e0 partir de hostname.<\/li>\n<li aria-level=\"1\">Le message trompeur <code style=\"color: black; background-color: lightgray;\">\u201cStarting dev server on http:\/\/localhost:8081\u201d<\/code> est affich\u00e9.<\/li>\n<li aria-level=\"1\">La fonction <strong>Metro.runServer<\/strong>, charg\u00e9e d\u2019ex\u00e9cuter le serveur de d\u00e9veloppement Metro, est appel\u00e9e avec <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">args.host<\/code> comme valeur du param\u00e8tre host. Cette valeur est <strong>undefined<\/strong>, alors que la variable <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">hostname<\/code> aurait d\u00fb \u00eatre utilis\u00e9e.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>Plus loin, le code de <a href=\"https:\/\/github.com\/facebook\/metro\/blob\/8390082c23026fff7b6df89eeb5773388891bdd2\/packages\/metro\/src\/index.flow.js#L260\" target=\"_blank\" rel=\"noopener\">la fonction runServer<\/a> de Metro utilise ce param\u00e8tre undefined lors de l\u2019appel \u00e0 <code style=\"color: black; background-color: lightgray; font-family: courier; font-size: 16px;\">httpServer.listen<\/code>.<\/p>\n<p>La documentation de <a href=\"https:\/\/nodejs.org\/api\/http.html#serverlisten\" target=\"_blank\" rel=\"noopener\">server.listen du module http<\/a> de Node nous permet de comprendre que cette fonction se comporte comme <a href=\"https:\/\/nodejs.org\/api\/net.html#serverlistenport-host-backlog-callback\" target=\"_blank\" rel=\"noopener\">server.listen<\/a> de net.Server, qui indique\u00a0:<\/p>\n<p>\u00ab\u00a0Si host est omis, le serveur acceptera les connexions sur l\u2019adresse\u00a0IPv6 non sp\u00e9cifi\u00e9e (::) lorsque le protocole\u00a0IPv6 est disponible, ou sur l\u2019adresse\u00a0IPv4 non sp\u00e9cifi\u00e9e (0.0.0.0) dans le cas contraire. Sur la plupart des syst\u00e8mes d\u2019exploitation, l\u2019\u00e9coute sur l\u2019adresse\u00a0IPv6 non sp\u00e9cifi\u00e9e (::) peut \u00e9galement amener net.Server \u00e0 \u00e9couter sur l\u2019adresse\u00a0IPv4 non sp\u00e9cifi\u00e9e (0.0.0.0).\u00a0\u00bb<\/p>\n<p>Transmettre explicitement <strong>undefined<\/strong> revient fonctionnellement \u00e0 omettre le param\u00e8tre. <strong>Par cons\u00e9quent, le serveur accepte par d\u00e9faut les connexions externes.<\/strong><\/p>\n<p>Les points de terminaison HTTP destin\u00e9s uniquement au d\u00e9veloppement sont donc expos\u00e9s aux <strong>pirates pr\u00e9sents sur le r\u00e9seau<\/strong>.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Cette vuln\u00e9rabilit\u00e9 montre que m\u00eame des failles simples d\u2019ex\u00e9cution de code \u00e0 distance, telles que la transmission d\u2019une saisie utilisateur au shell du syst\u00e8me, existent encore dans des logiciels r\u00e9els. C\u2019est particuli\u00e8rement le cas lorsque la fonction sensible dangereuse se trouve en r\u00e9alit\u00e9 dans du code tiers, comme la fonction \u00ab\u00a0open\u00a0\u00bb import\u00e9e dans cet exemple. Elle rappelle que les pratiques de programmation s\u00e9curis\u00e9e et l\u2019analyse de s\u00e9curit\u00e9 automatis\u00e9e sont indispensables pour emp\u00eacher que ces failles faciles \u00e0 exploiter n\u2019atteignent l\u2019environnement de production.<\/p>\n<p>Un bon moyen d\u2019\u00e9viter ces vuln\u00e9rabilit\u00e9s et d\u2019autres failles similaires dans votre propre code consiste \u00e0 d\u00e9ployer l\u2019analyse SAST de <a href=\"https:\/\/jfrog.com\/fr\/advanced-security\/\">JFrog Advanced Security<\/a>, qui permet aux d\u00e9veloppeurs de d\u00e9tecter et de corriger les probl\u00e8mes de s\u00e9curit\u00e9 d\u00e8s le d\u00e9but du processus de d\u00e9veloppement. Ne n\u00e9cessitant aucune configuration, <a href=\"https:\/\/jfrog.com\/fr\/sast\/\">JFrog SAST<\/a> s\u2019int\u00e8gre facilement aux workflows existants gr\u00e2ce \u00e0 des extensions d\u2019EDI et \u00e0 des outils en ligne de commande. Les d\u00e9veloppeurs acc\u00e8dent ainsi facilement \u00e0 des r\u00e9sultats exploitables sans interrompre leur travail.<\/p>\n<p>Par exemple, la capture d\u2019\u00e9cran ci-dessous montre comment JFrog SAST d\u00e9tecte la vuln\u00e9rabilit\u00e9 d\u00e9crite ci-dessus lorsqu\u2019elle est analys\u00e9e comme du code interne directement depuis Visual Studio Code\u00a0:<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-121306 aligncenter\" style=\"cursor: pointer;\" src=\"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/JFrog-detects-React-Native-vulnerability.png\" alt=\"\" width=\"2555\" height=\"1000\" data-lity=\"\" \/><em> JFrog SAST d\u00e9tecte la vuln\u00e9rabilit\u00e9 et affiche ses d\u00e9tails ainsi que les preuves de tra\u00e7age des donn\u00e9es (Data Trace Evidence). (Cliquez sur l\u2019image pour l\u2019agrandir.)<\/em><\/p>\n<p>JFrog SAST met en \u00e9vidence la vuln\u00e9rabilit\u00e9 dans le code, accompagn\u00e9e de ses d\u00e9tails, et fournit des preuves de tra\u00e7age des donn\u00e9es montrant le cheminement des donn\u00e9es depuis le champ req.body saisi par l\u2019utilisateur jusqu\u2019\u00e0 son utilisation comme param\u00e8tre de la fonction dangereuse open.<\/p>\n<p>Pour rester inform\u00e9 des autres attaques et vuln\u00e9rabilit\u00e9s zero-day, consultez r\u00e9guli\u00e8rement le <a href=\"https:\/\/research.jfrog.com\/\">centre de recherche en s\u00e9curit\u00e9 de JFrog<\/a> afin de d\u00e9couvrir les derni\u00e8res informations concernant les CVE, les vuln\u00e9rabilit\u00e9s et les correctifs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mise \u00e0 jour du 9 f\u00e9vrier 2026\u00a0: clarification de la diff\u00e9rence d\u2019impact avant la version\u00a017.0.0 et \u00e0 partir de la version\u00a017.0.0. L\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a r\u00e9cemment d\u00e9couvert et divulgu\u00e9 la CVE-2025-11953, une vuln\u00e9rabilit\u00e9 de s\u00e9curit\u00e9 critique (CVSS\u00a09,8) affectant le package NPM @react-native-community\/cli, extr\u00eamement populaire et t\u00e9l\u00e9charg\u00e9 environ 2\u00a0millions de fois par &hellip;<\/p>\n","protected":false},"author":812,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[10153],"tags":[11445,11362,11399,11446,11468,11286],"class_list":["post-174931","post","type-post","status-publish","format-standard","hentry","category-securite-et-devsecops","tag-cli","tag-cve","tag-rce","tag-react-native","tag-security-research","tag-vulnerabilites"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.7 (Yoast SEO v28.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>CVE-2025-11953\u00a0: vuln\u00e9rabilit\u00e9 RCE critique dans l\u2019interface en ligne de commande de React Native<\/title>\n<meta name=\"description\" content=\"D\u00e9couvrez comment l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a d\u00e9couvert et divulgu\u00e9 la CVE-2025-11953, qui menace les d\u00e9veloppeurs utilisant la populaire interface en ligne de commande de React Native.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/174931\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"La vuln\u00e9rabilit\u00e9 RCE critique CVE-2025-11953 met en danger les d\u00e9veloppeurs React Native\" \/>\n<meta property=\"og:description\" content=\"D\u00e9couvrez comment l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a d\u00e9couvert et divulgu\u00e9 la CVE-2025-11953, qui menace les d\u00e9veloppeurs utilisant la populaire interface en ligne de commande de React Native.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/\" \/>\n<meta property=\"og:site_name\" content=\"JFrog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/artifrog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-28T11:52:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-30T11:33:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/jfrog.com\/wp-content\/uploads\/2025\/08\/03-Blog-inner-main-img-863X300.png\" \/>\n\t<meta property=\"og:image:width\" content=\"863\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"adivi@jfrog.com\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jfrog\" \/>\n<meta name=\"twitter:site\" content=\"@jfrog\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"adivi@jfrog.com\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/\"},\"author\":{\"name\":\"adivi@jfrog.com\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#\\\/schema\\\/person\\\/338056045cd2eca48f83762c9059c7ef\"},\"headline\":\"La vuln\u00e9rabilit\u00e9 RCE critique CVE-2025-11953 met en danger les d\u00e9veloppeurs React Native\",\"datePublished\":\"2026-09-28T11:52:18+00:00\",\"dateModified\":\"2026-09-30T11:33:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/\"},\"wordCount\":2741,\"publisher\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jfrog.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/03-Blog-inner-main-img-863X300.png\",\"keywords\":[\"CLI\",\"CVE\",\"rce\",\"react native\",\"security-research\",\"vuln\u00e9rabilit\u00e9s\"],\"articleSection\":[\"S\u00e9curit\u00e9 et DevSecOps\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/\",\"url\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/\",\"name\":\"CVE-2025-11953\u00a0: vuln\u00e9rabilit\u00e9 RCE critique dans l\u2019interface en ligne de commande de React Native\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jfrog.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/03-Blog-inner-main-img-863X300.png\",\"datePublished\":\"2026-09-28T11:52:18+00:00\",\"dateModified\":\"2026-09-30T11:33:33+00:00\",\"description\":\"D\u00e9couvrez comment l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a d\u00e9couvert et divulgu\u00e9 la CVE-2025-11953, qui menace les d\u00e9veloppeurs utilisant la populaire interface en ligne de commande de React Native.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/#primaryimage\",\"url\":\"https:\\\/\\\/jfrog.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/03-Blog-inner-main-img-863X300.png\",\"contentUrl\":\"https:\\\/\\\/jfrog.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/03-Blog-inner-main-img-863X300.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/blog\\\/cve-2025-11953-critical-react-native-community-cli-vulnerability\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"La vuln\u00e9rabilit\u00e9 RCE critique CVE-2025-11953 met en danger les d\u00e9veloppeurs React Native\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/\",\"name\":\"JFrog\",\"description\":\"Deliver Trusted Software Releases at Speed and Scale\",\"publisher\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#organization\",\"name\":\"JFrog\",\"url\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/speedmedia2.jfrog.com\\\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\\\/jfrog.com\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Logo.svg\",\"contentUrl\":\"https:\\\/\\\/speedmedia2.jfrog.com\\\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\\\/jfrog.com\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Logo.svg\",\"width\":74,\"height\":73,\"caption\":\"JFrog\"},\"image\":{\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/artifrog\",\"https:\\\/\\\/x.com\\\/jfrog\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/455737\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCh2hNg76zo3d1qQqTWIQxDg\",\"https:\\\/\\\/www.wikidata.org\\\/wiki\\\/Q98608948\"],\"description\":\"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.\",\"legalName\":\"Jfrog, Inc.\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1001\",\"maxValue\":\"5000\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jfrog.com\\\/fr\\\/#\\\/schema\\\/person\\\/338056045cd2eca48f83762c9059c7ef\",\"name\":\"adivi@jfrog.com\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a4576a219390f82b178763771dde74932215f7d4fda5a49c39c07c3444cd3415?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a4576a219390f82b178763771dde74932215f7d4fda5a49c39c07c3444cd3415?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a4576a219390f82b178763771dde74932215f7d4fda5a49c39c07c3444cd3415?s=96&d=mm&r=g\",\"caption\":\"adivi@jfrog.com\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"CVE-2025-11953\u00a0: vuln\u00e9rabilit\u00e9 RCE critique dans l\u2019interface en ligne de commande de React Native","description":"D\u00e9couvrez comment l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a d\u00e9couvert et divulgu\u00e9 la CVE-2025-11953, qui menace les d\u00e9veloppeurs utilisant la populaire interface en ligne de commande de React Native.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/174931","og_locale":"fr_FR","og_type":"article","og_title":"La vuln\u00e9rabilit\u00e9 RCE critique CVE-2025-11953 met en danger les d\u00e9veloppeurs React Native","og_description":"D\u00e9couvrez comment l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a d\u00e9couvert et divulgu\u00e9 la CVE-2025-11953, qui menace les d\u00e9veloppeurs utilisant la populaire interface en ligne de commande de React Native.","og_url":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/","og_site_name":"JFrog","article_publisher":"https:\/\/www.facebook.com\/artifrog","article_published_time":"2026-09-28T11:52:18+00:00","article_modified_time":"2026-09-30T11:33:33+00:00","og_image":[{"width":863,"height":300,"url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/jfrog.com\/wp-content\/uploads\/2025\/08\/03-Blog-inner-main-img-863X300.png","type":"image\/png"}],"author":"adivi@jfrog.com","twitter_card":"summary_large_image","twitter_creator":"@jfrog","twitter_site":"@jfrog","twitter_misc":{"\u00c9crit par":"adivi@jfrog.com","Dur\u00e9e de lecture estim\u00e9e":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/#article","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/"},"author":{"name":"adivi@jfrog.com","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/338056045cd2eca48f83762c9059c7ef"},"headline":"La vuln\u00e9rabilit\u00e9 RCE critique CVE-2025-11953 met en danger les d\u00e9veloppeurs React Native","datePublished":"2026-09-28T11:52:18+00:00","dateModified":"2026-09-30T11:33:33+00:00","mainEntityOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/"},"wordCount":2741,"publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"image":{"@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/#primaryimage"},"thumbnailUrl":"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/03-Blog-inner-main-img-863X300.png","keywords":["CLI","CVE","rce","react native","security-research","vuln\u00e9rabilit\u00e9s"],"articleSection":["S\u00e9curit\u00e9 et DevSecOps"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/","url":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/","name":"CVE-2025-11953\u00a0: vuln\u00e9rabilit\u00e9 RCE critique dans l\u2019interface en ligne de commande de React Native","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/#primaryimage"},"image":{"@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/#primaryimage"},"thumbnailUrl":"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/03-Blog-inner-main-img-863X300.png","datePublished":"2026-09-28T11:52:18+00:00","dateModified":"2026-09-30T11:33:33+00:00","description":"D\u00e9couvrez comment l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a d\u00e9couvert et divulgu\u00e9 la CVE-2025-11953, qui menace les d\u00e9veloppeurs utilisant la populaire interface en ligne de commande de React Native.","breadcrumb":{"@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/#primaryimage","url":"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/03-Blog-inner-main-img-863X300.png","contentUrl":"https:\/\/jfrog.com\/wp-content\/uploads\/2025\/08\/03-Blog-inner-main-img-863X300.png"},{"@type":"BreadcrumbList","@id":"https:\/\/jfrog.com\/fr\/blog\/cve-2025-11953-critical-react-native-community-cli-vulnerability\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jfrog.com\/fr\/"},{"@type":"ListItem","position":2,"name":"La vuln\u00e9rabilit\u00e9 RCE critique CVE-2025-11953 met en danger les d\u00e9veloppeurs React Native"}]},{"@type":"WebSite","@id":"https:\/\/jfrog.com\/fr\/#website","url":"https:\/\/jfrog.com\/fr\/","name":"JFrog","description":"Deliver Trusted Software Releases at Speed and Scale","publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jfrog.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/jfrog.com\/fr\/#organization","name":"JFrog","url":"https:\/\/jfrog.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/jfrog.com\/wp-content\/uploads\/2025\/05\/Logo.svg","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/jfrog.com\/wp-content\/uploads\/2025\/05\/Logo.svg","width":74,"height":73,"caption":"JFrog"},"image":{"@id":"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/artifrog","https:\/\/x.com\/jfrog","https:\/\/www.linkedin.com\/company\/455737","https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg","https:\/\/www.wikidata.org\/wiki\/Q98608948"],"description":"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.","legalName":"Jfrog, Inc.","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1001","maxValue":"5000"}},{"@type":"Person","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/338056045cd2eca48f83762c9059c7ef","name":"adivi@jfrog.com","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/a4576a219390f82b178763771dde74932215f7d4fda5a49c39c07c3444cd3415?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a4576a219390f82b178763771dde74932215f7d4fda5a49c39c07c3444cd3415?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4576a219390f82b178763771dde74932215f7d4fda5a49c39c07c3444cd3415?s=96&d=mm&r=g","caption":"adivi@jfrog.com"}}]}},"_links":{"self":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/174931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/users\/812"}],"replies":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/comments?post=174931"}],"version-history":[{"count":0,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/174931\/revisions"}],"wp:attachment":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media?parent=174931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/categories?post=174931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/tags?post=174931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}