2

我目前正在审核一个 iOS 应用程序,我遇到了这种情况,这让我想知道它是否可以以某种方式被利用。

这是场景:有一个 plist 包含一个类名,即一个UIViewController子类名,作为一个字符串。

然后加载此类字符串并用于检索匹配的类,如下所示:

NSString *className = ... // loaded from plist 
UIViewController *vc = [(UIViewController *)[NSClassFromString(className) alloc] initWithNibName:className bundle:[NSBundle mainBundle]];

我想知道是否有可能(在越狱设备上)篡改 plist 并让应用程序加载任意UIViewController子类。

有什么想法吗?

4

1 回答 1

3

是的,有一个漏洞,但正如@LonelyDeveloper 在评论中所说,我认为这是越狱设备最不担心的问题。

确实,使用您发布的代码,如果有人修改了应用程序的 Info.plist - 他们可以在越狱手机上执行此操作 - 应用程序将加载UIViewController. 现在,如果这就是他们所做的一切,那么它将只是应用程序中已经存在的子类,或者应用程序已经加载的库。

这样做可能只会导致应用程序无法正常运行。这似乎不是让应用程序做一些完全恶意的事情的好方法。

您的应用程序必须有其他一些缺陷。例如,假设这是一个缓存数据的银行应用程序。该应用程序以登录视图控制器打开。帐户视图控制器显示敏感信息,但应用程序不会让您在未通过登录视图控制器成功输入密码的情况下看到帐户视图控制器。通过此 plist 加载,如果 plist 表示要加载LoginViewController,并且攻击者修改 plist 以指定AccountViewController,则可能会获得对应受保护的信息的访问权限。但是,我认为这种情况显示了多种缺陷。

但是,如果恶意用户(有人偷了你的手机)或从 Cydia 恶意下载安装了MobileSubstrate调整,那么他们可以加载任意子类UIViewController,而不仅仅是从你的应用程序中加载错误的视图控制器。但是,即使没有加载 plist 类,这也允许他们执行此操作。MobileSubstrate 调整可以使用挂钩来注入各种新代码,几乎在他们想要的任何地方。

因此,此漏洞已经存在,您必须相信越狱社区和越狱存储库可以充分保护您免受恶意软件的侵害。这就是为什么我基本上只在我的越狱设备上安装 Cydia、SBSettings、Activator 和 Saurik 的 unix 命令行工具的原因。

于 2013-06-22T23:28:43.403 回答