ios - plist 漏洞的类加载

标签 ios objective-c security jailbreak

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

场景如下:有一个 plist,其中包含一个类名,即 UIViewController 子类名,作为字符串。

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

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

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

有什么想法吗?

最佳答案

是的,存在一个漏洞,但正如 @LonelyDeveloper 在评论中所说,我认为对于越狱设备来说这是最不值得担心的。

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

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

您的应用必须存在一些其他缺陷。例如,假设这是一个缓存数据的银行应用程序。该应用程序将通过登录 View Controller 打开。帐户 View Controller 显示敏感信息,但如果没有通过登录 View Controller 成功输入密码,应用程序不会让您看到帐户 View Controller 。通过此 plist 加载,如果 plist 表示加载 LoginViewController ,攻击者修改plist以指定AccountViewController ,有可能获得对应 protected 信息的访问权。但是,我认为这种情况显示了一系列缺陷。

但是,如果恶意用户(有人偷了您的手机)或从 Cydia 恶意下载安装了 MobileSubstrate调整,然后他们可以加载 UIViewController 的任意子类,而不仅仅是应用程序中错误的 View Controller 。但是,这也允许他们即使没有 plist 类加载也可以做到这一点。 MobileSubstrate 调整可以使用 Hook 来注入(inject)各种新代码,几乎可以在任何他们想要的地方注入(inject)。

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

关于ios - plist 漏洞的类加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17231960/

相关文章:

ios - 测试钥匙串(keychain) - OSStatus 错误 -34018

objective-c - 转换NSDate

ios - AVPlayer seekToTime : backward not working

ios - Objective-c 从类方法调用方法

windows - 如何判断我的 web 服务在 Visual Studio 2005 中运行的帐户

windows - Windows命令提示符中纯文本密码的安全性

iOS App - 长时间曝光图像

java - Apple 收据验证时连接重置 (Java 8)

objective-c - iOS:如何正确访问 UITableViewCell 的 contentView 上的自定义标签?

java - 具有操作命令的 JPasswordField 安全性