Des mises à jour correctives de la plateforme serveur JavaScript Node.js 21.6.2, 20.11.1, 18.19.1 sont disponibles, corrigeant 8 vulnérabilités, dont 4 ont été classées comme ayant un niveau de danger élevé :
- CVE-2024-21892 — possibilité pour un utilisateur non privilégié d'injecter du code hérité de privilèges élevés avec lesquels s'exécute le processus. La vulnérabilité est causée par une erreur dans la mise en œuvre de l'exception, permettant au processus avec des privilèges élevés de traiter les variables d'environnement définies par un utilisateur non privilégié. L'exception aurait dû être réservée uniquement aux droits CAP_NET_BIND_SERVICE, mais en raison d'une erreur, s'applique également à certains autres privilèges.
- CVE-2024-22019 — déni de service via l'épuisement des ressources disponibles (charge CPU et consommation de bande passante) lors du traitement de requêtes chunked spécialement conçues par le serveur HTTP intégré, entraînant la lecture d'une quantité illimitée d'octets dans une seule connexion.
- CVE-2024-21896 — dépassement de la limite du répertoire de base dans les chemins de fichiers. La vulnérabilité permet de contourner la normalisation des chemins de fichiers à l'aide de path.resolve() en cas de passage d'un chemin utilisant la classe Buffer. Pour obtenir un tel chemin après vérification, on appelle la méthode Buffer.from(), mais dans l'application, il peut y avoir un appel à Buffer.prototype.utf8Write, entraînant un remplacement du contenu après l'exécution de path.resolve() et la survenue de la vulnérabilité.
- CVE-2024-22017 — l'appel de setuid() ne réinitialisait pas tous les privilèges. En particulier, setuid() n'affecte pas les opérations io_uring utilisées dans libuv, si elles ont été initialisées avant l'appel de setuid().
- CVE-2023-46809 — vulnérabilité dans l'API privateDecrypt(), permettant de mener une attaque de Marvin pour déchiffrer RSA basée sur la mesure du temps des opérations.
- CVE-2024-21891 — possibilité de contourner le modèle de droits d'accès lors de l'utilisation de gestionnaires personnalisés pour la normalisation des chemins de fichiers.
- CVE-2024-21890 — traitement incorrect des masques dans les paramètres «—allow-fs-read» et «—allow-fs-write». Par exemple, «—allow-fs-read=\/home\/node\/.ssh\/*.pub» entraînera un accès à tout le contenu de «.ssh\/», et pas seulement aux fichiers avec l'extension «.pub», car le masque «*» est traité comme le dernier élément du chemin.
- CVE-2024-22025 — déni de service par épuisement des ressources lors du décodage de données compressées au format Brotli, reçues via un appel fetch().
On peut également noter la sortie de la bibliothèque libuv 1.48.0, utilisée dans Node.js pour le multiplexage des connexions et le traitement asynchrone des entrées/sorties. En plus de Node.js, la bibliothèque est également utilisée sur les serveurs DNS BIND 9 et Knot DNS, le serveur HTTP H2O, le framework Lua Luvit. une machine virtuelle MoarVM, le langage Julia et le framework Python uvloop. La nouvelle version corrige une vulnérabilité (CVE-2024-24806) affectant les projets utilisant libuv, permettant une attaque SSRF (Server-side request forgery) pour accéder à une API interne. La vulnérabilité était due à la troncature du nom d'hôte par la fonction uv_getaddrinfo() à 256 caractères à l'étape avant la résolution de domaine par la fonction getaddrinfo(), ce qui peut conduire à la détermination incorrecte adresses IP et à contourner les vérifications. Par exemple, des services comme MySpace, qui créent des sous-domaines sous la forme «username.example.com», peuvent être attaqués en spécifiant un long nom d'utilisateur.
Une mise à jour de l'HTTP client utilisé dans Node.js, undici 5.28.3, a également été publiée, dans laquelle une vulnérabilité (CVE-2024-24758) a été corrigée, causée par l'absence de nettoyage de l'en-tête HTTP Proxy-Authorization lors de la redirection des requêtes.
Source : opennet.ru
