Skip to main content

La mise à jour de Node.js corrige une vulnérabilité critique de sécurité HTTP

Écrit par
Node How even quick async functions can block the Event Loop starve tumb

6 février 2020

0 minutes de lecture

Une nouvelle version de sécurité de Node.js a été publiée aujourd’hui, le 6 février 2020. Elle corrige une vulnérabilité de gravité critique et deux de gravité élevée. Cette version inclut également une analyse HTTP plus stricte. Voici ce qu’indiquent les notes de version officielles, incluses dans le commit Node.js suivant :

L’analyse HTTP est également plus stricte afin de renforcer la sécurité. Comme cela peut entraîner des problèmes d’interopérabilité avec certaines implémentations HTTP non conformes, il est possible de désactiver les vérifications strictes à l’aide de l’option de ligne de commande --insecure-http-parser ou de l’option HTTP insecureHTTPParser. Il est déconseillé d’utiliser l’analyseur HTTP non sécurisé.

En bref

Toutes les versions activement prises en charge de Node.js, 10.x, 12.x et 13.x, sont vulnérables. Nous vous recommandons vivement de passer dès que possible aux versions corrigées suivantes : 10.19.0, 12.15.0 et 13.8.0

Suis-je concerné ?

Les versions 10.x, 12.x et 13.x de Node.js sont concernées si elles utilisent HTTP et TLS directement ou indirectement, par exemple les projets reposant sur des applications Web Express.

Vous êtes également concerné si vous utilisez une version de Node.js qui n’est plus prise en charge, comme les versions 11.x, 9.x et <= 8.x.

Les vulnérabilités suivantes ont été identifiées dans Node.js et associées aux CVE correspondantes :

  • CVE-2019-15606 : les espaces OWS en fin de valeur des en-têtes HTTP ne sont pas supprimés.

  • CVE-2019-15605 : attaque par désynchronisation des requêtes HTTP à l’aide d’un en-tête Transfer-Encoding malformé.

  • CVE-2019-15604 : déclenchement à distance d’une assertion sur un serveur TLS à l’aide d’une chaîne de certificat malformée.

À propos de la vulnérabilité CVE-2019-15606 affectant les en-têtes HTTP de Node.js

Cette vulnérabilité concerne les valeurs d’en-têtes HTTP dont les espaces OWS en fin de chaîne ne sont pas supprimés, comme l’indiquent les commentaires de ce commit sur GitHub :

Les valeurs des en-têtes HTTP peuvent comporter des espaces OWS en fin de chaîne, mais ceux-ci doivent être supprimés. Ils ne font pas partie de la valeur de l’en-tête au sens sémantique et, s’ils sont considérés comme tels, peuvent entraîner une différence injustifiée entre les valeurs d’en-tête attendues et réelles.

Notez qu’un seul espace SPC au début de la valeur du champ est courant et qu’il est déjà pris en charge par l’analyseur HTTP, qui supprime tous les espaces OWS initiaux. Seuls les espaces OWS en fin de chaîne doivent être supprimés par l’utilisateur de l’analyseur.

        header-field   = field-name ":" OWS field-value OWS
    ; https://tools.ietf.org/html/rfc7230#section-3.2
OWS            = *( SP / HTAB )
    ; https://tools.ietf.org/html/rfc7230#section-3.2.3

« Comment cette vulnérabilité a-t-elle été corrigée ?

À propos de la vulnérabilité CVE-2019-15605 de Node.js permettant la désynchronisation des requêtes HTTP

Il a été découvert que Node.js était vulnérable aux attaques par désynchronisation des requêtes HTTP utilisant un en-tête Transfer-Encoding malformé. Un exemple de la manière dont cela aurait pu se produire est fourni dans l’extrait de requête HTTP suivant, désormais utilisé pour tester cette régression :

POST / HTTP/1.1
Content-Type: text/plain; charset=utf-8
Host: hacker.exploit.com
Connection: keep-alive
Content-Length: 10
Transfer-Encoding: chunked, eee

HELLOWORLDPOST / HTTP/1.1
Content-Type: text/plain; charset=utf-8
Host: hacker.exploit.com
Connection: keep-alive
Content-Length: 28

I AM A SMUGGLED REQUEST!!!

Comment cette vulnérabilité a-t-elle été corrigée ?

  • Commits associés : eea3a7429b test: l’utilisation de TE pour dissimuler des requêtes est impossible et 8f41e837bb deps: mise à jour de llhttp vers la version 2.0.4

  • Les références qui ne sont pas encore publiques sont la demande de pull GitHub d’origine etle rapport HackerOne

À propos de la vulnérabilité Node.js identifiée sous le numéro CVE-2019-15604

Il a été découvert que Node.js était vulnérable à un problème TLS pouvant déclencher à distance une assertion sur un serveur TLS à l’aide d’une chaîne de certificat malformée, comme l’explique le message du commit d’origine :

X509V3_EXT_print peut renvoyer une valeur différente de 1 si l’extension X509 ne prend pas en charge l’impression dans un tampon. Au lieu d’échouer avec une assertion irrécupérable, remplacez la valeur concernée dans la hashmap par une valeur JS null.

Comment cette vulnérabilité a-t-elle été corrigée ?

  • Commits associés : 1156a9e5f8 crypto: correction d’une assertion causée par une extension non prise en charge.

  • Les détails du signalement de sécurité figurent dans le rapport HackerOne

Chez Snyk, nous accordons une grande importance à la communauté de la sécurité et sommes convaincus que la divulgation responsable des vulnérabilités dans les packages open source contribue à garantir la sécurité et la confidentialité des utilisateurs. Si vous pensez avoir découvert une vulnérabilité dans un logiciel open source, vous pouvez nous contacter à l’adresse https://snyk.io/vulnerability-disclosure. Notre programme de divulgation responsable vise à protéger à la fois les développeurs et les chercheurs qui signalent les vulnérabilités, tout en permettant aux développeurs de tirer parti en toute sécurité des vulnérabilités découvertes par les chercheurs.