K0D3IN/arc-browser-xss

GitHub: K0D3IN/arc-browser-xss

针对 Arc Browser for Android 的 intent:// browser_fallback_url XSS 漏洞 PoC,利用 WebView 未校验 fallback URL scheme 的缺陷实现零点击或一次点击触发 JavaScript 执行。

Stars: 0 | Forks: 0

# Arc for Android — `intent://` `browser_fallback_url` XSS **太长不看** 点击一个链接,点击 Deny,就被黑了。或者甚至都不用点击——对话框会在页面加载时自动弹出。 Arc for Android v1.12.7。CVSS 8.8 高危。The Browser Company。 ## 漏洞是什么 Arc 会打开 `intent://` 链接。如果你在“在应用中打开”对话框中点击 Deny,它会从 intent 中提取 `browser_fallback_url` 并将其塞入 `webView.loadUrl()`,而不检查它是什么 scheme。因此,你可以把 `javascript:` 放在那里,它就会执行。 这归咎于三个文件: ``` // n2.java — lets intent:// through because it's not http/https if (scheme != null && !scheme.equals("https") && !scheme.equals("http") && C0560s.f1571a.b(scheme)) { x0Var.invoke(str, string2); // → S1.java } // S1.java — no validation whatsoever Intent uri = Intent.parseUri(p12, 2); String stringExtra = uri.getStringExtra("browser_fallback_url"); if (stringExtra != null) { p02.f(stringExtra); // webView.loadUrl("javascript:...") } // C0560s.java — any valid URI scheme passes public static final x8.e f1571a = new x8.e("^[a-zA-Z][a-zA-Z0-9+.-]*"); ``` `S.` 前缀很重要——`S.browser_fallback_url=...` 告诉 Android 这是一个 String extra。没有它,`Intent.parseUri` 会抛出错误,什么也不会发生。 ## 如何运行它 然后在 Arc for Android 中打开以下任意一个: ### 点击变体(1 次点击 + Deny) ``` click me then hit Deny ``` ### 零点击变体(无需点击链接——只需 Deny) ``` ``` 对话框会自动弹出。点击 Deny。JS 执行。 ## 证据 | 文件 | 内容 | |---|---| | `evidence/01_open_in_app_dialog.png` | 本不该有危险的对话框 | | `evidence/02_visual_proof_lime.png` | 作为纯文本的 `lime` = JS 确实执行了 | | `evidence/03_http_callback_xss_ok.png` | 服务器直接在 Arc 的 WebView 中返回 XSS_OK | | `evidence/04_server_log.txt` | 显示 Arc 的 Chrome UA 访问回调的服务器日志 | | `evidence/05_poc8.html` | PoC 本身 | | `evidence/06_poc9_zeroclick_dialog.png` | 同样的对话框,无需点击链接 | | `evidence/07_poc9_zeroclick_xssok.png` | 没错,依然执行 | | `evidence/08_arc_xss_proof.mp4` | 手机和服务器日志并排实时录制 | | `evidence/09_poc9_zeroclick.html` | 零点击 PoC | ## 为什么会发布在这里 我尝试将此提交给 HackerOne。显然我的账户有 30 天的限制之类,等限制解除时,这东西可能已经被修补了。所以这里是完整的漏洞分析——比我更聪明的人可以找出修复方法或者接手继续研究。 ## 攻击者可以做什么 - 窃取 cookies (`document.cookie`) - 转储页面 DOM - 使用覆盖层进行网络钓鱼获取凭据 - 重定向到恶意网站 - `javascript:` 在 WebView 中能做的任何事情 ## 修复方案(如果 The Browser Company 的人看到了这个) ``` if (stringExtra != null && (stringExtra.startsWith("https://") || stringExtra.startsWith("http://"))) { p02.f(stringExtra); } ``` 另外,也许不要让所有随机的 URI scheme 都绕过 `shouldOverrideUrlLoading`,但这由你们决定。 ## 相关参考 - [Android Intent.parseUri 文档](https://developer.android.com/reference/android/content/Intent#parseUri(java.lang.String,%20int)) - CVE-2014-8910 — Chrome 曾有同样的问题 - `u6/S1.java`, `u6/n2.java`, `D6/C0560s.java` *由 Yusuf Akhan (k0d3inon) 发现。这不算负责任的披露,因为我真的无法提交它。不客气。*
标签:JS文件枚举, 后端开发, 数据可视化