Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
edk2-security — Constats de sécurité d'EDK2 BrotliCustomDecompressLib — divulgation coordonnée | Kitploit
Outils/GitHubGitHub/lukr54/edk2-security
Sécurité des Systèmes EmbarquésScanners de VulnérabilitésAnalyse des VulnérabilitésExploitationSécurité Matériel et IoTArticles et RechercheAnalyse de MicrologicielExploitation de Binaires
GitHublukr54/edk2-security

edk2-security

Constats de sécurité d'EDK2 BrotliCustomDecompressLib — divulgation coordonnée

7il y a 1 jourPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

EDK2 BrotliCustomDecompressLib — débordement de tas (non corrigé)

Un débordement de tampon de tas dans la glue de décompression Brotli propre à EDK2 (MdeModulePkg/Library/BrotliCustomDecompressLib), présent depuis 2017, non corrigé à HEAD au 2026-10-25. Confirmé par ASAN avec une preuve de concept et une démonstration de corruption contrôlée de bout en bout.

Résumé

Le wrapper Brotli d'EDK2 lit la taille de sortie décompressée depuis un en-tête de section GUIDée contrôlé par l'attaquant, la tronque de UINT64 → UINT32 sans garde-fou, et la transmet au cœur DXE qui alloue un tampon de cette taille. BrotliDecompressInternal décompresse ensuite dans ce tampon sans borne — il s'exécute jusqu'à la fin du flux Brotli, écrivant au-delà de l'allocation.

Résultat : débordement de tas (primitive d'écriture) dans la phase DXE, avant que la vérification Secure Boot ne soit terminée. Un attaquant qui contrôle l'image du firmware (flash, capsule, ou ESP) peut écraser des objets de pool adjacents — pointeurs de fonction, drapeaux de sécurité, structures de protocole — avec des octets choisis.

C'est le frère Brotli négligé de CVE-2021-28211 (LZMA a reçu une garde >MAX_UINT32 en 2021 ; Brotli ne l'a jamais eue). Un balayage des variantes confirme que Brotli est le seul décompresseur EDK2 qui manque à la fois de la garde de troncature et d'une borne de sortie.

Code affecté

FichierCe qu'il fait
BrotliDecompress.c:238Convertit la taille décodée UINT64 en UINT32 — aucune garde MAX_UINT32
BrotliDecompress.c:118–157Décompresse dans le tampon de destination sans vérification de borne
GuidedSectionExtraction.cAppelle GetInfo puis Decompress — fait confiance à la taille déclarée
CoreSectionExtraction.c:1597Alloue le tampon de destination à la taille déclarée

Tous dans tianocore/edk2, MdeModulePkg/Library/BrotliCustomDecompressLib.

Preuves

ArtefactDescription
harness/edk2_brotli_overflow_poc.cPreuve de concept ASAN : flux de 4096 octets dans un tampon de 64 octets
harness/asan_output.txtSortie ASAN : heap-buffer-overflow à BrotliDecompressInternal → memcpy
harness/edk2_brotli_overflow_demo.cDémo de bout en bout : corruption contrôlée d'objets de pool adjacents
harness/demo_output.txtSortie de la démo : pointeurs de fonction détournés, Secure Boot désactivé
harness/lvfs_brotli_scan.pyScanner de firmware LVFS (mesure du rayon d'impact)
harness/lvfs_scan_output.txtRésultats du scan : 0/200 images de firmware utilisent Brotli
evidence/Copies des fichiers source EDK2 vulnérables à HEAD
FINDINGS.mdRapport complet : références de lignes, recherche d'antériorité, balayage des variantes, audit LZMA

Rayon d'impact

Étroit. Deux enquêtes indépendantes n'ont trouvé aucune plateforme qui utilise des sections GUIDées Brotli en pratique :

  • Recherche de code GitHub (tous les dépôts publics) : 0 fichier DSC de plateforme référence BrotliCustomDecompressLib. Chaque occurrence est MdeModulePkg.dsc lui-même.
  • Scan de firmware LVFS (200 images en production, 9 fournisseurs) : GUID Brotli trouvé dans 0/200 images. LZMA (contrôle positif) trouvé dans 161/200.

Le code vulnérable est livré dans l'arbre EDK2 mais est du code mort aujourd'hui — ajouté en 2017, jamais adopté par les IBV ni les OEM. Le bug est réel et exploitable en principe ; si l'adoption de Brotli augmente, il devient immédiatement atteignable.

Correctif

Deux changements, correspondant à ce que LZMA et Tiano possèdent déjà :

  1. Ajouter la garde MAX_UINT32 à BrotliUefiDecompressGetInfo (BrotliDecompress.c:238) : rejeter les tailles décodées > MAX_UINT32, comme le fait LzmaDecompress.c:149 depuis CVE-2021-28211.
  2. Borner la sortie dans BrotliDecompressInternal : suivre les octets écrits et s'arrêter à DestinationSize, comme le fait le décompresseur Tiano avec mOrigSize.

Reproduire

Compiler la PoC sous Linux avec libbrotli et GCC :

# ASAN proof (aborts at the overflow)
gcc -fsanitize=address -g -O1 -o poc harness/edk2_brotli_overflow_poc.c \
    -lbrotlienc -lbrotlidec
./poc

# Controlled-corruption demo (completes the overflow, shows the damage)
gcc -g -O1 -o demo harness/edk2_brotli_overflow_demo.c \
    -lbrotlienc -lbrotlidec
./demo

Antériorité

  • CVE-2021-28211 — le bug frère LZMA, corrigé en 2021. Le chemin Brotli a été négligé.
  • CVE-2026-111497 — un bug distinct du décodeur Brotli en amont (9.2). EDK2 est également affecté (issue #13378), mais il s'agit d'une découverte différente.
  • Aucun CVE, avis, issue ou PR public ne traite du débordement de la glue Brotli. Vérifié : les 14 GHSAs EDK2, les 29 issues Brotli, les 28 PR Brotli, CVE/NVD, EDK2 HEAD.

Divulgation

Divulgation publique complète, 2026-10-26. Aucune période de divulgation coordonnée n'a été accordée à TianoCore. Le rayon d'impact restreint (aucun firmware livré affecté) et le fait que le bug frère LZMA soit public depuis 2021 ont motivé cette décision.

Auteur

@lukr54

Télécharger l’outil