Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
edk2-security — Результаты анализа безопасности EDK2 BrotliCustomDecompressLib — скоординированное раскрытие | Kitploit
Инструменты/GitHubGitHub/lukr54/edk2-security
Безопасность встроенных системСканеры уязвимостейАнализ уязвимостейЭксплуатацияБезопасность оборудования и IoTСтатьи и ИсследованияАнализ ПрошивокЭксплуатация Бинарных Файлов
GitHublukr54/edk2-security

edk2-security

Результаты анализа безопасности EDK2 BrotliCustomDecompressLib — скоординированное раскрытие

171 день назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

EDK2 BrotliCustomDecompressLib — переполнение кучи (не исправлено)

Переполнение буфера кучи в собственном связующем коде распаковки Brotli в EDK2 (MdeModulePkg/Library/BrotliCustomDecompressLib), присутствует с 2017 года, не исправлено в HEAD по состоянию на 2026-10-25. Подтверждено ASAN с proof-of-concept и сквозной демонстрацией контролируемого повреждения памяти.

Краткое описание

Обёртка Brotli в EDK2 считывает размер распакованного вывода из заголовка GUIDed-секции, контролируемого атакующим, усекает его UINT64 → UINT32 без проверки и передаёт в ядро DXE, которое выделяет буфер такого размера. Затем BrotliDecompressInternal распаковывает данные в этот буфер без ограничений — процесс идёт до конца потока Brotli, записывая за пределы выделенной памяти.

Результат: переполнение кучи (примитив записи) на этапе DXE, до завершения проверки Secure Boot. Атакующий, контролирующий образ прошивки (flash, capsule или ESP), может перезаписать соседние объекты пула — указатели на функции, флаги безопасности, структуры протоколов — выбранными байтами.

Это упущенный «собрат» Brotli для CVE-2021-28211 (LZMA получил проверку >MAX_UINT32 в 2021 году; Brotli так и не получил). Обзор вариантов подтверждает, что Brotli — единственный декомпрессор EDK2, у которого отсутствуют и проверка усечения, и ограничение вывода.

Уязвимый код

ФайлЧто делает
BrotliDecompress.c:238Приводит размер распакованных данных UINT64 к UINT32 — без проверки MAX_UINT32
BrotliDecompress.c:118–157Распаковывает в буфер назначения без проверки границ
GuidedSectionExtraction.cВызывает GetInfo, затем Decompress — доверяет заявленному размеру
CoreSectionExtraction.c:1597Выделяет буфер назначения заявленного размера

Всё в tianocore/edk2, MdeModulePkg/Library/BrotliCustomDecompressLib.

Доказательства

АртефактОписание
harness/edk2_brotli_overflow_poc.cProof-of-concept для ASAN: поток 4096 байт в буфер 64 байта
harness/asan_output.txtВывод ASAN: heap-buffer-overflow в BrotliDecompressInternal → memcpy
harness/edk2_brotli_overflow_demo.cСквозная демонстрация: контролируемое повреждение соседних объектов пула
harness/demo_output.txtВывод демонстрации: перехват указателей на функции, отключение Secure Boot
harness/lvfs_brotli_scan.pyСканер прошивок LVFS (измерение масштаба поражения)
harness/lvfs_scan_output.txtРезультаты сканирования: 0/200 образов прошивок используют Brotli
evidence/Копии уязвимых исходных файлов EDK2 в HEAD
FINDINGS.mdПолный отчёт: ссылки на строки, поиск prior-art, обзор вариантов, аудит LZMA

Масштаб поражения

Узкий. Два независимых исследования не нашли ни одной платформы, использующей GUIDed-секции Brotli на практике:

  • Поиск по коду GitHub (все публичные репозитории): 0 файлов DSC платформ ссылаются на BrotliCustomDecompressLib. Все совпадения — сам MdeModulePkg.dsc.
  • Сканирование прошивок LVFS (200 поставляемых образов, 9 вендоров): GUID Brotli найден в 0/200 образов. LZMA (положительный контроль) найден в 161/200.

Уязвимый код поставляется в дереве EDK2, но сегодня это мёртвый код — добавлен в 2017 году, так и не был принят IBV или OEM. Ошибка реальна и в принципе эксплуатируема; если распространение Brotli возрастёт, она станет немедленно достижимой.

Исправление

Два изменения, соответствующие тому, что уже есть в LZMA и Tiano:

  1. Добавить проверку MAX_UINT32 в BrotliUefiDecompressGetInfo (BrotliDecompress.c:238): отклонять размеры распакованных данных > MAX_UINT32, как это делает LzmaDecompress.c:149 начиная с CVE-2021-28211.
  2. Ограничить вывод в BrotliDecompressInternal: отслеживать записанные байты и останавливаться на DestinationSize, как это делает декомпрессор Tiano с mOrigSize.

Воспроизведение

Соберите PoC в Linux с libbrotli и 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

Предшествующие работы

  • CVE-2021-28211 — аналогичная уязвимость в LZMA, исправленная в 2021 году. Путь через Brotli был упущен.
  • CVE-2026-111497 — отдельная ошибка в декодере Brotli в upstream (9.2). EDK2 также затронут (issue #13378), но это другая находка.
  • Ни один публичный CVE, advisory, issue или PR не описывает переполнение в связующем коде Brotli. Проверено: все 14 GHSAs EDK2, все 29 issues Brotli, все 28 PR Brotli, CVE/NVD, EDK2 HEAD.

Раскрытие

Полное публичное раскрытие, 2026-10-26. TianoCore не был предоставлен период скоординированного раскрытия. Узкий радиус поражения (ни одна поставляемая прошивка не затронута) и тот факт, что аналогичная ошибка в LZMA публична с 2021 года, легли в основу этого решения.

Автор

@lukr54

Скачать инструмент