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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-2766-but-with-wasm — CVE-2026-2766, но с wasm | Kitploit
Инструменты/GitHubGitHub/sneakynachos/cve-2026-2766-but-with-wasm
Анализ уязвимостейЭксплуатацияШелл-кодРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubsneakynachos/cve-2026-2766-but-with-wasm

CVE-2026-2766-but-with-wasm

CVE-2026-2766, но с wasm

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

Популярное

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

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

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

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

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

CVE-2026-2766, но с wasm

Статус: подтверждённый PoC краха с продемонстрированным перехватом потока управления (краш pc = отравление освобождённой ячейки 0xcdcdcdcdcdcdcdcd под отладочной оболочкой — движок переходит по указателю, считанному из освобождённого ICScript). Оставшаяся работа: контролировать переиспользуемые байты. См. research/README.md.

Цепочка семейства WasmBlazeFox на баге 2026 года: CVE-2026-2766, "JIT miscompilation / use-after-free in the JavaScript Engine: JIT component", исправлен в Firefox 148 (MFSA 2026-13). Финальная цель та же, что и в CVE-2024-29943-but-with-wasm: превратить примитив в контроль над указателем кода и нацелить его на страницу WASM JIT, полную констант шелл-кода.

Первопричина

Из комментариев к собственному регрессионному тесту Mozilla (bug 2013583, тест добавлен в hg 457b68097f81) и SMDOC ICScript Lifetimes в js/src/jit/JitScript.h:

  • Во время пробного инлайнинга Ion переход полиморфного места вызова вызывает → дочернего элемента удаляется из , но всё ещё на него ссылается вектор в — и, что фатально, устаревший стаб , всё ещё находящийся в IC-цепочке вызывающего.
removeInlinedChild
ICScript
inlinedChildren_
inlinedScripts_
InliningRoot
CallInlinedFunction
  • Компактирующий GC (gczeal(14, 1), т.е. ZealCompactValue при каждой аллокации) перемещает/эвакуирует осиротевший ICScript, пока устаревшая цепочка стабов сохраняет старый адрес.
  • Следующий вызов через старый стаб разыменовывает устаревший указатель ICScript → use-after-move. В сборках ASAN/fuzzing освобождённая ячейка отравляется значением 0xe5, что даёт очень читаемый краш.
  • Свидетельства краха

    Уязвимая сборка: mozilla-central rev b3663be61a1a (nightly от 2026-01-15; исправление попало между 2026-01-15 и 2026-02-09 — nightly от 09 февраля выживает). Оболочка: Taskcluster linux64-fuzzing-asan-opt jsshell для этой ревизии (нужна для gczeal; release-opt оболочки её лишены).

    root@kitploit:~
    ./js --ion-warmup-threshold=100000 poc.js
    
    == ERROR: AddressSanitizer: SEGV on unknown address 0xe5e5e5e5e5e5e5e5
       The signal is caused by a READ memory access.
       #0-#3 <unknown module>          <- baseline JIT code
       #4 EnterJit / MaybeEnterJit     <- js/src/jit/Jit.cpp
       #10 js::jit::DoCallFallback     <- BaselineIC.cpp (the stale IC chain)
       rdi = 0xe5e5e5e5e5e5e5e5        <- the freed ICScript
    

    Раз­ыменование происходит в коде baseline JIT при обходе устаревшей цепочки стабов: контроль над переиспользуемой ячейкой = контроль над полями ICEntry/стаба, которым доверяет baseline, включая указатель кода стаба, на который он переходит.

    План эксплуатации (в процессе)

    root@kitploit:~
    orphaned ICScript (this PoC)
      -> compacting GC moves it; stale chain keeps old address
        -> reclaim the old cell with controlled bytes (size-class spray)
          -> baseline reads fake ICEntry -> fake ICStub -> fake code_ pointer
            -> jump into the WASM JIT page shellcode (f64.const immediates,
               FuncExport entry-offset overwrite — see the 2024-29943 repo)
    

    См. research/README.md для полного журнала вооружения. Краткое изложение текущего состояния:

    • Баг представляет собой use-after-move для ICScript, размещённого в malloc (TrailingArray) — в принципе переиспользуемого через spray с буферами соответствующих size-классов.
    • Освобождение и использование происходят с разницей в микросекунды внутри финального вызова new Ctor(flag), без точки обратного вызова в JS между ними; наивные spray либо промахиваются мимо окна (reclaim1/2), либо вымывают состояние IC штормом zeal GC (reclaim3). Устаревшая цепочка действительно выживает после одного обычного gc() (purge_check).
    • Следующий шаг — анализ аллокаций движка под gdb (какие аллокации попадают в освобождённую ячейку между освобождением и использованием). gdb не работает под x86-эмуляцией OrbStack, поэтому для этого нужна нативная Linux x86-64 машина.

    Сам этап WASM уже построен и продемонстрирован в CVE-2024-29943-but-with-wasm; лишь смещения объектной модели нужно заново вывести для этой сборки эпохи FF149.

    Файлы

    • poc.js — регрессионный тест Mozilla (bug 2013583), проверено, что он вызывает краш ASAN jsshell от 2026-01-15, как показано выше.

    Ссылки

    • Advisory: MFSA 2026-13 (Firefox 148)
    • Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=2013583 (restricted)
    • Test landing: hg 457b68097f81
    • Sibling chains: https://github.com/SneakyNachos/CVE-2024-29943-but-with-wasm and https://github.com/SneakyNachos/CVE-2026-2764-but-with-wasm
    • Technique origin: https://github.com/SneakyNachos/WasmBlazeFox
    Скачать инструмент