
CVE-2026-64747の根本原因分析と到達可能性PoC。AppleAVE2カーネル拡張機能におけるバッファオーバーフローです。リバースエンジニアリングしたIOKitワイヤプロトコル、オーバーフローの計算、および設定パスを駆動するユーザースペースPoCを含みます。
CVE-2026-64747 の根本原因分析と macOS 到達可能性概念実証コードです。macOS 26.6(kext 905.40.1)で修正された、AppleAVE2 ビデオエンコーダーカーネル拡張(com.apple.driver.AppleAVE2)のバッファオーバーフローに関するものです。
AppleAVE2 — 影響:アプリがカーネル権限で任意のコードを実行できる可能性があります。エンコーダーのワークバッファサイズ計算におけるバッファオーバーフローが、改善された境界チェックによって対処されました。
このリポジトリには、AppleAVE2UserClient の完全にリバースエンジニアリングされた IOKit ワイヤープロトコル(セッション作成 → 設定 → フレーム単位の処理)、正確なオーバーフロー箇所(HEVC 10ビットマルチパスパスにおける32ビット LRB ワークバッファサイズ計算機)、およびユーザークライアントを開き、カーネルの検証スタックを通じて設定パスを駆動し、脆弱性のあるビルド(905.36.1)と修正済みビルド(905.40.1)の差分を示すユーザースペース PoC が文書化されています。
Tier(正直な評価):到達可能性+完全なプロトコル RE+解析的に証明されたオーバーフロー計算。RCE ではなく、ライブオーバーフローの実証もなし — ラボホストは修正済み kext を実行しており、ハードウェア機能ゲート(両ビルドに存在)が脆弱な計算機が実行される前にオーバーフロー寸法を拒否します。オーバーフローを発火させるには、必要な寸法を機能テーブルが許可するターゲットが必要です(FIRE_READY.md §5-6 を参照)。
| ファイル | 内容 |
|---|
poc_ave2_reach.c | IOKit ユーザースペース PoC:AppleAVE2UserClient を開き、セッションを作成し、リバースエンジニアリングされた構造体で設定を駆動します。権限は不要です。 |
ave2_wire.h | リバースエンジニアリングされたワイヤーフォーマット:セレクタ番号、構造体サイズ、および重要なすべてのフィールドオフセット(幅/高さ、encType、ビュー/レイヤー、クロマ、ビット深度) |
WIRE_FORMAT.md | ワイヤーフォーマットリファレンス:ディスパッチテーブルのレイアウト、PAC の癖、セレクタごとの契約 |
FIRE_READY.md | オーバーフロー計算(モード5 LRB 計算機)、それをトリガーする正確な入力、パッチ適用ホストでの実行証拠、および残りの不明点 |
evidence/ | パッチ適用ホストでの実行からの ioreg キャプチャ+カーネルログ(検証スタックの進行状況) |
clang -O0 -g -arch arm64 -framework IOKit -framework CoreFoundation \
-o poc_ave2_reach poc_ave2_reach.c
./poc_ave2_reach # root は不要。サービスはユーザーコンテキストから開かれます
AppleAVE2 のエンコーダーは、LRB(ルックアサイドリファレンスバッファ)ワークバッファサイズを32ビット演算でオーバーフローチェックなしに計算します。HEVC 10ビットマルチパスパス(param_2 = 5 で呼び出される計算機)では、64656×8080 などの寸法(ドライバの w*h ≤ 0x1FFE0000 クランプを通過)により、コンポーネント合計が 0x80000000 — 符号ビットが設定されます。脆弱な計算機は生の32ビット合計を返します。サイズは下流で負として扱われ、過小サイズの DART/IOMMU バッファが割り当てられ、エンコーダー DMA がそれを超えて書き込みます → カーネルヒープ/DART 破損 → カーネルコード実行。修正済み計算機はコンポーネントごとの符号チェックと64ビット合計チェックを追加し、LRB size overflow をログに記録します。
__const セクションからデコードされたディスパッチテーブル(ストライド 0x18 = {func, inSize<<32, outSize<<32} の行、PAC ポインタの癖あり)。IOServiceOpen は type=1 を使用する必要があります(type=0 → 作成が拒否されます)。IOConnectCallAsyncStructMethod を経由する必要があります(同期パスは検証前に IO_Config:337 ゲートで拒否されます)。教育および防御的研究目的のためです。このバグは現在の macOS でパッチ適用済みです。所有するハードウェアでのみテストしてください。