React v16.4.2 : correctif d'une faille côté serveur

2018 M08 1 par Dan Abramov

Nous avons détecté une faille mineure pouvant affecter certaines applis qui utilisent ReactDOMServer. Afin que vous puissiez mettre à niveau React sans problème, nous mettons en place un correctif pour chaque version mineure de React concernée. Continuez à lire pour en apprendre davantage.

En bref

Aujourd’hui, nous publions le correctif d’une faille que nous avons découverte dans l’implémentation de react-dom/server. Elle est arrivée avec la version 16.0.0 et était présente sur toutes les versions jusqu’à ce jour.

Cette faille ne s’applique qu’à certaines applis React rendues côté serveur. Elle ne concerne pas les applis uniquement rendues côté client. De plus, nous nous attendons à ce que la plupart des applis rendues côté serveur ne présentent pas l’approche vulnérable décrite ci-après. Quoi qu’il en soit, nous vous recommandons tout de même de prendre ces mesures de protection dans les plus brefs délais.

Lors de notre enquête, nous avons trouvé des failles similaires dans d’autres bibliothèques front-end populaires. Nous avons donc coordonné la sortie de cette version avec celles de Vue et de Preact, qui résolvent le même problème. Le numéro de suivi de cette faille est le CVE-2018-6341.

Mesures de protection

Nous avons préparé une version de correctif pour chaque version mineure concernée.

16.0.x

Si vous utilisez react-dom/server avec cette version :

  • react-dom@16.0.0

Mettez à jour vers cette version :

react-dom@16.0.1 (contient la mesure de protection)

16.1.x

Si vous utilisez react-dom/server avec une de ces versions :

  • react-dom@16.1.0
  • react-dom@16.1.1

Mettez à jour vers cette version :

react-dom@16.1.2 (contient la mesure de protection)

16.2.x

Si vous utilisez react-dom/server avec cette version :

  • react-dom@16.2.0

Mettez à jour vers cette version :

react-dom@16.2.1 (contient la mesure de protection)

16.3.x

Si vous utilisez react-dom/server avec une de ces versions :

  • react-dom@16.3.0
  • react-dom@16.3.1
  • react-dom@16.3.2

Mettez à jour vers cette version :

react-dom@16.3.3 (contient la mesure de protection)

16.4.x

Si vous utilisez react-dom/server avec une de ces versions :

  • react-dom@16.4.0
  • react-dom@16.4.1

Mettez à jour vers cette version :

react-dom@16.4.2 (contient la mesure de protection)

Si vous utilisez une version plus récente de react-dom, aucune action n’est requise.

Remarquez que seul le paquet react-dom a besoin d’être mis à jour.

Description détaillée

Votre appli n’est potentiellement concernée par cette faille que si ces deux conditions sont réunies :

  • Le rendu HTML de votre appli utilise l’API ReactDOMServer, et
  • Votre appli inclut un nom d’attribut fourni par l’utilisateur dans une balise HTML.

Plus précisément, le schéma de la faille ressemble à ceci :

let props = {};
props[userProvidedData] = "bonjour";
let element = <div {...props} />;
let html = ReactDOMServer.renderToString(element);

Afin de l’exploiter, l’attaquant devra créer un nom spécifique d’attribut qui enclenchera une faille XSS. Par exemple :

let userProvidedData = '></div><script>alert("salut")</script>';

Avec les versions vulnérables de react-dom/server, le résultat permet à l’attaquant d’injecter un balisage quelconque :

<div ></div><script>alert("hi")</script>

Avec les versions postérieures au correctif (et celles avant que la faille n’existe), les attributs ayant des noms invalides sont ignorés :

<div></div>

Vous y verriez aussi un avertissement de nom d’attribut invalide.

Remarquez que nous nous attendons à ce que les noms d’attributs basés sur la saisie de l’utilisateur soient très rares en pratique. Ils ne correspondent à aucun cas d’usage pratique, et présentent d’autres risques sécuritaires contre lesquels React ne pourra pas vous protéger.

Installation

React v16.4.2 est disponible sur le référentiel npm.

Pour installer React 16 avec Yarn, exécutez :

yarn add react@^16.4.2 react-dom@^16.4.2

Pour installer React 16 avec npm, exécutez :

npm install --save react@^16.4.2 react-dom@^16.4.2

Nous fournissons des builds UMD de React via un CDN :

<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>

Pour plus de détails sur l’installation, veuillez consulter ces instructions.

Journal des modifications

React DOM Server

  • Correction d’une potentielle faille XSS quand l’attaquant contrôle le nom d’un attribut (CVE-2018-6341). Ce correctif est disponible sur react-dom@16.4.2, ainsi que sur les précédentes versions mineures concernées par la faille : react-dom@16.0.1, react-dom@16.1.2, react-dom@16.2.1, et react-dom@16.3.3. (@gaearon dans #13302)

  • Correction d’un plantage du moteur de rendu côté serveur lorsqu’un attribut est nommé hasOwnProperty. Ce correctif est seulement disponible sur react-dom@16.4.2. (@gaearon dans #13303)