Как стать автором
Обновить

Комментарии 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, где уязвимость то?
Самое худшее что может случиться — пользователи опустят рейтинг ниже некуда и приложение вообще никто не будет качать. Как именно этот креш позволяет угнать личные данные или что-то еще?
НЛО прилетело и опубликовало эту надпись здесь
Наш программист собрал, запустил, спрингборд успешно ушел в рестарт.
У вас слишком громкий заголовок — вместо iOS надо было Springboard написать.
А какая версия iOS?
6.1.2
НЛО прилетело и опубликовало эту надпись здесь
«Подумаешь, из-за какой-то кривой программулины (запущенной от обычного юзера, не от админа), Винда падает — удалю прогу и дело с концом. Большое дело....»
НЛО прилетело и опубликовало эту надпись здесь
>И я не расстраиваюсь, ибо это — не проблема платформы.

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

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

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

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

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

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

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

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

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

Ну да, ну да, где-то война, смерть, дети в Африке голодают, уссурийские тигры на грани исчезновения, а мы тут про какие-то ребуты, да? :)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
еще более интересно, как данного рода софт установить на не-джейлбрейкнутый девайс (из 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
НЛО прилетело и опубликовало эту надпись здесь
Читаю комментарии и диву даюсь. Какая истерика, какой шум? Нашел способ обрушить iOS Springboard — поделился с читателями Хабра. Мы же на этом сайте чтобы делиться такими вещами, разве нет, вот скажите?
Зря раскрыли. Это уязвимость возможно можно было бы в следующем jailbreak использовать, хотя бы и привязаном.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории