Apple geht gegen Hot-Patching in iOS-Apps vor
Medienberichten zufolge weist Apple eine kleine Gruppe von App-Entwicklern daraufhin, dass deren eingereichte Apps Gefahr laufen, aus dem App Store verbannt zu werden. Apple stört sich in diesen Fällen offenbar an deren integrierten Hot-Patch-Mechanismen. Durch Erweiterungen wie Rollout.io und JSPatch lassen sich so abseits der offiziellen App-Store-Prüfung über Server jederzeit Updates einspielen und so die Funktionsweise anpassen.
Bereits im vergangenen Jahr hatten Sicherheitsexperten darauf hingewiesen, dass diese Mechanismen in einigen Fällen sowohl zum Guten als auch Bösen verwendet werden können. So lassen sich iOS-App damit um systemnahe Funktionen oder ganz neue Funktionen erweitern, die es so nicht durch die App-Store-Prüfung von Apple geschafft hätten. Beispielsweise könnten heimlich Bild-, Ton- und Video-Aufnahmen erstellt oder teure Telefonanrufe durchgeführt werden.
Betroffene Entwickler und auch die Anbieter derartiger Erweiterungen
zeigen sich von Apples Vorgehen nun wenig begeistert, da so ein Weg genommen wird, zeitnah kritische Fehler in eine App zu beheben. Dabei liegt es in der Hand der Entwickler, entsprechende Sicherheitsfilter einzubauen, damit trotz Hot-Patching keine unerlaubten systemnahen Funktionsaufrufe über Internet-Server eingeschleust werden können. Das dies möglich ist und von Apple toleriert wird, zeigen alternative Lösungen wie
Expo und
CodePush.
Apples E-Mail an Entwickler
Your app, extension, and/or linked framework appears to contain code designed explicitly with the capability to change your app’s behavior or functionality after App Review approval, which is not in compliance with section 3.3.2 of the Apple Developer Program License Agreement and App Store Review Guideline 2.5.2. This code, combined with a remote resource, can facilitate significant changes to your app’s behavior compared to when it was initially reviewed for the App Store. While you may not be using this functionality currently, it has the potential to load private frameworks, private methods, and enable future feature changes.
This includes any code which passes arbitrary parameters to dynamic methods such as dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations(), and running remote scripts in order to change app behavior or call SPI, based on the contents of the downloaded script. Even if the remote resource is not intentionally malicious, it could easily be hijacked via a Man In The Middle (MiTM) attack, which can pose a serious security vulnerability to users of your app.
Please perform an in-depth review of your app and remove any code, frameworks, or SDKs that fall in line with the functionality described above before submitting the next update for your app for review.