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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-20700 — arm64e上で手作りのMach-Oチェーン修正を介してdyldをPAC署名オラクルとして使用するPoC。制御されたPAC有効ポインタ書き込みと、iOSでのディスパッチコールバック実行を実現します。 | Kitploit
ツール/GitHubGitHub/r3n3r0/cve-2026-20700
脆弱性分析エクスプロイトリバースエンジニアリングシェルコードCTFハードウェアセキュリティ論文と研究学習と教育ペイロード開発バイナリエクスプロイトラボと実践
GitHub
10363ヶ月前未レビュー
r3n3r0/cve-2026-20700

CVE-2026-20700

arm64e上で手作りのMach-Oチェーン修正を介してdyldをPAC署名オラクルとして使用するPoC。制御されたPAC有効ポインタ書き込みと、iOSでのディスパッチコールバック実行を実現します。

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

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

dyld-signing-oracle-poc

dyld のページインリンクとチェイン修正機構を PAC 署名オラクルとして利用する、CVE-2026-20700 に関する制御された探索。

arm64e では、すべての関数ポインタがハードウェア認証されます。ここでの目標は、dyld 自身の通常の修正メカニズムだけを使って、手動で作成した Mach-O を通じて dyld を誘導し、攻撃者が選んだスロットに PAC 有効なポインタを生成させられることを示すことです。

テスト環境: iPhone 14 (iOS 18.5, arm64e)


実証内容

  1. 制御されたチェイン修正バインド — dyld は手動で作成した Mach-O dylib を受け入れ、自身の __DATA 内の選択したスロットに PAC 有効な関数ポインタを書き込む。
  2. fixupPage64 での決定論的クラッシュ — 不正な page_start / next 値により dyld がページ境界を超え、分岐到達可能性を証明する。
  3. ディスパッチイベントループの実行 — dyld によって書き込まれた PAC 有効なポインタが dispatch_source_t タイマーハンドラとして登録され、イベントループを通じて自然に呼び出される。PoC コードからの直接呼び出しは行わない。

リポジトリ構成

root@kitploit:~
dyld-signing-oracle-poc/
├── Makefile                        ← パイプライン全体を統括
├── src/
│   └── launcher.c                  ← iOS ランチャー(2 スレッド + ディスパッチチェインクローズ)
├── generators/
│   ├── gen_exports.py              ← exports.c を生成(N 個のダミーシンボル)
│   ├── gen_client.py               ← client.c を生成(N 個のインポート、dyld ゲート負荷)
│   └── gen_malformed_dylib.py      ← libmalformed.dylib を生成(手動作成 Mach-O)
├── tools/
│   ├── scan_pointers.py            ← Mach-O のポインタセクションを W/R に分類
│   └── inspect_fixups.py           ← LC_DYLD_CHAINED_FIXUPS ヘッダを解析
└── blog/
    ├── it/
    │   └── dyld-signing-oracle.md  ← イタリア語の完全解説
    └── en/
        └── dyld-signing-oracle.md  ← 英語の完全解説

ビルド出力(コミット対象外)

ファイル生成元
exports.cgenerators/gen_exports.py + Makefile のセンチネルシンボル
client.cgenerators/gen_client.py
libmalformed.dylibgenerators/gen_malformed_dylib.py
libexports.dylibclang で exports.c から
libclient.dylibclang で client.c から
PoCAppclang で src/launcher.c から
PoCApp.ipaMakefile の package ステップ

必要条件

  • macOS と Xcode コマンドラインツール
  • iOS SDK(xcrun --sdk iphoneos --show-sdk-path)
  • Python 3
  • デバイステスト用: Sideloadly、または開発者証明書 + プロビジョニングプロファイル

ビルド

root@kitploit:~
# デフォルトのフルビルド(arm64、99k シンボル)
make

# 反復開発用の高速ビルド
make SYMBOLS=10000

プリセット

root@kitploit:~
# fixupPage64 での決定論的クラッシュ(分岐到達可能性の証明)
make stress

# 安定したイメージ内書き込み-書き込み(write-what-where)
make exploit

# dyld が PAC 有効ポインタを書き込み → ディスパッチが自然に呼び出す
make chain_close

解析ツール

root@kitploit:~
# 生成されたチェイン修正ブロブのレイアウトを検証
make verify

# libmalformed.dylib の LC_DYLD_CHAINED_FIXUPS ヘッダを解析
make inspect

# コンパイル済みバイナリ全体のポインタセクション(GOT/非遅延)をスキャン
make scan

調整可能パラメータ

変数デフォルト説明
SYMBOLS99000libclient 内のバインドターゲット数(< 100k で 26.3 以前のゲート、< 64k で 26.3 以降)
STACK_KB128ワーカースレッドのスタックサイズ(KB)
BURN_KB0dlopen 前に消費するスタック KB(0 は自動)
MARGIN_KB24自動バーンの余裕値
ARM64E0DYLD_CHAINED_PTR_ARM64E_USERLAND24 形式を使用
MALFORM_PAGEIN0不正なページインチェーンを有効化
MALFORM_TARGET_OFFSET—__DATA 内のターゲットオフセット(例: 0x10)
CHAIN_CLOSE02 番目のスロットを _attacker_hook に設定し、ディスパッチデモを有効化

デバイスへのインストール

root@kitploit:~
# アドホック署名(Sideloadly)
make chain_close
# PoCApp.ipa を Sideloadly にドラッグ

# 正規証明書
make resign IDENTITY="iPhone Developer: ..." PROFILE=embedded.mobileprovision

# ログ監視
idevicesyslog | grep "POC"

動作の仕組み

PoCApp 内での実行時ロード順:

  1. libexports.dylib — 最初にロードされる(RTLD_GLOBAL)。後続の dlopen に対して write_target_value と attacker_hook を提供する。
  2. libclient.dylib — スレッド B(128KB スタック)によってロードされる。約 99k のバインドターゲットが dyld のページインリンクゲートに負荷をかける。
  3. libmalformed.dylib — スレッド A によってロードされる。手動で作成されたチェイン修正チェーンにより、dyld が _write_target_value(およびオプションで _attacker_hook)を __DATA+0x10 / +0x20 に解決して書き込む。
  4. スレッド A は書き込まれたスロットを読み取り、カナリアを検証し、dyld が書き込んだ関数ポインタを呼び出す。
  5. chain_close モードでは、メインスレッドが __DATA+0x20 を dispatch_source_t タイマーハンドラとして登録する。イベントループが 1 秒後にそのハンドラを呼び出し、PoC コードからの直接呼び出しは行われない。

ブログ

イタリア語と英語の完全な技術解説。PAC ハードウェアの仕組み、ポインタ生成器としての dyld、チェイン修正エンコーディングの基礎、ページインリンクゲートの仕組み、Mach-O エンジニアリングの落とし穴(sizeofcmds、セクション数、ストライド)、カナリア検証によるデータレイアウト、99k シンボルゲート、クラッシュによる到達可能性の証明、安定したイメージ内プリミティブ、arm64e 署名オラクルの概念、ディスパッチタイマーのチェインクローズを網羅。

  • 🇮🇹 イタリア語 — blog/it/dyld-signing-oracle.md
  • 🇬🇧 英語 — blog/en/dyld-signing-oracle.md
ツールをダウンロード