
Инструментарий для превращения уязвимостей Chromium в надёжные, кроссплатформенные эксплойты полной цепочки атак
Набор инструментов для превращения уязвимостей Chromium в надёжные, кросс-платформенные полные цепочки эксплойтов.
Этот проект предоставляет набор мощных вспомогательных скриптов, но требует, чтобы вы привнесли собственные уязвимости. Вы отвечаете за реализацию минимальных примитивов эксплуатации, а всё остальное берёт на себя набор инструментов.
Пользовательская цепочка эксплойтов опирается на файл main.js, который позволяет выборочно подключать ваши уязвимости вместе со вспомогательными скриптами набора:
// Exploit settings
let loglevel = 5;
let run_in_worker = false;
// Exploit chain
async function main() {
// Common helpers
await include("kit/common/convert.js");
await include("kit/common/dom.js");
await include("kit/common/stability.js");
await include("kit/common/v8-utils.js");
await include("kit/common/versions.js");
await include("kit/common/wasm-module-builder.js");
// Symbols database for your exploit chain
await include("vulns/symbols.js");
// Early fingerprinting
await include("kit/fingerprint/d8.js");
await include("kit/fingerprint/useragent.js");
// Your initial V8 memory corruption
// This should craft addrOf() & fakeObj() primitives
await include("vulns/memcor/your-code.js");
// Bootstrap stage-2 primitives & gain memory read/write inside the V8 SBX
await include("kit/v8/cage.js");
// Your V8 sandbox escape
// This should craft arbRead() & arbWrite() primitives AND leak some pointers
await include("vulns/v8sbx/your-code.js");
// Utils to manipulate the renderer memory
await include("kit/v8/memory.js");
// Achieve code execution (automatically select the best method based on the leaked pointers)
await include("kit/v8/rwx/egghunt.js");
await include("kit/v8/rwx/isolate.js");
await include("kit/v8/rwx/partitionalloc.js");
await include("kit/v8/rwx/wasmrwx.js");
await include("kit/v8/rwx.js");
// Bootstrap stage-3 primitives & provide generic shellcodes
await include("kit/shellcodes/x64.js");
await include("kit/shellcodes/x64-win.js");
await include("kit/shellcodes/x64-linux.js");
// Precise fingerprinting
await include("kit/fingerprint/win.js");
await include("kit/fingerprint/linux.js");
// Enable MojoJS and other protected flags
await include("kit/renderer/mojo.js");
// Your sandbox escape
await include("vulns/sbx/your-code.js");
}
/*
Other customizable features are implemented here
(logging, clean exit handling, exploit reloading, scripts execution context...)
...
*/
Полный обзор доступных функций см. в документации.
Тестовая веб-страница находится в index.html.
Она выводит журналы, обрабатывает сбои и позволяет основному скрипту подключать файлы из подпапок проекта.
Запустить её локально можно командой python3 server.py, затем перейти по адресу http://localhost:8000.
Веб-страница monitor.html предоставляет простой интерфейс для удалённого мониторинга и тестирования эксплойтов.
Она отображает удалённые хосты, журналы эксплойтов и статистику ошибок.
Она также позволяет отправлять команды удалённым хостам, включая перезагрузку эксплойтов и режим стресс-тестирования.
Для раннего этапа разработки эксплойтов вы также можете запускать основной скрипт эксплойта в d8: d8.exe main.js.
Когда цепочка эксплойтов готова, tools предоставляет инструменты для автоматизации различных задач:
build.py — сборка эксплойта в единый скриптdownload.py — загрузка конкретных выпусков Google Chromesymbols.py — автоматический разбор PDBНекоторые эксплойты для публичных уязвимостей приведены для демонстрации возможностей набора:
| Уязвимость | Затронутые версии (Chrome Stable) | Подробности |
|---|---|---|
| CVE-2024-11114 | 94 - 130 (только Windows) | Мышь можно контролировать через Mojo IPC-интерфейс startDragging(), чтобы запускать загруженные файлы и покинуть песочницу |
Демонстрационная цепочка эксплойтов приведена в main.js по умолчанию. Она использует следующие уязвимости:
Эта цепочка эксплойтов работает из коробки на любом стабильном Chrome 130 и расширенных выпусках вплоть до 130.0.6723.160. Её можно легко расширить на M128, M129 и M131 (< 131.0.6778.264), добавив символы.
Эксплойты также можно тестировать удалённо с веб-страницы мониторинга:

Этот набор инструментов предназначен строго для исследований в области безопасности. Сам по себе он не предоставляет материалов для эксплуатации нераскрытых уязвимостей в проекте Chromium. Использование этого набора в злонамеренных целях — исключительно ваша ответственность.
Публичные выпуски распространяются на условиях GNU AGPLv3. В частности, торговля закрытыми эксплойтами на основе этого набора не разрешена данными условиями. Коммиты, сделанные до первого публичного выпуска, могут не иметь лицензии и защищены стандартным законодательством об авторском праве.
Этот проект включает сторонние компоненты с собственными лицензиями: подробности см. здесь.
| Уязвимость | Затронутые версии (Chrome Stable) | Подробности |
|---|
| CVE-2024-7971 | <= 127 | Путаница типов WASM во время ParallelMove в Liftoff |
| CVE-2025-0291 | 128 - 131 (< 131.0.6778.264, уязвимый компонент распространялся через Finch) | Путаница типов в WasmGCTypeAnalyzer в Turboshaft для одноблочных циклов |
| CVE-2025-2135 | 133 - 134 (< 134.0.6998.88) | Путаница типов при алиасинге объектов в TransitionElementsKindOrCheckMap |
| CVE-2025-5419 | <= 136 (аварийный переключатель Finch начиная с 133) | Внеграничный доступ к памяти из-за некорректного устранения store-store для динамических индексов |
| Уязвимость | Затронутые версии (Chrome Stable) | Подробности |
|---|
| 352689356 | <= 131 | Путаница сигнатур функций WASM в неинлайненном TurboFan call_ref |
| 379140430 | <= 132 | Путаница типов сигнатур при повышении уровня WasmToJsWrapper с повреждением Tuple2 внутри песочницы |
| 395659804 | <= 134 | Выполнение произвольного кода через путаницу OSR DeoptimizationData |
| 421403261 | 134 - 137 (< 137.0.7151.119, только x64) | Коллизия хэшей сигнатур i32/i64 в Liftoff |