安全公告 CVE-2020-6506
2020 年 9 月 29 日
正式公開的公告
此漏洞是 Android WebView 中的一個通用跨網站指令碼(UXSS)漏洞,允許跨來源的 iframe 在頂層文件中執行任意 JavaScript。針對 Android 裝置建置的 Apache Cordova 應用程式,若允許載入不受其控制的網域中的 http 內容,可能會受到影響。理論上,這會發生在 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.dev.org.tw/docs/en/latest/reference/cordova-plugin-whitelist/
- 請確保 CSP 不包含 script-src/default-src 的 'unsafe-line',除非必要。
- 一般而言,始終將本地程式碼載入到應用程式的主要 webview 中,並使用 InAppBrowser 來顯示任何遠端內容。
- 始終將不信任的內容載入到外部瀏覽器中 (即使用
_system
呼叫 InAppBrowser)。 - https://cordova.dev.org.tw/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