CVSS 9.8 из 10: один клик — и ваш Mac — ловушка, а вы — жертва

Думаете, macOS неприступна? Попробуйте этот пакет SMB и скажите это ещё раз.


4hmjij96c9hrbdytuqkz2kbo0vugxxdu.jpg


Специалисты выявили серьёзные уязвимости в SMBClient для macOS, которые затрагивают как пользовательское пространство, так и ядро операционной системы. Эти уязвимости потенциально позволяют удалённо исполнять произвольный код и завершать критически важные процессы системы. В ходе анализа стало ясно, что под угрозой находится широкий круг пользователей, учитывая, что начиная с macOS Big Sur протокол SMB стал предпочтительным способом организации сетевого обмена файлами.

SMBClient представляет собой совокупность компонентов, включая как пользовательские процессы, так и драйверы ядра, предназначенные для работы с файловыми системами, доступными через сетевые ресурсы. Заметная часть кода SMB-клиента взаимодействует напрямую с ядром системы, что открывает дополнительные векторы атак. Кроме того, существует возможность эксплуатации уязвимостей с минимальным участием пользователя — достаточно заставить человека перейти по специально подготовленной ссылке вида smb://.

Первая из обнаруженных уязвимостей зарегистрирована под идентификатором CVE-2025-24269 (оценка CVSS: 9.8) и связана с компонентом smbfs.kext — драйвером ядра macOS для работы с SMB. Проблема заключается в функции обработки сжатых данных smb2_rq_decompress_read, где в ряде случаев происходит некорректная проверка длины входящих данных. Если используется один из поддерживаемых алгоритмов сжатия — LZNT1, LZ77 или LZ77_Huffman — специальное поле compress_len читается из сетевого пакета, но его значение никак не валидируется перед копированием данных в буфер compress_startp. При этом макрос SMB_MALLOC_DATA, применяемый для выделения памяти, позволяет злоумышленнику управлять размером выделяемого блока — он может достигать до 16 мегабайт.

В результате возникает переполнение динамической памяти внутри xnu data heap — это область памяти ядра, где за счёт дополнительных механизмов защиты ограничено присутствие управляющих указателей, но полностью исключить возможность эксплуатации такого дефекта нельзя. Специалисты подчёркивают, что для успешной атаки достаточно убедить пользователя кликнуть по вредоносной smb:// ссылке, что позволит злоумышленнику инициировать взаимодействие с уязвимым сервером и активировать передачу специально подготовленных пакетов.

Вторая обнаруженная уязвимость , получившая номер CVE-2025-24235 (оценка CVSS: 5.5), затрагивает библиотеку Kerberos Helper, применяемую для установления SMB-сессии. Здесь выявлена классическая ошибка безопасности — освобождение неинициализированной переменной стека. Во время разбора токенов аутентификации в функции _KRBDecodeNegTokenInit может произойти ситуация, при которой внутренний вызов _gss_decapsulate_token завершится неудачей. Однако даже при этом управление передаётся к блоку освобождения памяти, где функция _free_NegotiationToken работает с неинициализированной областью стека.

Более глубокий анализ показал, что в процессе освобождения памяти вызывается функция _asn1_free из библиотеки Heimdal, предназначенная для разбора и очистки ASN.1-структур. Поскольку освобождаемая структура не была инициализирована, существует риск неконтролируемого доступа к памяти, что потенциально может привести к выполнению произвольного кода на устройстве жертвы. Для успешной атаки достаточно использования стандартных механизмов подключения — к примеру, перехода по smb:// ссылке или монтирования ресурса через mount_smbfs.

Третья уязвимость, хоть и не получила официального идентификатора CVE, тем не менее, признана критически важной. Она связана с некорректной реализацией механизма регистрации процесса mc_notifier в модуле smbfs. Эта служба отвечает за уведомления при размонтировании сетевых ресурсов. Пользователь любого уровня привилегий может посредством ioctl-запроса SMBIOC_UPDATE_NOTIFIER_PID зарегистрировать произвольный идентификатор процесса. Если после этого произойдёт размонтирование ресурса, ядро системы отправит зарегистрированному процессу сигнал SIGTERM — стандартное завершение.

Проблема заключается в том, что ядро не проверяет права вызывающего процесса и корректность указанного идентификатора. Это позволяет злоумышленнику завершить работу практически любого процесса в системе, включая критически важный процесс launchd, отвечающий за запуск и управление всеми пользовательскими и системными службами. В результате система оказывается в неработоспособном состоянии и требует перезагрузки. При этом для эксплуатации достаточно иметь доступ к устройству и возможность открытия устройства /dev/nsmb, что в большинстве сценариев возможно даже без выхода из пользовательской изоляции (sandbox).

Компания Apple уже устранила все три уязвимости. В частности, была добавлена проверка длины сжатого блока данных в функции обработки пакетов SMB, чтобы исключить возможность переполнения памяти. Кроме того, в библиотеке Kerberos Helper теперь производится предварительная очистка структуры NegotiationToken перед её использованием и освобождением, что предотвращает эксплуатацию дефекта. Для механизма регистрации mc_notifier внедрена проверка полномочий пользователя, вызывающего ioctl SMBIOC_UPDATE_NOTIFIER_PID, что исключает возможность неконтролируемого завершения произвольных процессов.

Отдельно отмечается, что в iOS архитектура работы с SMB отличается. Реализация протокола не затрагивает пространство ядра, а ограничивается пользовательскими приложениями, такими как «Файлы» и связанными фреймворками. Это снижает риск эксплуатации аналогичных уязвимостей на мобильных устройствах Apple, однако общие принципы безопасности остаются актуальными для всех платформ.

Выявленные уязвимости наглядно демонстрируют, насколько критично корректное взаимодействие между компонентами ядра и пользовательского пространства, особенно в случаях, когда речь идёт о сетевых протоколах и потенциальном удалённом взаимодействии.