- Darwin Notification システムの特性と脆弱性を利用して iPhoneを文鎮化できた事例の紹介
- この脆弱性は CVE-2025-24091 として登録され、報告者は $17,500(2500万ウォン) のバグバウンティを受け取った
- 特別な権限なしに システムレベルの通知を送信できる点を悪用し、iOSデバイス全体を麻痺させることができた
- 簡単な1行コードで "Restore in Progress" モードを強制的に発生させ、再起動の繰り返しを誘発する サービス拒否(DoS)攻撃 の可能性が確認された
- iOS 18.3アップデート により、重要なDarwin Notificationの送信に 制限付き権限(entitlement) を要求するよう修正され、脆弱性は解消された
Darwin Notifications
- Darwin Notifications は、iOSとmacOSでプロセス間の簡単なメッセージをやり取りするための CoreOSレベル の仕組み
notify_post でイベントを通知し、notify_register_dispatch でイベントを受信し、状態値(state) を読み書きできる構造
- 特別な権限なしに 受信と送信が可能で、セキュリティ検証手順がない
- システムのさまざまなコンポーネントが このレガシーAPI に依存していた
脆弱性の概要
- Appleオペレーティングシステム上のすべてのプロセスは Darwin Notifications を受信でき、特別な権限は不要
- サンドボックス化されたアプリ からでも Darwin Notificationを送信 できるという構造的な欠陥が存在した
- データ転送量が限られているため、機密データ流出のリスクは大きくない
- 特定の重要なシステム通知(例: 復元開始通知)を送信すると、システム全体に影響を与えうる
- このことから サービス拒否(DoS)攻撃 の可能性が見つかった
EvilNotifyとVeryEvilNotify
- EvilNotifyアプリ によって、さまざまなシステム反応を強制的に発生させることができた
- 液体検出アイコン の表示
- Wi-Fiの遮断とセルラーの強制使用
- ロック画面およびコントロールセンターのジェスチャー無効化
- Find MyのLost Modeへの移行 など
- 特に、
notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted") の1行だけで Restore in Progress 状態に陥らせることができた
- このモードではデバイスが実際には復元されないため失敗し、唯一の解決策は "再起動" ボタンを押すことだった
- VeryEvilNotifyアプリ はウィジェット拡張を利用して、再起動後も自動で攻撃を再開 できるように実装された
- ウィジェット拡張はシステムによってバックグラウンドで定期的に実行され、
notify_post 関数を呼び出して "復元中" モードを繰り返しトリガーした
- 結果として、デバイスを 完全に文鎮化 する効果を引き起こせた
タイムラインとCVE登録
- 2024年6月26日: Appleに初回インシデント報告書を提出
- 2024年9月27日: Appleから緩和策を進めているとのメッセージを受信
- 2025年1月28日: 問題解決完了およびバグバウンティ資格確定
- 2025年3月11日: CVE-2025-24091として正式登録され、iOS/iPadOS 18.3で修正
- バグバウンティ金額 は 17,500米ドル 支払われた
対応と緩和策
- 機微なDarwin Notification の送信には 制限付き権限(entitlement) が必要となるよう変更された
- 例えば、従来の
com.apple.MobileBackup.BackupAgent.RestoreStarted 通知は com.apple.private.restrict-post.MobileBackup.BackupAgent.RestoreStarted に変更された
- 通知を受信するプロセス側も新しい名前を使うことで、未認可アプリによる不正送信を遮断 する
- この制限付き権限の仕組みは iOS 18.2 beta 2 から適用が始まり、iOS 18.3 で完全に仕上げられた
1件のコメント
Hacker Newsの意見
このAPIでは、設定や通知の投稿に関するあらゆる利用について権限を要求しない点が興味深い
説明された脆弱性はデバイスを「文鎮化」しない
$17,500はかなり良い額だ
素晴らしい仕事だ
iOSコアチームがこれをレビューしたとき、オフィスでどれほど大変な一日だったか想像できる
コード1行でデバイスを「復旧進行中」モードに入れられた
昔のIRC時代が恋しい
サードパーティ製アプリが独自の通知機構を持っているなら、同様になりすまされる可能性があることを示唆している
悪意のあるアプリをユーザーが自発的にインストールする必要があるため、優先度は低いかもしれない
この記事は素晴らしい読み物だった
notify_postが今どうなっているのか気になる