Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2026-28912 — Заметки по обратной разработке и рабочий PoC для ошибки следования по символическим ссылкам в macOS PackageKit (CVE-2026-28912), с diff дизассемблирования исправления в 26.6. | Kitploit
Инструменты/GitHubGitHub/jvidhan/cve-2026-28912
Повышение привилегийСтатический анализАнализ уязвимостейЭксплуатацияОбратная инженерияАнализ Бинарных ФайловСтатьи и ИсследованияОбучение и Образование
GitHubjvidhan/cve-2026-28912

cve-2026-28912

Заметки по обратной разработке и рабочий PoC для ошибки следования по символическим ссылкам в macOS PackageKit (CVE-2026-28912), с diff дизассемблирования исправления в 26.6.

114 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

CVE-2026-28912 — Заметки по обратной разработке и воспроизведение

Независимая обратная разработка ошибки следования по символической ссылке в macOS PackageKit (CVE-2026-28912), а также рабочий PoC, демонстрирующий, как установщик записывает контролируемый злоумышленником файл от имени root через символическую ссылку на каталог в пути назначения установки.

Ошибка представляет собой несинхронизированный обход пути в логике перепривязки файлов PKCoreShove. Вредоносный .pkg может объявить путь назначения в непривилегированном каталоге, разместить символическую ссылку на каталог в одном из компонентов пути, указывающую на привилегированное расположение, и заставить установщик — работающий от имени root — записать данные в цель символической ссылки. Исправление Apple в 26.6 добавляет _PKSIPOpenPathSafely, который обходит каждый компонент пути с O_NOFOLLOW и отклоняет любую символическую ссылку.


CVE кратко

ПолеЗначение
CVECVE-2026-28912
КомпонентPackageKit (PKCoreShove, PKBundleComponent)
ЗатронутоmacOS Tahoe 26.5 и более ранние
Исправлено вmacOS Tahoe 26.6
Влияние по бюллетеню"Приложение может получить привилегии root."
CVSS v3.17.8 (Высокий)
СообщеноПервоначальные исследователи согласно бюллетеню Apple

Зачем нужен этот разбор

Бюллетень Apple для CVE-2026-28912 описывает влияние и исправленную версию. Он не описывает технический механизм:

  • Какая функция в PackageKit следует по символической ссылке
  • Почему установщик обходит путь назначения без проверки каждого компонента
  • Какая функция была добавлена в 26.6 для закрытия ошибки
  • Почему исправление вставляет обход с O_NOFOLLOW именно в этой точке
  • Почему PoC должен использовать символическую ссылку на каталог, а не на файл
  • Почему символическая ссылка на уровне файла в месте назначения заменяется, а не используется для перехода

На момент написания публичный технический разбор не был найден. Этот репозиторий восполняет этот пробел независимым анализом обратной разработки PackageKit между 26.4 и 26.6 и рабочим PoC, демонстрирующим примитив в действии.

Это не заявка на открытие. CVE был обнаружен первоначальными исследователями и исправлен Apple. Вклад здесь — технический анализ и воспроизведение.


Краткое описание уязвимости

PKCoreShove _relinkFile:dest: в macOS 26.4 обходит путь назначения компонент за компонентом при создании файла:

; macOS 26.4, PackageKit
1a9fb14f8   _relinkFile:dest:
    ...
    bl   _linkResolutionProhibitted     ; returns 0 in the normal case
    mov  w8, 0x10                       ; RENAME_NOFOLLOW_ANY
    cmp  w0, 0
    csel w22, w8, wzr, ne               ; w22 = 0x10 if prohibited, else 0
    ...
    mov  x2, x22
    bl   _renamex_np                    ; uses w22 as flags

_linkResolutionProhibitted возвращает 0 (false), когда вызывающий процесс не может изменять файлы SIP — обычный случай для установки, инициированной пользователем. Это отключает RENAME_NOFOLLOW_ANY, поэтому переименование следует по любой символической ссылке в пути назначения.

Исправление в 26.6 добавляет _PKSIPOpenPathSafely, вызываемый из PKBundleComponent initWithBundleAtPath:relativeToDestination::

; macOS 26.6, PackageKit
1aa6dfe18   bl   _PKSIPOpenPathSafely    ; walks each component with O_NOFOLLOW

_PKSIPOpenPathSafely:

  1. Открывает каждый компонент пути с O_NOFOLLOW (0x4)
  2. Обнаруживает символические ссылки через S_IFLNK (0xa000 в st_mode)
  3. Проверяет защиту SIP через _PKSIPFullyProtected
  4. Читает SF_RESTRICTED через fgetattrlist
  5. Использует close_drop_np для снятия расширения песочницы при очистке

Любой компонент, являющийся символической ссылкой, указывающей за пределы предполагаемого пути, отклоняется с EPERM или ELOOP, и установка завершается неудачей.


Что содержит этот репозиторий

Обратная разработка

  • Дифф дизассемблирования PKCoreShove _relinkFile:dest: и _linkResolutionProhibitted между 26.4 и 26.6
  • Идентификация уязвимого поля: _linkResolutionProhibitted, возвращающий 0 для процессов, не изменяющих SIP
  • Идентификация исправления: _PKSIPOpenPathSafely, добавленный в PKBundleComponent, покомпонентный обход с O_NOFOLLOW
  • Анализ системных вызовов: установщик использует renamex_np с RENAME_NOFOLLOW_ANY = 0x10 только когда вызывающий может изменять файлы SIP
  • Подтверждение во время выполнения: fs_usage показывает, что установщик выполняет stat/listxattr для цели символической ссылки и записывает через символическую ссылку на каталог

См. docs/ANALYSIS.md для полного разбора и docs/ARTIFACTS.md для адресов и образцов логов.

Воспроизведение

  • link.sh — однофайловый, самодостаточный PoC:

    1. Создаёт символическую ссылку на каталог в $HOME/cve-poc/target → $HOME/cve-poc/real
    2. Собирает .pkg, полезная нагрузка которого объявляет файл в $HOME/cve-poc/target/poc.txt
    3. Устанавливает его с помощью sudo installer
    4. Проверяет, что файл оказался в $HOME/cve-poc/real/poc.txt — с владельцем root:wheel

Что демонстрирует этот PoC

  • Полезная нагрузка .pkg, объявляющая файл в непривилегированном каталоге
  • Установщик, следующий по символической ссылке на каталог по этому пути
  • Файл, принадлежащий root, создаётся вне объявленного места назначения
  • Захват записи в реальном времени через fs_usage

Что этот PoC НЕ демонстрирует

  • Символическую ссылку на уровне файла в месте назначения. Символические ссылки на файлы заменяются renamex_np, а не используются для перехода — запись должна происходить через символическую ссылку на каталог в пути.
  • Выполнение кода, повышение привилегий или получение оболочки на жертве
  • Вооружение: PoC по умолчанию использует $HOME/cve-poc/real/, а не /etc/sudoers.d/ или /Library/LaunchDaemons/

Продемонстрированное влияние — это примитив следования по символической ссылке — именно то поведение, которое закрывает исправление в 26.6.


Требования

Целевой (жертвенный) хост

  • macOS Tahoe 26.5 или более ранняя (уязвимый PackageKit)
  • pkgbuild, installer, fs_usage
  • Root (для установщика)

Отдельный хост злоумышленника не нужен

PoC выполняется полностью на цели. Символическая ссылка и полезная нагрузка создаются локально. Это делает PoC самодостаточным и воспроизводимым без какой-либо сетевой конфигурации.


Использование

chmod +x link.sh
./link.sh

Опциональная настройка через переменные окружения:

sudo CONTENT="test content" ./link.sh

CONTENT задаёт содержимое, записываемое через символическую ссылку. По умолчанию это hello.

Ожидаемый вывод

[*] System information:
ProductName:        macOS
ProductVersion:     26.4
BuildVersion:       25E246

[*] Setup...
    Symlink:  /Users/nerd/cve-poc/target → /Users/nerd/cve-poc/real

[*] Build .pkg...
    Payload:  /Users/nerd/cve-poc/payload/Users/nerd/cve-poc/target/poc.txt
    Package:  /Users/nerd/cve-poc/poc.pkg

[*] Install (password prompt expected)...
installer: Package name is poc
installer: Installing at base path /
installer: The install was successful.

[✓] VULNERABILITY CONFIRMED
    Landed at /Users/nerd/cve-poc/real/poc.txt
    Owner:   root:wheel
    Content: hello

CVE-2026-28912 trigger SUCCESSFUL

Проверка исправления

На исправленной системе (26.6) тот же PoC завершается неудачей:

[✗] Not triggered
No file was created in /Users/nerd/cve-poc/real/

См. docs/PATCH_DIFF.md для сравнения дизассемблирования.


Подводные камни .pkg (для воспроизводимости)

Две детали в PoC были обнаружены во время разработки и задокументированы здесь, чтобы другие, создающие аналогичные инструменты, не наткнулись на них:

  1. Символическая ссылка должна находиться в компоненте пути, по которому обходит установщик. Символическая ссылка на уровне файла в конечном элементе назначения заменяется renamex_np; используется для перехода только символическая ссылка на каталог в середине пути.
Скачать инструмент