
CVE-2026-43813: обход enforceEnvironment в CloudAttestation
enforceEnvironment в CloudAttestationРеверс-инженерный анализ ошибки проверки входных данных аттестации PCC,
которую Apple выпустила в iOS 26.6 и которая находится в CloudAttestation.dylib.
PCC.ComputeNodeValidator.policy.getter читает
байт com.apple.CloudAttestation.environment из непроверенного
словаря darwinInit внутри protobuf-сообщения AttestationBundle и
заталкивает его напрямую в NodeValidator.policy, возвращаемый вызывающему коду.
Исправление 26.6 добавляет новое поле структуры, которое должно управлять
этим чтением через системный ключ политики enforceEnvironment в
домене com.apple.CloudAttestation — но это поле никогда
не инициализировалось в 26.5, поэтому шлюз фактически отсутствовал, и
специально сформированный пакет аттестации PCC мог записать выбранное атакующим значение окружения в
цепочку политик валидатора.
Сам по себе байт ничего не открывает — он должен совпасть с
параметром expected, предоставленным вызывающим кодом, чтобы пройти EnvironmentPolicy.evaluate,
а остальной стек производственных политик (requireProdTrustAnchors,
requireProdFusing, requireLockedCryptexes, restrictDeveloperMode,
strictCertificateValidation, transparencyProofValidation,
ensembleTopologyValidation) считывается из os_policy_lookup, а не из
пакета.
Базы данных IDA (.i64), дампы BinExport и другие промежуточные сборки игнорируются git.
Показатель сходства Bindiff для исправленной пары: 0.68.
CVE-2026-43813.txt — исходное описание CVE (дословно из VulDB)releases.txt — идентификаторы сборок в хронологическом порядкеЭто исследование было выполнено при значительной помощи MiniMax-M3. Имейте это в виду, читая разборы: ни один из результатов анализа не проверен независимо, и любые цитируемые декомпиляции, адреса или оценки сходства следует перепроверять, прежде чем полагаться на них.
| Сборка | Путь | Роль |
|---|
| 23G5057c | 23G5057c_CloudAttestation | 26.6 beta 4 (уязвимая) |
| 23G5065a | 23G5065a_CloudAttestation | 26.6 beta 5 (исправленная) |
| — | 23G5065a_CloudAttestation_vs_23G5057c_CloudAttestation.BinDiff | Дифф между ними |
| Символ | 23G5057c (уязв.) | 23G5065a (испр.) |
|---|
PCC.ComputeNodeValidator.policy.getter | 0x235e16f5c (0x1c4) | 0x235e02fa8 (0x1dc) |
PCC.ComputeNodeValidator.init(proxyingAttestation:) | 0x235e15ca0 | 0x235e01bf4 |
Вспомогательная функция поиска enforceEnvironment в инициализаторе | (отсутствует) | 0x235ed01cc |
DarwinInit.environment.getter | 0x235edc880 | тот же |