Node.js : une faille Brotli corrigée, mettez à jour
Node.js corrige dix failles, dont une écriture hors limites dans le décodeur Brotli. Versions 22.23.4, 24.22.1 et 26.12.1 : ce qu'il faut savoir.
Le projet Node.js a publié le 21 octobre des mises à jour de sécurité pour ses trois branches maintenues. Node.js 22.23.4, 24.22.1 et 26.12.1 corrigent dix vulnérabilités, dont quatre classées à sévérité élevée. La plus surveillée, CVE-2026-111497, est une écriture hors limites dans le décodeur Brotli intégré au runtime : elle peut, selon l'avis officiel, aller jusqu'à l'exécution de code à distance. Les équipes qui exploitent des services Node.js doivent planifier la mise à jour rapidement.
Une écriture hors limites dans le décodeur Brotli
Brotli est un algorithme de compression très utilisé sur le web, que Node.js expose via le module node:zlib. D'après l'avis de sécurité, un bloc invalide était signalé par le décodeur comme un simple besoin temporaire de données supplémentaires, et non comme une erreur de format définitive. Le décodeur en flux continuait alors d'ajouter des octets d'entrée dans un tampon interne de huit octets, au-delà de ses limites.
Le scénario d'attaque est simple : il suffit qu'un attaquant fournisse des données compressées en Brotli qu'une application décompresse avec node:zlib. La corruption de la mémoire du processus peut provoquer un plantage, une fuite de mémoire du processus ou une exécution de code à distance. Toutes les applications qui décompressent des contenus Brotli d'origine non maîtrisée (corps de requêtes, réponses de services tiers, fichiers envoyés par des utilisateurs) sont donc concernées.
La faille a été signalée par OpenAI Codex Security (Khai Tran et Sylvie Mayer) et corrigée par les mainteneurs Matteo Collina et Antoine du Hamel. L'avis ne propose pas de contournement : en attendant la mise à jour, la seule précaution raisonnable consiste à éviter de décompresser des flux Brotli non fiables.
Trois autres failles à sévérité élevée
Les trois autres vulnérabilités notées « High » touchent la résolution de noms et la validation TLS :
- CVE-2026-105482 :
dns.resolve*()etdns.reverse()tronquent silencieusement les noms d'hôte contenant un octet nul, un correctif incomplet d'une faille antérieure ; - CVE-2026-105483 :
tls.checkServerIdentity()ne reconnaît pas les adresses IP écrites avec des chiffres pleine chasse, ce qui peut faire accepter un certificat sans SAN IP correspondant (branches 24 et 26) ; - CVE-2026-106069 : les adresses IPv4 avec zéros de tête, comme
0127.0.0.1, sont interprétées en octal par les règles WHATWG mais en décimal par le résolveur du système sur certaines plateformes, si bien que le certificat peut être vérifié contre une autre IP.
Les autres correctifs, de sévérité moyenne ou faible, concernent notamment les sockets keep-alive, le modèle de permissions et la réutilisation de l'entropie de randomUUID() dans les snapshots de démarrage et les exécutables autonomes (SEA).
Dépendances et certificats mis à jour
Ces versions embarquent aussi des mises à jour de c-ares, d'Undici, d'OpenSSL (branches 22 et 24) et de SQLite (branche 22). Le magasin de certificats racines intégré est mis à jour pour tenir compte de la compromission d'autorités intermédiaires d'eMudhra, un incident que nous avions détaillé dans notre article sur les huit certificats d'autorité compromis.
Que faire ?
Il faut passer à Node.js 22.23.4, 24.22.1 ou 26.12.1 selon la branche utilisée. L'avis précise que les versions en fin de vie sont également touchées et ne recevront pas de correctif : c'est l'occasion de migrer vers une branche maintenue, en tenant compte du nouveau calendrier des versions LTS de Node.js.
Attention aux déploiements conteneurisés : mettre à jour le poste de développement ne suffit pas. Les images Docker doivent être reconstruites à partir d'une image de base intégrant la version corrigée, puis redéployées. Les distributions Linux qui empaquettent leur propre Node.js peuvent publier leurs correctifs avec un décalage ; il convient de suivre leurs bulletins.