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

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

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

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

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

Категории

Все категории
Loading categories
Palimpsest — CVE-2026-74945, раскрытие неинициализированных данных кучи через специально сформированный веб-шрифт (sec-high) | Kitploit
Инструменты/GitHubGitHub/defineid/palimpsest
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияВеб-безопасность
GitHubdefineid/palimpsest

Palimpsest

CVE-2026-74945, раскрытие неинициализированных данных кучи через специально сформированный веб-шрифт (sec-high)

Репозиторий
381 месяц назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-74945 · Раскрытие неинициализированной памяти кучи через специально сформированный веб-шрифт

Этот каталог содержит пакет для добросовестного воспроизведения раскрытия неинициализированной памяти при обработке шрифтов в Firefox. Специально сформированный шрифт @font-face продвигает выходной поток OTS в область неинициализированной кучи, и обычный контент считывает байты этой области обратно через API canvas measureText. Пакет предназначен для запуска против локально загруженной уязвимой сборки Firefox и только с синтетическими данными. Он никогда не взаимодействует с какой-либо живой или сторонней системой.

Соответствующий репозиторий PoC: https://github.com/defineid/Palimpsest Описание: writeup-font-cmap-leak.html в этом портфолио.

Метаданные рекомендации

ПолеЗначение
CVECVE-2026-74945
КомпонентCore / Graphics: Text
КлассРаскрытие неинициализированной памяти (CWE-908 · CWE-200)
Серьёзностьsec-high (раскрытие памяти, достижимое из веба)
Исправлено вFirefox 154 · ESR 140.14
Багbugzilla.mozilla.org/show_bug.cgi?id=2057808
ВзаимодействиеОтсутствует · только загрузка страницы

Механизм

Firefox очищает веб-шрифты через OTS перед использованием. Три независимых дефекта складываются так, что специально сформированный шрифт оставляет область неинициализированной кучи внутри очищенного вывода, и контент может прочитать её обратно:

  1. Аллокатор вывода OTS никогда не обнуляет память. Расширяющийся выходной поток растёт с помощью сырого реаллокатора (moz_xrealloc), который не заполняет новое пространство нулями.
  2. Seek не обнуляет пропущенный диапазон. Подтаблица cmap формата 14 с большим nonDefaultUVSOffset заставляет OTS перемещать свой выходной поток вперёд при повторной сериализации очищенного шрифта. Пропущенный диапазон между записанными байтами и целью seek передаётся вызывающему коду с неинициализированной кучей, а forget() задаёт размер буфера по наибольшему достигнутому смещению.
  3. Поиск глифа формата 4 проверяет границы по неверной длине. Поиск формата 4 проверяет границы по остатку всей таблицы cmap, а не подтаблицы, поэтому сегмент, чей idRangeOffset выходит за конец данных формата 4, всё равно проходит проверку и читает в неинициализированные байты соседней подтаблицы.

Специально сформированный шрифт сочетает подтаблицу формата 4, последний сегмент которой (0xFFFF) использует нечётный, выходящий за границы idRangeOffset, с подтаблицей формата 14, несущей большой nonDefaultUVSOffset, плюс maxp.numGlyphs = 65535 и отдельное для каждого glyph id значение advance в hmtx (advance == glyph id). Поэтому измерение U+FFFF разрешается в glyph id, прочитанный из неинициализированной области, а его ширина advance, читаемая из скрипта, раскрывает около двух байт кучи за одно измерение в окне примерно 64 КБ.

Модель угроз

Обычная веб-страница подаёт специально сформированный шрифт через @font-face и вызывает ctx.measureText("￿"). Не требуется ни клика, ни разрешения, ни расширения, ни изменения настроек. OTS работает в том же процессе и не относится к библиотекам, изолированным песочницей, поэтому раскрываемые байты — это куча контент-процесса, которая может содержать указатели или секреты.

Файлы

ФайлНазначение
make_font.pyСобирает leak.otf и leak.woff — специально сформированные шрифты.
trigger.htmlМинимальная страница, которая загружает шрифт через @font-face и считывает advance для U+FFFF обратно через measureText.

Предварительные требования

  1. Уязвимая сборка: Firefox до 154 или ESR до 140.14. В анализе описания используется Firefox 140.9.0esr; загрузите соответствующую сборку для вашей платформы из официального архива Mozilla по адресу https://ftp.mozilla.org/pub/firefox/releases/140.9.0esr/.
  2. Python с fontTools и brotli для сборки шрифта:
    pip install fonttools brotli
    

Сборка и запуск

python3 make_font.py        # writes leak.otf and leak.woff in this directory

Затем откройте trigger.html в уязвимой сборке, из пути file:// или локального статического сервера, который вы контролируете, и нажмите Measure.

Ожидаемый результат

  • Уязвимая сборка (до 154 / ESR 140.14): U+FFFF разрешается в ненулевой glyph id, производный от неинициализированного промежутка, и сообщаемый advance варьируется от запуска к запуску. Каждое измерение раскрывает около двух байт кучи процесса.
  • Исправленная сборка (154 / ESR 140.14 и новее): U+FFFF разрешается в glyph id 0 (.notdef), а advance равен 0. Никакой промежуток не утекает, поскольку выходной поток обнуляется, а поиск format-4 ограничен своей собственной подтаблицей.

Статус проверки

  • Выполнено в этой среде: make_font.py был выполнен здесь с fontTools 4.63.0 и создал leak.otf (393816 байт) и leak.woff (132372 байта). Сгенерированный шрифт был разобран обратно из сырых байтов, и каждый сконструированный ингредиент был подтверждён: maxp.numGlyphs = 65535, hhea.numberOfHMetrics = 65535, отдельный advance hmtx для каждого glyph id (advance == glyph id), две подтаблицы cmap (platform 3 encoding 1 format 4 и platform 0 encoding 5 format 14), последний сегмент format-4 endCode = 0xFFFF с нечётным выходящим за границы idRangeOffset = 0x4001 и nonDefaultUVSOffset = 0x8000 в format-14.
  • НЕ выполнено в этой среде: здесь нет уязвимой сборки Firefox, поэтому фактическая утечка не наблюдалась, не запускалась и не фиксировалась. Шрифт не загружался в уязвимую сборку, и никакие байты кучи не были раскрыты. Запустите trigger.html самостоятельно против локальной уязвимой сборки, чтобы наблюдать утечку. Этот пакет демонстрирует сконструированный вход и путь обратного чтения; это не оружифицированный эксплойт и не содержит контролируемого примитива выполнения кода.

Область применения и этика

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

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