
Toolkit para convertir vulnerabilidades de Chromium en exploits fiables, multiplataforma y de cadena completa.
Un conjunto de herramientas para convertir vulnerabilidades de Chromium en exploits completos, fiables y multiplataforma.
Este proyecto proporciona un conjunto de potentes scripts auxiliares, pero requiere que aportes tus propias vulnerabilidades. Tú eres responsable de implementar las primitivas de explotación mínimas; el toolkit se encarga de todo lo demás.
Una cadena de exploits personalizada se basa en el archivo de script main.js, que te permite incluir selectivamente tus vulnerabilidades junto con los scripts auxiliares del toolkit:
// 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...)
...
*/
Lee la documentación para obtener una visión general completa de las funciones disponibles.
Se incluye una página web de pruebas en index.html.
Muestra registros, gestiona fallos y permite que el script principal incluya archivos de las subcarpetas del proyecto.
Puedes ejecutarla localmente con python3 server.py y después navegar a http://localhost:8000.
La página web monitor.html ofrece una interfaz sencilla para monitorizar y probar exploits de forma remota.
Muestra hosts remotos, registros de exploits y estadísticas de errores.
También permite enviar comandos a los hosts remotos, incluida la recarga de exploits y un modo de prueba de estrés.
Para las primeras fases del desarrollo de exploits, también puedes ejecutar el script principal en d8: d8.exe main.js.
Una vez que la cadena de exploits está lista, se incluyen herramientas para automatizar diversas tareas:
build.py para compilar el exploit en un único scriptdownload.py para descargar versiones específicas de Google Chromesymbols.py para el análisis automatizado de PDBSe incluyen algunos exploits para vulnerabilidades públicas para mostrar las funciones del toolkit:
| Vulnerabilidad | Versiones afectadas (Chrome Stable) | Detalles |
|---|---|---|
| CVE-2024-11114 | 94 - 130 (solo Windows) | El ratón puede controlarse mediante la interfaz Mojo IPC startDragging() para ejecutar archivos descargados y escapar del sandbox |
En el main.js por defecto se proporciona una cadena de exploits de demostración. Se basa en las siguientes vulnerabilidades:
Esta cadena de exploits funciona directamente en cualquier Chrome 130 stable y en las versiones extendidas hasta 130.0.6723.160. Se puede ampliar fácilmente a M128, M129 y M131 (< 131.0.6778.264) añadiendo symbols.
Los exploits también pueden probarse de forma remota desde la página web de monitorización:

Este toolkit está pensado estrictamente para la investigación de seguridad. Por sí solo, no proporciona ningún material para explotar vulnerabilidades no divulgadas del proyecto Chromium. El uso de este toolkit con fines malintencionados es responsabilidad exclusiva tuya.
Las versiones públicas se distribuyen bajo los términos de GNU AGPLv3. En concreto, el intercambio de exploits privados basados en este toolkit no está permitido bajo estos términos. Las confirmaciones (commits) anteriores realizadas antes de la primera versión pública pueden carecer de licencia y están protegidas por las leyes de copyright por defecto.
Este proyecto incluye componentes con licencias de terceros: consulta aquí para más detalles.
| Vulnerabilidad | Versiones afectadas (Chrome Stable) | Detalles |
|---|
| CVE-2024-7971 | <= 127 | Confusión de tipos WASM durante ParallelMove en Liftoff |
| CVE-2025-0291 | 128 - 131 (< 131.0.6778.264, componente vulnerable distribuido vía Finch) | Confusión de tipos en WasmGCTypeAnalyzer de Turboshaft en bucles de un solo bloque |
| CVE-2025-2135 | 133 - 134 (< 134.0.6998.88) | Confusión de tipos en objetos con aliasing en TransitionElementsKindOrCheckMap |
| CVE-2025-5419 | <= 136 (kill-switch de Finch desde 133) | Acceso a memoria fuera de límites debido a una eliminación store-store inválida en índices dinámicos |
| Vulnerabilidad | Versiones afectadas (Chrome Stable) | Detalles |
|---|
| 352689356 | <= 131 | Confusión de firma de función WASM en call_ref no inline de TurboFan |
| 379140430 | <= 132 | Confusión de tipo de firma en el tier-up de WasmToJsWrapper con corrupción de Tuple2 dentro del sandbox |
| 395659804 | <= 134 | Ejecución arbitraria de código a través de confusión en DeoptimizationData de OSR |
| 421403261 | 134 - 137 (< 137.0.7151.119, solo x64) | Colisión de hash de firma i32/i64 en Liftoff |