概要
- SiguzaによるiOS 13.0〜13.5向け「tachy0n」カーネルエクスプロイトの詳細解説
- 2020年5月23日にunc0ver v5.0.0で0dayとして公開、Appleが1週間後に緊急パッチ
- Lightspeedバグ(CVE-2020-9859等)を利用したカーネルLPEの仕組み
- 過去のSpice脱獄や1dayエクスプロイトとの関係や手法の進化
- Appleの回帰テスト不足がもたらした再発バグの背景
tachy0n:最後の0day Jailbreak
- Siguza が5年ぶりに公開したカーネルエクスプロイト解説記事
- iOS 13.0〜13.5 を対象とし、unc0ver v5.0.0で0dayとしてリリースされた経緯
- Apple が本脆弱性のみを修正する緊急パッチ(2020年5月)を一週間後に配信
- 0dayとして公開されたが、以前は1dayとしても利用されていた事実
- Pwn20wnd が回帰テストによりバグを再発見した経緯
Lightspeedバグの概要
- Synacktiv によるLightspeedバグ(CVE-2020-9859等)の技術的詳細
- lio_listioシステムコール 内での非同期/バッチI/O処理用構造体の管理不備
- レースコンディション による二重解放(double free)の発生条件
- lio_contextの割当→解放→再割当→再解放の流れ
- kalloc.16ゾーン 内での再割当とcanary値による安全対策の隙間
- 実際にはレースが成功するまで何度も繰り返し試行できる点
Spice脱獄と1dayエクスプロイト
- Spice脱獄 (Jake Blairチーム)でのiOS 11.x向けLightspeedバグ利用
- アプリ版とracoon版 で異なるカーネルエクスプロイト手法
- 目的はどちらも mach port偽造 による権限昇格
- A7〜A9(X) デバイスではユーザランドから直接カーネルポインタ偽造が容易
- A10/A11 では追加の情報漏洩バグやサンドボックスエスケープが必要
- racoon 環境特有の制約とRootDomainUserClient経由のスプレー手法
- IOSurface未使用でもOSUnserializeXMLを利用したリークが可能
- sysctl 経由でカーネル__DATA領域へのデータ配置が容易(racoonはroot権限)
- CVE-2018-4413 (panicall)の情報漏洩バグでカーネルスライド取得
- iOS 11向けにはより優れたカーネルエクスプロイトが既に存在
Appleの回帰テスト不足とその影響
- iOS 12での SockPuppetバグ 再発(Appleのパッチ適用漏れ)
- 回帰テスト の未整備が再発バグ検出の抜け穴に
- Pwn20wnd が既知の1dayバグに対するテスト自動化で未修正バグを発見
- シンプルだが手間のかかる作業が大企業の弱点となる実例
今後の展開やunc0verに関する詳細は、次の記事タイトル以降で解説予定。