Sécurité et confidentialité

Node.js corrige une faille d'exécution de code à distance dans le décodeur Brotli intégré

Node.js a publié des mises à jour de sécurité pour les versions 22, 24 et 26 afin de corriger une écriture hors limites de gravité élevée dans le décodeur Brotli, pouvant permettre l'exécution de code à distance.

Un cube de verre fissuré sur un rack de serveurs symbolisant une vulnérabilité dans une bibliothèque de compression.
Illustration générée pour cet article

Traduit automatiquement depuis l'original anglais.

Node.js a publié des mises à jour de sécurité critiques le 21 octobre pour ses trois lignes de support actives : 22.x, 24.x et 26.x. La correction la plus importante concerne une vulnérabilité dans la bibliothèque de décompression Brotli intégrée, qui pourrait potentiellement permettre aux attaquants d'exécuter du code arbitraire sur les systèmes affectés. Les développeurs utilisant des versions en fin de vie comme Node.js 20.x doivent effectuer une mise à niveau immédiate, car ces anciennes lignes ne recevront pas de correctifs.

Ce qui s'est passé

Le projet Node.js a corrigé dix failles distinctes lors de ce cycle de publication, mais la préoccupation principale est CVE-2026-111497, une vulnérabilité d'écriture hors limites dans le décodeur Brotli. Ce bug existe dans la copie de la bibliothèque Brotli de Google que Node.js embarque en interne, ce qui signifie qu'il affecte toute application décompressant des données Brotli, que ce soit via le module node:zlib ou automatiquement par le biais des réponses fetch(). La vulnérabilité est déclenchée par une entrée compressée malformée, qui pousse le décodeur à écrire des données au-delà du tampon mémoire alloué.

Bien que le projet classe cette faille comme étant de gravité élevée avec un potentiel d'exécution de code à distance (RCE), son exploitation pratique semble difficile. Une preuve de concept publique publiée le 22 octobre a démontré l'exécution de code uniquement sur une version de test volontairement affaiblie. Sur les versions standard, l'exploit a provoqué un plantage et une lecture limitée de la mémoire plutôt qu'une exécution complète de code. Au 22 octobre, aucune exploitation active dans la nature n'a été signalée, et les versions corrigées rejettent désormais les entrées malformées utilisées dans ces tests.

En plus du problème lié à Brotli, la mise à jour traite trois autres vulnérabilités de gravité élevée. Deux concernent les vérifications des certificats TLS que les attaquants pourraient contourner en utilisant des formes non canoniques d'adresses IP ou des chiffres pleine largeur, permettant aux certificats de correspondre à des hôtes auxquels ils ne devraient pas correspondre. La troisième correction de gravité élevée empêche dns.resolve de tronquer les noms d'hôtes contenant des octets nuls intégrés. Les corrections restantes couvrent des problèmes de gravité moyenne et faible, notamment des erreurs dans la génération de nombres aléatoires lors des instantanés de démarrage et des contournements du modèle d'autorisation.

Comment cela fonctionne

Brotli est un algorithme de compression développé par Google, largement utilisé pour le contenu web car il offre de meilleurs taux de compression que gzip. Node.js intègre sa propre copie du code source de Brotli plutôt que de dépendre d'une bibliothèque système. Lorsqu'une application reçoit des données compressées, le décodeur interne traite le flux de bits pour reconstituer le contenu original. La vulnérabilité est apparue parce que le décodeur ne validait pas correctement certains cas limites dans les entrées malformées, entraînant une écriture hors limites. Cela signifie que le programme écrivait des données dans un emplacement mémoire auquel il n'était pas autorisé à accéder, ce qui peut corrompre la mémoire ou permettre à un attaquant d'injecter et d'exécuter du code malveillant.

La correction implique un correctif amont du projet Brotli, que Node.js a intégré à sa base de code. Ce correctif ajoute des contrôles de validation plus stricts qui font échouer le décodeur tôt et en toute sécurité lorsqu'il rencontre une entrée invalide, empêchant ainsi la corruption de la mémoire. Comme de nombreux autres projets logiciels intègrent également leurs propres copies de Brotli, des mises à jour similaires seront probablement nécessaires dans l'écosystème plus large. Le même correctif a été publié dans les versions 1.2.1, 1.1.1 et 1.0.10 de Brotli le 21 octobre.

Détails clés

  • Versions corrigées : Node.js 22.23.4, 24.22.1 et 26.12.1 contiennent les correctifs nécessaires.
  • Avertissement de fin de vie : Node.js 20.x et les versions antérieures ne sont plus prises en charge et ne recevront pas ce correctif ; une migration est requise.
  • Vecteur d'attaque : Les applications sont exposées si elles décompressent des données Brotli provenant de sources non fiables, telles que les corps de requêtes ou les réponses d'API externes.
  • Blocage de certificats : La mise à jour bloque également huit clés d'autorité de certification intermédiaire compromises provenant d'eMudhra et supprime trois racines emSign.
  • Mises à jour des dépendances : Les versions intégrées de undici, c-ares, OpenSSL (sur 22.x et 24.x) et SQLite (sur 22.x) ont été mises à jour pour corriger d'autres vulnérabilités connues.
  • Aucune solution de contournement : Il n'existe aucune mesure d'atténuation temporaire au sein de Node.js pour la faille Brotli ; la mise à niveau est la seule solution.

Pourquoi c'est important

Pour les ingénieurs back-end et les responsables techniques, cette mise à jour met en évidence les risques inhérents à l'intégration de bibliothèques tierces. Bien que le code n'ait pas été écrit par l'équipe Node.js, la responsabilité de sécuriser ce code incombe aux mainteneurs de l'environnement d'exécution et, en fin de compte, aux développeurs qui le déploient. Le fait que la vulnérabilité existe dans des processus automatiques comme fetch() signifie que même les applications n'utilisant pas explicitement de bibliothèques de compression peuvent être à risque si elles interagissent avec des services externes renvoyant des données compressées en Brotli.

L'inclusion du blocage des certificats eMudhra souligne également l'importance des magasins de confiance dans les communications sécurisées. Puisque Node.js n'effectue pas de vérifications de révocation par défaut, les clés d'autorité de certification compromises peuvent rester approuvées jusqu'à ce qu'elles soient explicitement bloquées. Cette version sert de rappel que la sécurité ne consiste pas seulement à corriger des bugs de code, mais aussi à maintenir l'intégrité de l'infrastructure cryptographique qui sous-tend les connexions sécurisées.

Ce que vous pouvez faire

  • Mettez à niveau immédiatement vers Node.js 22.23.4, 24.22.1 ou 26.12.1 selon votre ligne de version actuelle.
  • Migrez toutes les applications encore fonctionnelles sur Node.js 20.x ou une version antérieure vers une version prise en charge.
  • Examinez tous les déploiements personnalisés ou les applications mono-fichier pour vous assurer qu'ils sont reconstruits avec les versions corrigées.
  • Surveillez les journaux pour détecter tout plantage inhabituel ou erreur de mémoire pouvant indiquer une tentative d'exploitation avant l'application du correctif.
  • Vérifiez que vos pipelines CI/CD sont configurés pour récupérer les dernières images de base corrigées pour les déploiements conteneurisés.
  • Si une mise à niveau immédiate est impossible, envisagez d'implémenter des règles de pare-feu au niveau réseau pour bloquer les requêtes entrantes suspectes, bien que cela ne protège pas contre les vulnérabilités liées aux fetch sortants.
  • #nodejs
  • #security
  • #vulnerability
  • #brotli
  • #backend

Outils de la Boutique Bytechap

Continuer la lecture

Tous les articles