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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-9999-exploit — Proof-of-concept и GLSL-фаззер для CVE-2026-9999 в бэкенде WebGL ANGLE/Metal в Chrome, с идентификацией сборки, подобранными шейдерами и сбором артефактов краша. | Kitploit
Инструменты/GitHubGitHub/josephfarah-ciso/cve-2026-9999-exploit
Анализ уязвимостейЭксплуатацияВеб-безопасностьФаззинг
GitHubjosephfarah-ciso/cve-2026-9999-exploit

CVE-2026-9999-exploit

Proof-of-concept и GLSL-фаззер для CVE-2026-9999 в бэкенде WebGL ANGLE/Metal в Chrome, с идентификацией сборки, подобранными шейдерами и сбором артефактов краша.

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

Популярное

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

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

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

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

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

CVE-2026-9999 — Харнес для поиска PoC Chrome ANGLE/Metal WebGL (macOS)


1. Сводка по уязвимости

ПолеЗначение
CVECVE-2026-9999
Вендор / продуктGoogle Chrome
ЗатронутоChrome < 148.0.7778.216, только macOS [1]
Исправлено в148.0.7778.216 [1]
ВоздействиеВыполнение произвольного кода внутри песочницы через специально сформированную HTML-страницу [1]
Критичность по ChromiumHigh [1]
CVSS 3.1 (CISA-ADP)8.8 HIGH — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H [1]
Оценка CVSS от NVD (NIST)Пока не предоставлена [1]
CWECWE-269 — Некорректное управление привилегиями (обогащение от CISA-ADP) [1]
CISA SSVC (2026-05-29)exploitation: none, automatable: no, technicalImpact: total [1]
Опубликовано / последнее изменение2026-05-28 / 2026-07-21 [1]
ПервопричинаНе публична — в Chromium issue 513364480 указано «Permissions Required» [1]

Следствие для цепочки атаки: выполнение кода «внутри песочницы» [1] означает, что атакующий получает контроль над процессом внутри песочницы (вероятнее всего, GPU-процессом). Для полного захвата браузера дополнительно потребуется отдельный побег из песочницы, который не является частью данной CVE.


2. Стратегия и гипотеза (собственная оценка аналитика — считайте неподтверждённой)

Ниже приведены выводы из публичных данных, а не подтверждённые факты:

  • ANGLE — это движок, который Chrome использует для трансляции WebGL GLSL в графические API платформы: на macOS — в Metal. «Специально сформированная HTML-страница» [1], добирающаяся до ANGLE, почти наверняка означает WebGL-контент — то есть управляемые атакующим шейдеры и/или состояние WebGL, обрабатываемое Metal-бэкендом.
  • CWE-269 (Некорректное управление привилегиями) [1] в сочетании с воздействием, ограниченным песочницей, позволяет предположить, что слой ANGLE/GPU не может должным образом ограничить что-то управляемое атакующим при трансляции шейдеров или валидации состояния.
  • Исторически этот компонент порождал ошибки безопасности памяти из-за граничных случаев в трансляторе GLSL (выход за границы массива при индексации константой, переполнение целых чисел при расчёте размера массивов, взаимодействия swizzle/discard, слишком большие uniform-блоки, раздувание при развёртке циклов).

Поэтому харнес отрабатывает именно эти паттерны, а затем массово мутирует GLSL в поисках падения на стороне рендерера (потеря WebGL-контекста = падение GPU-процесса или его остановка watchdog'ом).


3. Содержимое репозитория

ФайлНазначение
cve-2026-9999-poc.htmlСамодостаточный PoC-харнес (без зависимостей): определение сборки, 8 подобранных шейдеров для нагрузки на транслятор, GLSL-фаззер с сохранением артефактов падения
README.mdЭтот файл

4. Требования

  • Машина с macOS или VM с поддержкой Metal, на которой вам разрешено намеренно вызывать падения. CVE касается только macOS [1]; тестирование на Windows/Linux не задействует уязвимый Metal-бэкенд ANGLE.
  • Сборка Chrome < 148.0.7778.216 [1] (см. §5).
  • Аппаратный GPU / поддержка Metal. Без этого Chrome переключается на SwiftShader (программный рендеринг), и уязвимый путь никогда не достигается — см. проверку в §5.4.
  • Python 3 (необязательно, только для помощника поиска версии в §5.1 и локального HTTP-сервера).

5. Настройка окружения

5.1 Метод A — Chrome for Testing (рекомендуется)

Архив Chrome for Testing от Google предоставляет сборки с фиксированной версией, которые не обновляются автоматически. Найдите новейшую уязвимую сборку (затронуто всё, что ниже 148.0.7778.216 [1]):

import json, urllib.request
data = json.load(urllib.request.urlopen(
  "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"))
key = lambda v: tuple(int(x) for x in v.split('.'))
fix = (148, 0, 7778, 216)
cands = sorted((v["version"] for v in data["versions"]
                if "chrome" in v.get("downloads", {}) and key(v["version"]) < fix), key=key)
print(cands[-5:])   # pick the last (newest vulnerable) entry

Скачайте для вашей архитектуры (uname -m):

# Apple Silicon
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-arm64/chrome-mac-arm64.zip
# Intel
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-x64/chrome-mac-x64.zip

Распакуйте в лабораторную папку (например, ~/lab/, не в /Applications) и запускайте оттуда.

5.2 Метод B — снапшоты Chromium

Если нужной сборки нет в Chrome for Testing, используйте архив снапшотов Chromium (commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/ для Intel, .../Mac_Arm/ для Apple Silicon), индексируемый по позиции коммита — сопоставьте уязвимую версию с позицией ветки через chromium-history, затем возьмите ближайший снапшот. Снапшоты также не обновляются автоматически.

5.3 Блокировка автообновлений (только для брендированной сборки из другого источника)

Остановите агенты обновления Keystone и заблокируйте googleupdate.googleapis.com, иначе тестовая сборка незаметно обновит себя за ночь. Для сборок Chrome for Testing не требуется.

5.4 Убедитесь, что вы на Metal-бэкенде (критически важно)

Без Metal Chrome рендерит WebGL программно (SwiftShader), и Metal-бэкенд ANGLE не задействуется. В консоли страницы PoC выполните:

const c = document.createElement('canvas'), g = c.getContext('webgl2');
const x = g.getExtension('WEBGL_debug_renderer_info');
console.log(g.getParameter(x.UNMASKED_RENDERER_WEBGL));
// Good:  contains "ANGLE Metal Renderer"
// Bad:   contains "SwiftShader" -> the vulnerable path is NOT being exercised

Это также можно подтвердить на chrome://gpu. Гостевые системы Parallels/VMware Fusion с виртуализацией GPU обычно работают; минимальные конфигурации QEMU/UTM часто откатываются на SwiftShader.


6. Шаги воспроизведения

  1. Изолируйте цель. Снапшот VM или отдельный аккаунт macOS. Никогда не входите в аккаунт и не включайте синхронизацию в уязвимой сборке; считайте её скомпрометированной по определению. (Воздействие CVE — выполнение кода внутри песочницы, получаемое просто при посещении веб-страницы [1].)
  2. Установите уязвимую сборку по §5 и убедитесь, что проверка §5.4 проходит.
  3. Раздайте PoC (откройте файл напрямую или):
    cd <repo dir>
    python3 -m http.server 8000
    # then browse to http://localhost:8000/cve-2026-9999-poc.html
    
  4. Проверьте строку определения сборки, выводимую при загрузке. Она должна показать, что сборка ниже 148.0.7778.216 и, следовательно, потенциально уязвима [1]. На исправленных сборках харнес выводит предупреждение, чтобы вы не тратили время зря.
  5. Нажмите 1) Run curated triggers. Восемь шейдеров нагружают паттерны транслятора, описанные в §2 (выход за границы массива при индексации константой, переполнение целых чисел при расчёте размера массивов, динамическая индексация матриц, нагрузка на развёртку циклов, массивы массивов, discard/swizzle, граничные случаи препроцессора, слишком большие UBO). Следите за результатами [!!] и событиями потери контекста.
  6. Нажмите 2) Fuzz. Мутированные GLSL-шейдеры компилируются, линкуются, отрисовываются и считываются в цикле. Следите в логе за CONTEXT LOST.
  7. При падении вызвавший его шейдер сохраняется в localStorage. Получите его:
    localStorage.getItem("cve20269999_poc_fs");      // crashing fragment shader
    localStorage.getItem("cve20269999_crashes");     // crash event log
    
  8. Минимизируйте и протестируйте повторно падающий шейдер изолированно (5+ последовательных запусков), чтобы подтвердить детерминированность.
  9. Подтвердите первопричину с помощью ASAN-сборки, прежде чем приписывать что-либо CVE-2026-9999 — см. §8.

Живой снапшот подозрительного запуска также виден на chrome://gpu и в консоли macOS (отчёты о падении GPU-процесса).


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