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

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

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, с идентификацией сборки, подобранными шейдерами и сбором артефактов краша.

Репозиторий
427 дней назадЕщё не проверено

Популярное

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

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

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

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

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

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]):

root@kitploit:~
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):

root@kitploit:~
# 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 выполните:

root@kitploit:~
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 (откройте файл напрямую или):
    root@kitploit:~
    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. Получите его:
    root@kitploit:~
    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-процесса).


7. Интерпретация результатов / известные ложные срабатывания

  • WEBGL_context_lost ≠ уязвимость. GPU watchdog Chrome убивает долго выполняющиеся шейдеры (триггер loop-unroll-dos и итерации фаззинга с огромным числом итераций циклов намеренно медленные). Отсеките шум: уменьшите SH_ITER или убедитесь, что любой кандидат на падение воспроизводится быстро (< 1 с на итерацию).
  • Настоящее падение, связанное с безопасностью памяти, должно детерминированно воспроизводиться из минимизированного шейдера и показывать в консоли характерную сигнатуру падения (например, EXC_BAD_ACCESS), а не завершение watchdog'ом.
  • Только отчёт ASAN, указывающий на Metal-бэкенд ANGLE, является надёжным доказательством того, что вы нашли именно эту ошибку, а не посторонний сбой драйвера.

8. Подтверждение первопричины: ASAN-сборка (необязательно, но настоятельно рекомендуется)

Соберите уязвимую ревизию Chromium с AddressSanitizer:

root@kitploit:~
fetch chromium
cd src
git checkout tags/148.0.7778.215          # last tag before the fix
gn gen out/asan --args='is_asan=true is_debug=false symbol_level=1 dcheck_always_on=true'
autoninja -C out/asan chrome

Затем запустите минимизированный падающий шейдер с включённой валидацией Metal API:

root@kitploit:~
MTL_DEBUG_LAYER=1 out/asan/Chromium.app/Contents/MacOS/Chromium poc.html

Трейс ASAN укажет точную функцию ANGLE/Metal и подтвердит, соответствует ли падение компоненту CVE [1]. (В дальнейшем: когда коммит с исправлением для 148.0.7778.216 станет доступен, выполните diff по third_party/angle/src/libANGLE/renderer/metal/, чтобы установить истинную первопричину, и замените подход с фаззингом на детерминированный триггер.)


9. Ограничения

  • Публичной первопричины или PoC не существует. Доступ к issue в Chromium ограничен («Permissions Required») [1]; этот харнес строится на гипотезах.
  • Известных эксплойтов in-the-wild нет. Обогащение CISA SSVC (2026-05-29) фиксирует exploitation: none [1].
  • Воздействие ограничено только песочницей [1] — даже если этот PoC приведёт к выполнению кода, он охватывает лишь этап процесса внутри песочницы в реальной цепочке атаки.
  • Цель — только macOS [1]; не делайте выводов по результатам запусков на других платформах.

10. Безопасность и правовые аспекты

Тестируйте только на машинах, которыми вы владеете или на которых вам явно разрешено проводить тестирование. Харнес намеренно компилирует враждебные шейдеры, чтобы обрушить графический процесс, — ожидайте завершений GPU-процесса. Не допускайте уязвимую сборку браузера к производственным сетям.


11. Ссылки

[1] NVD — CVE-2026-9999: https://nvd.nist.gov/vuln/detail/CVE-2026-9999 * Рекомендация вендора (блог Chrome Releases, обновление Stable Channel): https://chromereleases.googleblog.com/2026/05/stable-channel-update-for-desktop_0877304591.html * Chromium issue 513364480 (доступ ограничен): https://issues.chromium.org/issues/513364480

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