Node.js corrige une vulnérabilité pouvant conduire au plantage des applications
Node.js a publié des mises à jour pour une vulnérabilité de haute gravité qui pourrait être exploitée par des attaquants pour provoquer des plantages d'applications et potentiellement l'exécution de code à distance (RCE).
La vulnérabilité "use-after-free", connue sous le nom de CVE-2021-22930, est liée à la manière dont les flux HTTP2 sont traités dans le langage.
Elle est déclenchée dans les cas où Node.js analyse des trames RST_STREAM entrantes, sans code d'erreur ou avec un code d'annulation.
Dans les applications basées sur le protocole HTTP/2, la trame RST_STREAM est envoyée par une hôte dans l'intention de mettre fin à une connexion. Par exemple, dans une architecture client-serveur, si une application client souhaite mettre fin à la connexion, elle envoie une trame RST_STREAM au serveur. À la réception de cette trame, le serveur cessera de répondre au client et finira par interrompre la connexion. Toutes les trames "DATA" que le serveur était sur le point d'envoyer au client peuvent alors être rejetées.
Mais dans le cas des versions vulnérables de Node.js, lorsqu'une trame RST_STREAM est reçue par le serveur avec un code "cancel" (nghttp2_cancel), le récepteur essayera de "forcer la purge" de toutes les données reçues. Et, une fois cela fait, un callback automatique exécutait en plus la fonction "close", essayant de libérer une seconde fois la mémoire qui avait déjà été libérée lors de la dernière étape.
Il en résulte une corruption de données, ou à des comportements inattendus tels que des plantages d'applications, ou même à l'exécution de code à distance (RCE) dans certains cas dû à une erreur de double libération.
Les corrections sont apparues dans la dernière version 16.6.0 de Node.js et ont également été reportées dans les versions 12.22.4 (LTS) et 14.17.4 (LTS). Les utilisateurs de Node.js doivent passer à l’une de ces versions.