Une vulnérabilité (CVE-2023-40547) a été identifiée dans la couche Shim, utilisée dans la plupart des distributions Linux pour le démarrage sécurisé en mode UEFI Secure Boot, pouvant entraîner une exécution de code à distance et un contournement du mécanisme de démarrage sécurisé UEFI. Un attaquant contrôlant le serveur HTTP auquel Shim fait appel peut renvoyer une réponse spécialement conçue, entraînant une écriture contrôlée en dehors de la zone tampon pour exécuter du code à un stade précoce du démarrage.
La vulnérabilité est due à une erreur dans le code de chargement des fichiers via HTTP, se manifestant lors du traitement de réponses incorrectes renvoyées par le serveur HTTP auquel Shim fait appel. Le mode HTTPBoot dans Shim est pris en charge depuis 2016 et permet de configurer un démarrage réseau en utilisant le protocole HTTP pour extraire le fichier de démarrage appelé à l'étape suivante. Lors du chargement de fichiers via HTTP, Shim alloue un tampon pour les données reçues, en tenant compte non pas de la taille réelle des données, mais de la taille spécifiée dans l'en-tête HTTP « Content-Length ». Ainsi, en renvoyant une valeur inférieure dans l'en-tête Content-Length, il est possible de provoquer une écriture dans la mémoire en dehors de la zone tampon.
Shim est signé numériquement par Microsoft et vérifie GRUB2 avec son propre certificat, permettant aux développeurs de distributions de ne pas signer chaque mise à jour du noyau et de GRUB auprès de Microsoft. La vulnérabilité dans Shim permet de s’immiscer dans la chaîne de confiance en mode Secure Boot actif et d'obtenir un contrôle total sur le processus de démarrage ultérieur, par exemple pour démarrer un autre système d'exploitation, modifier des composants du système d'exploitation et contourner la protection Lockdown.
La vulnérabilité a été corrigée dans la version 15.8 de Shim, mais pour bloquer complètement l'attaque via Shim, une validation de la nouvelle version par Microsoft est nécessaire, ainsi que son intégration dans les distributions. Le statut de la correction de la vulnérabilité dans les distributions peut être évalué sur les pages suivantes : Debian, Ubuntu, SUSE, RHEL, Fedora. Le problème est qu'en l'absence de révocation de la signature pour l'ancienne version, le correctif est inutile, car l'attaquant peut utiliser un support de démarrage avec une version vulnérable de Shim pour compromettre UEFI Secure Boot. Cependant, la révocation de la signature entraînerait l'impossibilité de démarrages validés pour les distributions continuant à utiliser l'ancienne version de Shim.
Pour bloquer la vulnérabilité sans révoquer la signature numérique, les distributions peuvent utiliser le mécanisme SBAT (UEFI Secure Boot Advanced Targeting), dont le support est mis en œuvre pour GRUB2, shim et fwupd dans la plupart des distributions Linux populaires. SBAT a été développé en collaboration avec Microsoft et implique l'ajout de métadonnées supplémentaires aux fichiers exécutables des composants UEFI, incluant des informations sur le fabricant, le produit, le composant et la version. Ces métadonnées sont signées numériquement et peuvent être incluses séparément dans des listes de composants autorisés ou interdits pour le démarrage sécurisé UEFI.
SBAT permet de bloquer l'utilisation de la signature numérique pour des numéros de version spécifiques des composants sans avoir besoin de révoquer les clés pour Secure Boot. Le blocage des vulnérabilités via SBAT ne nécessite pas l'utilisation de la liste des certificats UEFI révoqués (dbx), mais se fait au niveau du remplacement de la clé interne pour générer des signatures et mettre à jour GRUB2, shim et d'autres artefacts de démarrage fournis par les distributions.
En plus de la vulnérabilité examinée dans Shim 15.8, plusieurs problèmes moins critiques exploités localement ont également été corrigés :
- CVE-2023-40548 — dépassement d'entier dans la fonction verify_sbat_section, entraînant un dépassement de tampon sur les systèmes 32 bits.
- CVE-2023-40546 — lecture en dehors de la mémoire du tampon lors de l'affichage des messages d'erreur via la fonction LogError().
- CVE-2023-40549 — lecture en dehors de la mémoire du tampon lors du traitement dans la fonction verify_buffer_authenticode() d'un fichier spécialement formaté en PE.
- CVE-2023-40550 — lecture en dehors de la mémoire du tampon dans la fonction verify_buffer_sbat().
- CVE-2023-40551 — lecture en dehors de la mémoire du tampon lors de l'analyse de fichiers au format MZ.
Source : opennet.ru
