You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Вторая половина #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 без единого сообщения. Не упадёт, не
покажет ошибку — вкладка просто скажет «Ничего не играет», и заметит это не
разработчик, собирающий из исходников, а тот, кто поставил образ.
Что сделать, когда дойдут руки
Купить Developer ID, добавить нотаризацию в Scripts/bundle.sh.
Вторая половина #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 без единого сообщения. Не упадёт, не
покажет ошибку — вкладка просто скажет «Ничего не играет», и заметит это не
разработчик, собирающий из исходников, а тот, кто поставил образ.
Что сделать, когда дойдут руки
Scripts/bundle.sh.Resources/Cyclop.entitlements,bundle.sh,NowPlayingFeed.isTrusted, шаг проверки в CI).сборки в
build/: разница здесь и есть суть проверки.Заодно снимется требование «Всё равно открыть» при первом запуске, о котором
спрашивают в комментариях к видео.
Автор исходных правок — @DontTrustMexD.