【问题标题】:Class loading from plist vulnerability从 plist 漏洞加载类
【发布时间】:2013-06-21 09:35:18
【问题描述】:

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

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

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

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

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

有什么想法吗?

【问题讨论】:

  • 通过修改 plist 输入任意类名,上面的代码会盲目地尝试加载该类而不是预期的类。我想弄清楚这是否可能发生

标签: ios objective-c security jailbreak


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 感谢您的准确回答。当然,这个场景比我公开的场景要复杂一些,例如该应用程序已经有了一些防混淆保护。这就是为什么我担心这样一个幼稚的缺陷会使它们变得无用。然而,对于在越狱环境中运行的其他漏洞,这听起来像是一个小问题。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 2021-06-30
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 2011-02-22
  • 1970-01-01
相关资源
最近更新 更多