Cette semaine, nous aborderons quelques vulnérabilités de haute sévérité dans le noyau Linux, Apache, et openssl.
Déni de service ICMPv6 dans le noyau Linux
CVE-2022-0742 permet à n'importe qui d'envoyer des messages ICMPv6 de type 130 ou 131 et d'exploiter une fuite de mémoire dans le noyau qui fait que l'hôte manque de mémoire. Cette vulnérabilité est remarquable car un attaquant peut provoquer un déni de service pour l'ensemble du système en envoyant seulement quelques paquets.
Cause première - Pour trouver la cause première, le meilleur endroit où regarder est l'historique des livraisons git lui-même. L'auteur de la correction a initialement trouvé ceci en examinant pourquoi la fonction synchronize_net() a été ajoutée à l'intérieur de ipv6_mc_down(). L'auteur du commit a découvert que igmp6_event_query() et igmp6_event_report() abandonnaient des skbs, qui sont les structures de données utilisées par le noyau Linux pour contenir des informations sur les paquets. Cette vulnérabilité est toujours en cours d'analyse.
Cette vulnérabilité est assortie de quelques mises en garde :
- Cela n'affecte aucune version de Red Hat Enterprise Linux car les noyaux disponibles sont antérieurs à la version 5.13.
- La branche stable a été affectée.
La seule possibilité de corriger cette vulnérabilité est de mettre à jour le noyau. Un correctif pour corriger cette vulnérabilité a déjà été appliqué en amont.
Apache Avis de sécurité
La vulnérabilité sur laquelle nous allons nous concentrer est la CVE-2022-23943, mais nous allons d'abord résumer rapidement les autres CVE de l'avis. Les autres vulnérabilités publiées dans cet avis sont CVE-2022-22720, une vulnérabilité qui permet la contrebande de requêtes http. Il y a aussi CVE-2022-22721, qui permet des débordements d'entiers sur les systèmes 32 bits si LimitXMLRequestBody dans httpd.conf est supérieur à 350MB. CVE-2022-22719 provoque un crash dû au fait que mod_lua a des variables non initialisées.
mod_sed est un module optionnel de Apache qui n'est pas installé ou activé par défaut sur la plupart des systèmes Linux. Il est utilisé pour remplacer le texte dans les pages web que Apache sert à l'aide d'un motif, de la même manière que la commande sed.
CVE-2022-23943 est une vulnérabilité de corruption de mémoire qui peut provoquer un déni de service. La vulnérabilité de corruption de mémoire provient de mod_sed. L'exploit est déclenché par l'envoi de grandes quantités de données à travers les filtres mod_sed. Si le paquet envoyé est supérieur à 2GB, un débordement d'entier signé se produira et provoquera un crash. Si plus de 4 Go sont envoyés, un débordement d'entier se produira également.
Cause première - La cause première provient de la fonction appendmem_to_linebuf lorsque memcpy est appelé. La correction appliquée a modifié le tampon référencé dans les paramètres de la fonction pour utiliser apr_size_t au lieu de int. Apr_size_t permet d'utiliser un int signé de 4 octets et un unsigned de 8 octets.
Cette vulnérabilité est assortie de quelques mises en garde :
- mod_sed est rarement utilisé ; et
- mod_sed doit être installé et configuré manuellement. Il n'est généralement pas intégré en tant que dépendance pour d'autres paquets.
Les mesures correctives recommandées pour cette vulnérabilité sont les suivantes :
- Mise à jour de Apache vers une version supérieure à 2.4.52
- Désactivation de mod_sed
Une atténuation partielle peut être appliquée en définissant LimitRequestBody 1073741824 dans httpd.conf. Cependant, cela ne fera qu'empêcher les clients malveillants d'envoyer une requête supérieure à 2 Go. Un attaquant peut toujours être en mesure de déclencher mod_sed pour lire un fichier de plus de 2GB, provoquant ainsi l'exploit.
Déni de service dans OpenSSL
OpenSSL est une bibliothèque et un programme en ligne de commande permettant de gérer, de créer, de vérifier et de signer des certificats. C'est l'une des plus anciennes bibliothèques de cryptographie à code source ouvert et elle est utilisée presque universellement sur tous les systèmes Linux.
OpenSSL utilise la fonction BN_mod_sqrt(), qui calcule une racine carrée modulaire. Elle contient un bogue où les modules non premiers peuvent être bouclés à l'infini. Elle est utilisée pour vérifier les certificats qui contiennent des clés publiques de courbes elliptiques sous forme comprimée ou des paramètres explicites de courbes elliptiques avec un point de base encodé sous forme comprimée. Pour fabriquer un certificat et provoquer un déni de service, l'attaquant doit modifier un certificat qui utilise une courbe elliptique à l'aide d'un éditeur hexadécimal afin de le rendre mathématiquement invalide.
Cause première - Le cœur de la vulnérabilité se trouve dans l'analyse des clés EC avec des points en format compressé ; lors de l'analyse de ce type de clés, OpenSSL essaiera d'étendre le point compressé, en essayant de calculer une racine carrée modulo le nombre premier p sur lequel la courbe est définie. Cependant, la primalité de p n'est vérifiée nulle part, pas même dans BN_mod_sqrt() pour laquelle c'est une exigence ; ainsi, un bogue dans l'implémentation causera une boucle infinie parce que p n'est pas premier comme prévu. L'avis pour OpenSSL est disponible ici. Les versions corrigées sont actuellement les suivantes :
- OpenSSL 3.0.2
- OpenSSL 1.1.1n
- OpenSSL 1.0.2zd
En outre, il y a quelques mises en garde pour réussir à exploiter cette vulnérabilité et les conditions suivantes doivent être remplies :
- Un attaquant génère un certificat utilisant la cryptographie à courbe elliptique avec certains paramètres invalides, ou modifie un certificat existant.
- Un attaquant doit amener OpenSSL à vérifier le certificat, soit par un accès local, soit en le fournissant à une application web utilisant mTLS qui vérifie les certificats fournis par l'utilisateur.
Commentaires