Index
已启用 Webview 远程调试
描述
Webview使用setWebContentsDebuggingEnabled API公开远程调试。该 API 是在 API 19 中引入的。
Webview 调试使用 Chrome Debug Protocol,并通过一个命名的抽象 unix 套接字公开。套接字名称为 webview_devtools_remote 或 webview_devtools_remote_<pid>。
要确认套接字是否在您的设备上公开,您可以使用 netstat -untapexW 命令,并搜索目标应用程序或 @ 符号(用于表示抽象套接字)。
抽象套接字不使用文件系统权限来强制执行访问,因此可供设备上的所有应用程序访问。
为了演示对套接字的访问,您可以使用 socat 二进制文件来暴露抽象套接字:
./socat TCP-LISTEN:9999,fork ABSTRACT:webview_devtools_remote_3483
可以本地访问9999端口,或者出于测试目的使用adb进行转发:
adb forward tcp:9999 tcp:9999
要访问远程协议,请使用 Chrome Debug Protocol 客户端,如 pychrome:
import pychrome
# 连接到暴露端口上的 webview。
browser = pychrome.Browser(url="http://127.0.0.1:9999")
t = browser.list_tab()[0]
t.start()
t.DOM.enable()
# 访问文档。
t.DOM.getDocument()
建议
将 setWebContentsDebuggingEnabled 设置为 false,或者仅在应用程序处于调试模式时将其设置为 true。
示例:
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)) {
WebView.setWebContentsDebuggingEnabled(true);
}
链接
标准
- OWASP_MASVS_L1:
- MSTG_CODE_2
- MSTG_CODE_4
- OWASP_MASVS_L2:
- MSTG_CODE_2
- MSTG_CODE_4
- PCI_STANDARDS:
- REQ_1_2
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_11_3
- OWASP_MASVS_v2_1:
- MASVS_PLATFORM_2
- MASVS_RESILIENCE_3
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255