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

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

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

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

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

Категории

Все категории
Loading categories
lean-cve-poc — CVE-2026-72844 : Пример доказательства "0 = 1" с использованием уязвимости в ядре Lean 4. | Kitploit
Инструменты/GitHubGitHub/endrazine/lean-cve-poc
Анализ уязвимостейЭксплуатацияОбучение и Образование
GitHubendrazine/lean-cve-poc

lean-cve-poc

CVE-2026-72844 : Пример доказательства "0 = 1" с использованием уязвимости в ядре Lean 4.

Репозиторий
2312 дней назадПроверено Kitploit

Популярное

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

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

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

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

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

CVE-2026-72844: Ошибка обоснованности ядра Lean 4

Доказательство 0 = 1 без аксиом через обход проверки проекции вложенного индуктивного типа.

Скачать инструмент
ПолеЗначение
CVECVE-2026-72844
УведомлениеVulnCheck VCSA
Отчёт об ошибкеleanprover/lean4#14576
Исправлениеleanprover/lean4#14577
ЗатронутоLean 4 ≤ v4.31.0 / nightly ≤ 2026-07-27
Исправлено вnightly 2026-07-29+ / v4.32.2
CVSS 4.0AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N — 6.8 СРЕДНИЙ
CVSS 3.1AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N — 6.3 СРЕДНИЙ
CWECWE-843 (Путаница типов)

Краткое описание уязвимости

Ядро Lean 4 не проверяет, что структура, указанная в выражении проекции, соответствует типу проецируемого значения, а функция environment::add_inductive в src/kernel/inductive.cpp не выполняла проверку типов вложенных индуктивных применений, которые заменяются вспомогательными типами, поэтому их параметрические аргументы не проходили проверку.

Метапрограмма, работающая в процессе Lean, может зарегистрировать неправильно типизированный вложенный индуктив, конструктор которого применяет проекцию .proj C 0 к значению несвязанного типа W, и ядро принимает объявление через обычный проверяемый путь addDecl при максимальной проверке ядра. В результате возникает путаница типов, дающая доказательство False без каких-либо аксиом, из которого можно вывести любое утверждение — включая 0 = 1.

Эксплойт:

  • использует только проверяемый путь ядра addDecl
  • работает с --trust=0 (максимальная проверка)
  • через #print axioms показывает отсутствие аксиом
  • не использует sorry, unsafeCast, debug.skipKernelTC, FFI или подмену .olean

Использование

root@kitploit:~
docker build -t lean-cve-poc .
docker run --rm lean-cve-poc

Ожидаемый вывод на уязвимой версии Lean:

root@kitploit:~
[*] Running ZeroEqOne.lean with --trust=0 ...
'bad' does not depend on any axioms
'boom' does not depend on any axioms
'zero_eq_one' does not depend on any axioms
zero_eq_one : 0 = 1

[!] VULNERABILITY CONFIRMED — CVE-2026-72844

    zero_eq_one : 0 = 1
    Depends on: no axioms

На исправленной версии Lean ядро отклоняет неправильно типизированный индуктив, и скрипт сообщает, что версия не уязвима.

Влияние

Затронуты любые системы, которые доверяют проверенным ядром доказательствам Lean как истине в последней инстанции. Это включает:

  • Формально верифицированное ПО: компиляторы, криптографические библиотеки, смарт-контракты, авионику, автомобильную отрасль — любое обоснование безопасности, построенное на доказательстве Lean, недействительно, если оно создано с использованием затронутой версии.
  • Код с доказательствами (proof-carrying code): вредоносная зависимость в пакете Lake может незаметно внести необоснованные объявления, которые использует downstream-код.
  • Независимые проверяющие: было показано, что тот же класс ошибки также обходит независимый инструмент проверки типов Nanoda.

Технические подробности

Корневая причина кроется в обработке ядром вложенных индуктивных типов. При исключении вложенного вхождения I Ds is ядро должно проверить, что параметрические аргументы Ds соответствуют объявленным параметрам индуктивного типа. Уязвимый код не проверяет, что выражения проекций (.proj) в Ds ссылаются на правильное имя структуры: .proj C 0 w принимается даже когда w : W и W ≠ C.

В сочетании с коллизией хеша (ядро использует сравнения Expr.hash при проверке дефиниционального равенства) это позволяет атакующему регистрировать объявления, в которых внутреннее присваивание типов ядра расходится с фактической семантикой терма, что приводит к путанице типов и доказательству False.

Ссылки

  • NVD: CVE-2026-72844
  • Уведомление VulnCheck
  • Раскрытие в oss-security
  • Проблема Lean 4 #14576
  • Исправление PR #14577
  • Коммит с исправлением

Благодарности

  • Обнаружение ошибки и минимальный PoC: @kiranandcode
  • Оригинальный эксплойт CollatzLean: @xrchz (Рамана Кумар)
  • Исправление ядра: Леонардо де Моура (PR #14577)
  • Подача заявки CVE и упаковка PoC: Джонатан Броссар (@endrazine)