安全公告 CVE-2020-6506
2020年9月29日
正式披露的公告
此漏洞是 Android WebView 中的一个通用跨站脚本 (UXSS) 漏洞,它允许跨域 iframe 在顶层文档中执行任意 JavaScript。为 Android 设备构建并允许加载来自其不受控制的域的 http 内容的 Apache Cordova 应用程序可能会受到影响。理论上,这可能发生在 iframe 中,或者通过使用 InAppBrowser 插件 (cordova-plugin-inappbrowser) 实现。
如果你的应用程序加载本地页面(例如 Cordova 应用程序中的 index.html 加载来自 malicious-example.com 的 iframe),则无需用户交互即可利用此漏洞。
此漏洞已在 Android WebView 版本 83.0.4103.106 中修复。用户必须自行从 Google Play 商店更新他们的 Android WebView。
缓解措施
你可以采取一些预防措施来避免此漏洞。
- 尽可能使用限制性的允许列表和内容安全策略 (CSP)。
- https://cordova.net.cn/docs/en/latest/reference/cordova-plugin-whitelist/
- 确保 CSPs 对于 script-src/default-src 不包含 'unsafe-line',除非必要。
- 通常,始终将本地代码加载到应用程序的主 webview 中,并使用 InAppBrowser 显示任何远程内容。
- 始终将不受信任的内容加载到外部浏览器中(即使用
_system
调用 InAppBrowser) - https://cordova.net.cn/docs/en/latest/reference/cordova-plugin-inappbrowser/
- 始终将不受信任的内容加载到外部浏览器中(即使用
-
不要使用 iframe,如果必须使用,永远不要在应用程序的主 webview 中使用。使用
sandbox
属性将缓解此漏洞(最好使用空值)。避免同时使用这些沙箱属性allow-popups allow-top-navigation allow-scripts
,因为它们不会缓解此漏洞。<iframe sandbox='' src='http://untrusted-source' />
大多数这些预防措施一直是 Apache Cordova 的温和建议,但并未反映在通常保持开放的默认值中。Apache Cordova 提交者正在调查在框架级别防止此漏洞,并收紧默认值以防止意外暴露。同时,如果你怀疑你的应用程序存在漏洞,请遵循上述预防措施。
感谢 Alesandro Ortiz 发现此漏洞并引起我们的注意。
其他参考资料
- https://alesandroortiz.com/articles/uxss-android-webview-cve-2020-6506/
- https://nvd.nist.gov/vuln/detail/CVE-2020-6506
编辑:修复了未链接的链接 -JM