我目前正在审核一个iOS应用程序,我遇到了这个场景,这让我想知道它是否可能以某种方式被利用。
这是一个场景:有一个包含类名的plist,即一个UIViewController
子类名,作为字符串。
然后加载这样的字符串并用于检索匹配的类,如下所示:
NSString *className = ... // loaded from plist
UIViewController *vc = [(UIViewController *)[NSClassFromString(className) alloc] initWithNibName:className bundle:[NSBundle mainBundle]];
我想知道是否有可能(在越狱设备上)篡改plist并让应用程序加载任意UIViewController
子类。
有什么想法吗?
答案 0 :(得分:3)
是的,有一个漏洞,但正如@LonelyDeveloper在评论中所说,我认为这是对越狱设备的最小担忧。
根据您发布的代码,如果有人修改了应用的Info.plist - 他们可以>>在越狱手机上执行此操作 - 该应用将加载另一个UIViewController
子类。现在,如果这就是他们所做的一切,那么它只会是应用程序中存在已经的子类,或者应用程序已经加载的库。
这样做可能会导致应用无法正常运行。这似乎不是让应用程序做一些完全恶意的好方法。
您的应用必须有一些其他缺陷。例如,假设这是一个缓存数据的银行应用程序。该应用程序打开一个登录视图控制器。帐户视图控制器显示敏感信息,但如果没有通过登录视图控制器成功输入密码,应用程序将不允许您查看帐户视图控制器。使用此plist加载,如果plist说要加载LoginViewController
,并且攻击者修改plist以指定AccountViewController
,则可能会获得应该受保护的信息的访问权限。但是,我认为这种情况显示了组合的缺陷。
但是,如果恶意用户(有人偷了你的手机)或Cydia的恶意下载安装了MobileSubstrate调整,那么他们可以加载UIViewController
的任意子类,不只是你的应用程序中的错误视图控制器。但是,即使没有plist类加载,这也允许他们这样做。 MobileSubstrate调整可以使用挂钩来注入所有类型的新代码,几乎无论他们想要什么。
因此,此漏洞已存在,您必须相信越狱社区和越狱回购可以充分保护您免受恶意软件的侵害。这就是为什么我基本上只在我的越狱设备上安装Cydia,SBSettings,Activator和Saurik的unix命令行工具。