Skip to content

Подпись хелпера и hardened runtime — вместе с Developer ID #20

Description

@akalikbergenov

Вторая половина #1, отложенная до покупки Apple Developer ID. Первая половина
(ссылки календаря, санитайзинг метаданных, типы отказа в буфере, SHA-256 в
заметках) уже в main.

Что предложено

Scripts/bundle.sh подписывает вложенное отдельно от бандла, без устаревшей
--deep, с --options runtime и entitlement на Apple-события; хеш
libcyclopmedia.dylib запечатывается в Info.plist, а NowPlayingFeed
сверяет его перед тем, как отдать библиотеку в perl.

Зачем

/usr/bin/perl подписан без валидации библиотек: он загрузит что угодно,
что лежит по этому пути, и оно окажется внутри процесса, которому доверяет
mediaremoted. Между этими двумя фактами сегодня не стоит ничего.

Почему ждём

Автор PR сам назвал границу применимости, и это честно: против простой подмены
файла проверка держит, но кто может переписать dylib — перепишет и Info.plist
рядом с ним. Настоящей границей это становится только там, где подделанный
бандл вообще не запускается, то есть с Developer ID и нотаризацией.

А риск сегодня — реальный и молчаливый: связка «hardened runtime + ad-hoc
подпись + чужой perl» ломает Now Playing без единого сообщения. Не упадёт, не
покажет ошибку — вкладка просто скажет «Ничего не играет», и заметит это не
разработчик, собирающий из исходников, а тот, кто поставил образ.

Что сделать, когда дойдут руки

  1. Купить Developer ID, добавить нотаризацию в Scripts/bundle.sh.
  2. Взять правки подписи и сверки хеша из Ограничить ссылки из календаря, сверять хеш хелпера, поправить SECURITY.md #1 (Resources/Cyclop.entitlements,
    bundle.sh, NowPlayingFeed.isTrusted, шаг проверки в CI).
  3. Прогнать Now Playing на чистой машине из установленного образа — не из
    сборки в build/: разница здесь и есть суть проверки.

Заодно снимется требование «Всё равно открыть» при первом запуске, о котором
спрашивают в комментариях к видео.

Автор исходных правок — @DontTrustMexD.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions