Risque(s)
- Exécution de code arbitraire à distance
- Déni de service à distance
- Contournement de la politique de sécurité
- Atteinte à l'intégrité des données
Systèmes affectés
- Tianocore EDKII sans les derniers correctifs de sécurité
- Les microgiciels UEFI des constructeurs
Résumé
De multiples vulnérabilités ont été découvertes dans la pile réseau du projet EDK II de la fondation Tianocore, largement utilisée par les constructeurs d’ordinateurs comme socle de développement pour leur micrologiciel UEFI.EDK II est une implémentation open-source des spécifications UEFI (Unified Extensible Firmware Interface) et PI (Platform Initialisation). Remplaçant du BIOS (bien que ce terme soit encore utilisé par abus de langage), il est responsable du démarrage de l’ordinateur, y compris des phases de sélection, vérification et chargement du système d’exploitation, qui sont critiques pour l’intégrité de l’ordinateur. Une partie du code UEFI reste également présente en mémoire après le démarrage du système d’exploitation, avec un haut niveau de privilèges, pour permettre l’accès à certaines fonctionnalités matérielles (par exemple la mise en veille).
Les vulnérabilités affectent la pile de protocoles réseau IP implémentée par EDK II dans le module NetworkPkg. Ce module fournit une bibliothèque utilisée par certaines fonctionnalités du code UEFI nécessitant l’accès au réseau, telles que l’amorçage PXE (Preboot Execution Environment). PXE permet au micrologiciel de configurer une interface réseau (via DHCP) puis de contacter un serveur dans le but de télécharger le système d’exploitation à amorcer. Il est important de noter que l’UEFI de certains constructeurs peut accéder au réseau pour des raison autres que l’amorçage PXE – par exemple pour des fonctionnalités de restauration, d’identification ou d’administration à distance du système.
Au total, 9 vulnérabilités ont été découvertes, permettant l’exécution de code arbitraire à distance et l’injection de trafic dans des sessions TCP.
Les 7 premières vulnérabilités affectent l’implémentation des protocoles IPv6 (en particulier la gestion des en-têtes IPv6), Neighbour Discovery et DHCPv6. Ces vulnérabilités permettent à un attaquant de provoquer une exécution de code arbitraire au niveau UEFI (corruption de l’intégrité de la chaîne de démarrage, y compris lorsque Secure Boot est activé) ou au minimum un déni de service (blocage avant le chargement du système d’exploitation). Ces vulnérabilités nécessitent que l’attaquant ait un accès au réseau local. Cependant, si l’interface réseau utilisée par l’UEFI est accessible depuis un réseau non sûr (réseau bureautique, etc.), certaines vulnérabilités peuvent être exploitées à distance, notamment celles impliquant le décodage d’options dans les en-têtes IPv6.
Les 2 dernières vulnérabilités affectent la génération de nombres pseudo-aléatoires utilisés pour IP et TCP (génération des numéros de séquence). Celles-ci pourraient permettre à un attaquant d’altérer le trafic réseau ou d’injecter des paquets arbitraires à distance. Cependant, les conséquences pratiques ne sont pas établies à ce stade.
Le code d’EDK II est utilisé ou intégré de façon diverse par les différents éditeurs de code UEFI (souvent dénommé BIOS par abus de langage), qui fournissent à leur tour leur solution aux différents fabricants d’ordinateurs. L’impact de ces vulnérabilités dépend donc fortement des modalités d’utilisation d’EDK II et de sa pile IP par les différents fabricants, ainsi que de la configuration des équipements.
Solution
Le CERT-FR recommande donc :- D’appliquer les mises à jour du code UEFI lorsqu’elles seront fournies par le fabricant ;
- De limiter l’utilisation du réseau par le code UEFI s’il n’est pas absolument nécessaire :
- Soit en désactivant totalement le support de la pile réseau UEFI (a minima pour la version IPv6), lorsque le menu de configuration du BIOS le permet,
- Soit en désactivant PXE dans la configuration UEFI,
- ou à défaut en déclarant PXE comme dernière option pour le démarrage de l’ordinateur ;
- De mettre en place une authentification par mot de passe pour toute modification de la configuration UEFI, et en particulier pour l’activation de PXE ou le choix de l’ordre de démarrage ;
- De sécuriser le réseau utilisé par PXE afin de prévenir ou détecter l’injection de trafic malveillant sur les sous-réseaux utilisés lors du démarrage des ordinateurs, notamment en isolant les clients PXE les uns des autres à l’aide du mode VLAN privé (private VLAN) lorsque cela est possible ;
- De sécuriser le serveur jouant le rôle de point de distribution PXE des images de systèmes d’exploitation ;
- De lister explicitement les certificats autorisés pour le démarrage si le mode de démarrage HTTPS (HTTPS boot) est disponible et activé.
Par ailleurs, le CERT-FR recommande d’appliquer les bonnes pratiques suivantes :
- Activer le Secure Boot notamment pour pouvoir vérifier l’intégrité des images chargées, restreindre les certificats autorisés aux seuls certificats utilisés et ajouter à la base de révocation DBX les images connues pour leur vulnérabilité ;
- Gérer l’obsolescence du parc et assurer la mise à jour régulière du code UEFI déployé sur le parc ;
- Activer la fonctionnalité « d’anti-rollback » des mises à jour du code UEFI lorsque cela est possible ;
- Sécuriser les réseaux qui sont utilisés, notamment en dédiant et en cloisonnant (physiquement ou, à défaut, logiquement) le réseau de production, celui utilisé pour l’amorçage distant, type PXE, et celui utilisé pour l’administration distante, type BMC.
Documentation
- Bulletin de Tianocore GHSA-hc6x-cw6p-gj7h du 16 janvier 2024 https://github.com/tianocore/edk2/security/advisories/GHSA-hc6x-cw6p-gj7h
- Bulletin de CERT/CC du 16 janvier 2024 https://kb.cert.org/vuls/id/132380
- Référence CVE CVE-2023-45229 https://www.cve.org/CVERecord?id=CVE-2023-45229
- Référence CVE CVE-2023-45230 https://www.cve.org/CVERecord?id=CVE-2023-45230
- Référence CVE CVE-2023-45231 https://www.cve.org/CVERecord?id=CVE-2023-45231
- Référence CVE CVE-2023-45232 https://www.cve.org/CVERecord?id=CVE-2023-45232
- Référence CVE CVE-2023-45233 https://www.cve.org/CVERecord?id=CVE-2023-45233
- Référence CVE CVE-2023-45234 https://www.cve.org/CVERecord?id=CVE-2023-45234
- Référence CVE CVE-2023-45235 https://www.cve.org/CVERecord?id=CVE-2023-45235
- Référence CVE CVE-2023-45236 https://www.cve.org/CVERecord?id=CVE-2023-45236
- Référence CVE CVE-2023-45237 https://www.cve.org/CVERecord?id=CVE-2023-45237