我遇到了一个混合 Android 应用程序——这意味着它的大部分 UI 都是使用 HTML 和 JavaScript 技术在 WebView 中实现的。应用程序本身正在连接到服务器,并且可能的响应之一可以包含evaluate
字段,然后通过 JavaScript 的eval()
命令直接执行该字段。
这是一个安全问题吗?攻击者可以通过这种攻击向量进行什么样的攻击?
我遇到了一个混合 Android 应用程序——这意味着它的大部分 UI 都是使用 HTML 和 JavaScript 技术在 WebView 中实现的。应用程序本身正在连接到服务器,并且可能的响应之一可以包含evaluate
字段,然后通过 JavaScript 的eval()
命令直接执行该字段。
这是一个安全问题吗?攻击者可以通过这种攻击向量进行什么样的攻击?
嗯。eval
在幼稚的人手中可能会很可怕或非常危险,但从功能的角度来看,脚本标签实际上更糟糕,但仍需要。混合应用程序需要脚本才能运行,没有它们就无法做任何事情。就像在普通的 web 应用程序中一样,内容将从服务器获取,并且需要执行其中一些内容来驱动应用程序。
开发人员可以将大部分/所有 JS 放入客户端应用程序中,而不是从服务器加载它,但这很快就会变得陈旧,或者由于不断更新而变得烦人,而更改服务器响应是即时且对用户不可见的。如果应用程序使用模块化系统并具有正式的通信机制,那么使用与数据相同的“到家的管道”交付代码可能是有意义的。这提供了签署、验证、限制、隔离和拒绝被篡改代码的机会。
在安全问题方面,请考虑所有应用程序都是安全问题。应用程序本身可以做的比在 webview 中运行的沙盒 JS 可以做的更多。在评估手动获取的代码时,除了代码检查之外,还有一些方法可以限制功能,方法是在不同的上下文中运行,例如 node.js、webworkers、空框架、官方 (ES20xx) 模块等。
虽然我显然不知道应用程序代码处理的细节,但我不会假设获取的代码运行顶级(间接评估)并访问“一切”。我也不认为用户创建的内容会意外地传送到这些响应字段中。我也不认为操作系统的网络视图沙箱被打破,或者操作系统的应用程序隔离措施失败了。我也不认为该应用程序甚至有足够的权限将所有必要的错误拼接在一起,这种方式允许任何比不使用混合视图的赚钱应用程序更险恶的方式。“可能发生的最坏情况”(省略零日)是应用程序权限允许的任何情况,与往常一样。
简而言之; 你的观察揭示了这个应用程序是如何工作的,而不是它在做任何本质上被误导或特别危险的事情。