Skip to main content

L’équipe de recherche de Snyk découvre de graves vulnérabilités de sécurité liées à la pollution de prototype dans toutes les versions de lodash

Écrit par

5 juillet 2019

0 minutes de lecture

Le 2 juillet 2019, Snyk a publié une vulnérabilité de sécurité de gravité élevée liée à la pollution de prototype (CVE-2019-10744), qui affecte toutes les versions de lodash. Cette découverte fait suite à une analyse menée par l’équipe de recherche en sécurité de Snyk.

MISE À JOUR : lodash a publié la version 4.17.12 le 9 juillet, qui comprend les correctifs de Snyk et remédie à la vulnérabilité. Nous vous recommandons vivement de passer à la dernière version de lodash.

Au moment de la rédaction de cet article, aucun correctif officiel n’a été publié pour cette vulnérabilité. Les utilisateurs de Snyk sont protégés grâce à l’application d’un correctif de sécurité, disponible pour environ 50 000 projets vulnérables, qui remédie à la vulnérabilité dans la dernière version 4.7.11 de lodash.

Page du dépôt GitHub lodash/lodash affichant les onglets de navigation et le nombre d’observateurs, d’étoiles et de forks

Cette bibliothèque npm très populaire est utilisée par 4,35 millions de projets sur GitHub à elle seule. Avec près de 40 000 étoiles sur GitHub, elle est téléchargée plus de 80 millions de fois par mois. Inutile de préciser qu’une vulnérabilité de gravité élevée dans une bibliothèque aussi populaire que lodash affecte une grande partie des utilisateurs de npm.

Snyk a automatiquement envoyé des milliers de demandes de tirage de correction à ses utilisateurs afin de remédier à la vulnérabilité. Vous trouverez ci-dessous plus de détails sur cette vulnérabilité et sur les mesures à prendre.

Cette récente vulnérabilité de sécurité dans lodash a été révélée seulement trois mois après que nous avons signalé une vulnérabilité similaire de pollution de prototype dans jQuery, la bibliothèque JavaScript frontend très populaire.

Comme d’autres vulnérabilités de pollution de prototype ([1], [2], [3], [4], [5]), une fusion récursive non sécurisée de JSON peut permettre de manipuler l’objet JavaScript Object, ce qui affecte d’autres types de données via la chaîne de prototypes. Selon le cas d’utilisation concerné et la possibilité d’exploiter la vulnérabilité, les conséquences peuvent aller de l’injection de propriétés à l’injection de code, en passant par un déni de service.

Nous avonsdéjà ajouté la vulnérabilité à la base de données Snyk. Si Snyk surveille votre projet et détecte qu’il contient le package vulnérable, vous avez déjà reçu une notification dans le cadre de nos alertes habituelles. Si ce n’est pas le cas, analysez le dépôt de code de votre application pour vérifier s’il est affecté par la version vulnérable de lodash.

À propos de la vulnérabilité de sécurité dans lodash

La fonction defaultsDeep pouvait être détournée pour ajouter ou modifier des propriétés de Object.prototype à l’aide d’une charge utile constructor. Voici un exemple de l’impact de cette vulnérabilité sur une application JavaScript :


const mergeFn = require('lodash').defaultsDeep;
const payload = '{"constructor": {"prototype": {"a0": true}}}'

function check() {
    mergeFn({}, JSON.parse(payload));
    if (({})[`a0`] === true) {
        console.log(`Vulnerable to Prototype Pollution via ${payload}`);
    }
  }

check();

Après avoir passé en revue les notions de base sur la pollution de prototype, examinons le correctif de sécurité lui-même, que l’ingénieur de Snyk Kirill a proposé dans une demande de tirage au dépôt GitHub de la bibliothèque JavaScript lodash : https://github.com/lodash/lodash/pull/4336/files

Diff de code montrant les modifications de sécurité apportées à safeGet et un test unitaire empêchant la fusion indirecte de propriétés d’objet

Le correctif comprend une vérification de sécurité qui garantit que l’objet global n’est pas pollué lorsqu’une clé a la valeur constructor. Un cas de test a également été ajouté afin d’éviter toute régression.

Pour en savoir plus sur les vulnérabilités de pollution de prototype et leur fonctionnement, consultez notre description de la vulnérabilité dans lodash.

Que devez-vous faire ?

  • Si vous utilisez déjà Snyk pour surveiller vos applications, vous êtes déjà protégé automatiquement grâce au correctif de sécurité mentionné ci-dessus, envoyé sous forme de demande de tirage aux projets concernés.

  • Si vous n’utilisez pas Snyk, vous pouvez ajouter vos projets en créant un compte gratuit et en important vos projets depuis vos dépôts de code dans le tableau de bord Snyk. Une fois les résultats de l’analyse Snyk consultés, vous pouvez demander à Snyk de créer une demande de tirage qui remédiera à la vulnérabilité de votre bibliothèque lodash en appliquant un correctif Snyk.

  • Pour le moment, il n’existe pas de solution manuelle simple. Vous devrez attendre la publication d’une nouvelle version de lodash contenant le correctif, puis effectuer la mise à niveau.

Snyk crée des correctifs pour les vulnérabilités à fort impact, comme celle de lodash, qui affecte des millions de projets dans les écosystèmes Node.js et JavaScript. Tous les correctifs font l’objet de tests rigoureux afin de garantir leur bon fonctionnement avec les versions prises en charge de la bibliothèque concernée.

Pour en savoir plus sur le processus de création de correctifs de Snyk, consultez notre page de documentation Corriger les vulnérabilités ainsi que cet article de blog de Danny Grander, notre responsable de la sécurité : D’où viennent les vulnérabilités de sécurité ?

Remarque : lorsqu’une version officielle de lodash contenant le correctif de cette vulnérabilité sera publiée, une demande de tirage proposant la mise à niveau officielle de la bibliothèque sera automatiquement envoyée pour les projets surveillés par Snyk, qu’ils aient déjà été corrigés ou non.

Divulgation responsable

À la suite des recherches en sécurité menées par l’équipe Snyk en avril 2019, cette vulnérabilité et d’autres vulnérabilités de sécurité affectant lodash ont été signalées de manière responsable à John Dalton, le mainteneur de lodash.

Le processus a impliqué une collaboration avec John dans un dépôt privé afin de confirmer nos découvertes et les correctifs proposés par Snyk pour remédier aux vulnérabilités. Kirill, l’un des ingénieurs logiciels de Snyk, a participé au processus en proposant des demandes de tirage ([1],[2]) contenant des correctifs pour lodash, qui ont toutes deux été fusionnées le 24 juin.

Nous tenons à remercier chaleureusement John pour sa réactivité et pour avoir accueilli notre aide tout au long de la résolution de ce problème de sécurité.

Si vous pensez avoir découvert une vulnérabilité de sécurité potentielle dans Lodash, vous pouvez en discuter avec nous dans le cadre de notre programme de divulgation des vulnérabilités. Pour en savoir plus, consultez https://snyk.io/vulnerability-disclosure/

Le package npm lodash en chiffres

Première version publiée il y a 7 ansDernière version : 4.7.11, publiée il y a 10 mois, en septembre 2018Nombre total de vulnérabilités découvertes à ce jour : 4 (2 élevées, 2 moyennes)

Infographie présentant les statistiques de santé des dépendances Lodash, notamment les détails des versions, quatre vulnérabilités et des métriques d’utilisation.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.