Pull to refresh

Comments 46

А еще можно показать UILocalNotification с большим количеством неправильно порезанных Emoji. Убивает SpringBoard.
Как это? Можете привести код, или пояснить?
NSString *str = @"\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603\U0001F603";
    
    
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10.0];
notification.alertBody = [str substringToIndex:39];
[[UIApplication sharedApplication] scheduleLocalNotification:notification];


Если такое сработает пока приложение в фоне — SpringBoard уходит перегружаться. 39 — случайно взятое значение.
Дело не столько в emoj, можно от многих мультибайтных utf code point отрезать конец, и передав в notification, закрешить SpringBoard. substringToIndex: в общем случае не безопасна для utf.
Уязвимость в том что вы воспользовались private api?

>>Более того, мне удалось воспроизвести этот баг и без использования недокументированных вызовов.
ну а где пример? я вот не верю

>>Это означает что высока вероятность, что приложения, вызывающие перезагрузку SpringBoard (в том числе и аварийное завершение всех других приложений) могут без особых проблем пройти App Review и попасть в AppStore.
вероятность как раз крайне мала
Добавил обновление к посту.
Уязвимость в том, что этим private api может воспользоваться «злоумышленник», а не в том, что разработчик сам наступит на свои же грабли.
ну так злоумышленник может и сам респринг напрямую через private api дернуть без всяких костылей.
Ну так расскажите нам, как вы будете делать «респринг напрямую через private api», причем на телефоне без jailbreak :-)
Private api можно и без джейла использовать, другое дело, что в AppStore это не пропустят.
Можете попробовать
system([@"killall -HUP SpringBoard" cStringUsingEncoding:NSUTF8StringEncoding]);

К сожалению, у меня сейчас нет не джеилбрейкнутого подписанного девайса под рукой, что бы потестить, но в симуляторе и на джейленом девайсе работает.
Нагуглил, что после 4.2 этот способ уже не работает. Но в целом, в iOS очень много вещей можно сделать с помощью objc/runtime.h, надо только знать куда постучать.
> Private api можно и без джейла использовать, другое дело, что в AppStore это не пропустят.
> Но в целом, в iOS очень много вещей можно сделать с помощью objc/runtime.h, надо только знать куда постучать.
> А вот и хедеры github.com/Bensge/iOS-6-SpringBoard-Headers
Так интересно! Расскажите мне об этом побольше, пожалуйста!

> ну так злоумышленник может и сам респринг напрямую через private api дернуть без всяких костылей.
>> Ну так расскажите нам, как вы будете делать «респринг напрямую через private api», причем на телефоне без jailbreak :-)

Ну и где?
Зачем? Лучше отписаться джейлбрейкерам — может поможет в следующей версии iOS :)
«при Джобсе такой фигни не было» А iPhone 4 не при Джобсе вышел разве?
Вероятность того что приложение пройдет в AppStore не так велика как может показаться. Я слышал что ревью-команды используют много автоматики для тестов. Если приложение будет падать при каких-то условиях, это, поидее заметят.
Это ж какую автоматику надо запустить. Миллионы юзкейсов… Хотя с другой стороны тогда понятно, почему они по две недели проверяют простейшие игрушки ))
Ну они не клацают приложение. Я думаю есть какие-то анализаторы скомпилированого кода.
В том-то и дело что ничего необычного в скомпилированном коде не найдут. Всё что я использовал (см. UPD) — документированные стандартные вызовы.
Ну они же как-то отлавливают падения приложений? Вот также поймают и ваш баг.
Ревью длится от 10 минут до нескольких часов.
2 недели вы стоите в очереди.
Да и сейчас это от 4 до 5 дней примерно.
По разному. У меня 2 приложения ждут очереди с 21 февраля. Всего-то иконку поменял и пару пикселей на главном меню.
Очень даже могут пропустить. Особенно если сначала выпустить простую рабочую версию, а потом выкатить незначительный апдейт с этим багом. Тогда высока вероятность, что пройдет. Apple не будет тестировать все вдоль и поперек, если в игре, например, трудновоспроизводимый баг, Apple не будет тратить ресурсы, чтобы это выловить.

С другой стороны, этот код просто перезапускает SpringBoard, где уязвимость то?
Самое худшее что может случиться — пользователи опустят рейтинг ниже некуда и приложение вообще никто не будет качать. Как именно этот креш позволяет угнать личные данные или что-то еще?
UFO just landed and posted this here
Наш программист собрал, запустил, спрингборд успешно ушел в рестарт.
У вас слишком громкий заголовок — вместо iOS надо было Springboard написать.
UFO just landed and posted this here
«Подумаешь, из-за какой-то кривой программулины (запущенной от обычного юзера, не от админа), Винда падает — удалю прогу и дело с концом. Большое дело....»
UFO just landed and posted this here
>И я не расстраиваюсь, ибо это — не проблема платформы.

То, что левое приложение перезагружает SpringBoard, что приводит к нарушению работы других приложений — «не проблема платформы»? Ну-ну…

Я ведь не зря привёл аналогию с Виндой — все ваши аргументы можно просто брать и переносить без изменения:

>Все серьезные разработчики, уважающие себя и своих пользователей, не станут эксплуатировать несовершенство самой платформы.

Т.е. наличие малвари под Винду — «не проблема платформы»? Ведь «все серьезные разработчики, уважающие себя и своих пользователей, не станут эксплуатировать несовершенство самой платформы»?

>Такие выходки обычно позволяют себе третьесортные приложения от третьесортных же разработчиков.

С этим трудно спорить. Но виновата в первую очередь платформа, позволяющая такие выходки. Хоть в случае Винды, хоть в случае iOS.
UFO just landed and posted this here
Я прекрасно понял вашу мысль: «Вот если бы приватные данные спёрли — тогда да-а-а, а простой ребут — ни разу не проблема платформы».

Я согласен с тем, что ребут — куда меньшее зло, чем увод персональных данных, но не согласен с тем, что это вообще не проблема. Я считаю, что если приложение способно вмешиваться в работу пользователя с другими приложениями (хоть при наличии злого умысла, хоть при его отсутствии), то это однозначно проблема платформы, которая почему-то позволяет такие выходки.

У нас, похоже, кардинально разные подходы. Вы смотрите с точки зрения пофигистичного пользователя, привыкшего к глюкам: «Ну подумаешь, телефон ребутится ни с того ни с сего, велика беда», а я — с точки зрения разработчика, занимающего позицию «Таких глюков быть не должно, и точка».

>Бывают и посерьезнее проблемы в повседневной жизни.

Ну да, ну да, где-то война, смерть, дети в Африке голодают, уссурийские тигры на грани исчезновения, а мы тут про какие-то ребуты, да? :)
UFO just landed and posted this here
UFO just landed and posted this here
еще более интересно, как данного рода софт установить на не-джейлбрейкнутый девайс (из AppStore?)
iOS Developer Enterpise Program, точнее In-house distribution — можно установить iOS-приложение на любой аппарат. Можно установить такое приложение с самого телефона, просто скачав из интернета .ipa файл.

Ad hoc — зная серийный номер айфона, можно добавить устройство в профиль разработчика (правда есть ограничение в 100 устройств). Далее аналогично In-house distribution — хоть сразу с телефона качай. На таком принципе, например, работает TestFlight — из их приложения для iPhone можно устанавливать другие приложения (в обход App Store).

Это не говоря уж о том, что такое приложение может без проблем пройти в App Store, так как в том коде (см. UPDATE) ничего такого (приватного, недокументированного) нету. Только стандартные обработчик касаний и функция скрытия окна.
Ой, скорее ее на аппстор! Одномоментно убить все запущенные? Да ей цены нету!
Такому заголовку даже ализар позавидовал бы.
Хоткей из 3х кнопок обрушает Linux
UFO just landed and posted this here
Читаю комментарии и диву даюсь. Какая истерика, какой шум? Нашел способ обрушить iOS Springboard — поделился с читателями Хабра. Мы же на этом сайте чтобы делиться такими вещами, разве нет, вот скажите?
Зря раскрыли. Это уязвимость возможно можно было бы в следующем jailbreak использовать, хотя бы и привязаном.
Sign up to leave a comment.

Articles