FUNFACTOR1/DOM-Based-XSS-in-Pocket-Mobile-Android-iOS-Unsanitized-WebView-HTML-Injection-since-13-Year
GitHub: FUNFACTOR1/DOM-Based-XSS-in-Pocket-Mobile-Android-iOS-Unsanitized-WebView-HTML-Injection-since-13-Year
该项目是一份针对 Mozilla Pocket Android 的 0-click DOM 型 XSS 漏洞报告,揭示了 WebView 中未净化 HTML 注入及 Java Bridge 滥用问题。
Stars: 2 | Forks: 0
# XSS 0-Click / 0-Day 漏洞报告
## 导致 Pocket Android 中 JavaScript Bridge 滥用的跨站脚本攻击 (0-Click)
### 自主编写的 CVE 记录:CAN-2026-2030598 (MITRE 提交)
**作者:** Ing. Zampier Zago
**分类:** 安全漏洞分析 — CVE 提交
## 1. 执行摘要
已在 Pocket Android 8.33.0.0 版本(包名 `com.ideashower.readitlater.pro`,Mozilla / Read It Later, Inc. 于 2025 年 7 月终止服务前发布的最终版本)中确认存在基于 DOM 的跨站脚本 (XSS) 漏洞。该漏洞允许攻击者在应用的 WebView 中注入并执行任意 JavaScript,除了单次“保存到 Pocket”操作外无需任何用户交互——这是一个交付后的 **0-click 漏洞利用**。
根本原因是未经过滤的外部 HTML 内容通过 jQuery 的 `.html()` 方法 (`$(document.body).html(content)`) 被直接注入到 DOM 中,位于 asset 打包文件 `assets/html/j/articleview-mobile.js`(第 95–99 行)。内容由 `com.pocket.sdk.offline.DownloadingService` 自动在后台获取并渲染,无需任何用户交互。
该应用还暴露了一个原生的 Java 到 JavaScript bridge (`PocketAndroidArticleInterface`),通过 `addJavascriptInterface` 注册并在 `classes2.dex` 中得到确认,可由在 WebView 中执行的 JavaScript 调用。
**厂商披露记录:** 该 XSS 漏洞已于 **2024-07-10** 正式报告给 Mozilla Security,并附带 CWE-79 分类和完整的技术细节。Mozilla 于 **2024-07-11** 确认收到,但明确拒绝修复,声明 Pocket 不在范围内。Mozilla 随后在 2025 年发布了 v8.33.0.0 版本,其中的漏洞代码完全没有改变。对 v8.33.0.0 的取证分析证实了 `articleview-mobile.js` 第 95–99 行存在相同的易受攻击调用。
**沿革:** 完全相同的一行代码 —— `$(document.body).html(content)`,存在于同名的 `articleview-mobile.js` 文件中 —— 也存在于 iOS 对应的打包文件 `ReadItLaterPro.app`(Pocket iOS v4.5.2)中,时间可追溯至 2012 年 4 月 17 日 Read It Later 更名为 Pocket 之前的时期。因此,该缺陷在两大主流移动平台上连续发布了约 13 年且未被修改(参见 §7)。
目前没有可用的补丁。该产品已被放弃。所有已安装的实例将永久处于易受攻击状态。
| 字段 | 值 |
|---|---|
| 漏洞类型 | 基于 DOM 的 XSS (0-click) + JavaScript Bridge 滥用 |
| CWE | CWE-79, CWE-116 |
| 漏洞利用状态 | 0-click, 0-day — 无可用补丁;产品已停止支持 |
| 厂商响应 | 2024-07-11 — “Pocket 不在范围内” (Frida, Mozilla Security Team) |
| 受影响产品 | Pocket Android v8.33.0.0 (最终发布版本) |
| 包 ID | `com.ideashower.readitlater.pro` |
| 厂商 | Mozilla Corporation / Read It Later, Inc. |
| CVSS v4.0 评分 | 9.2 — `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| 严重程度 | 危急 |
| 首次向厂商报告时间 | 2021-04-19 (付费墙绕过) |
| 正式向 Mozilla Security 报告 XSS 时间 | 2024-07-10 |
| 包含该漏洞的最终发布 APK | 2025 — v8.33.0.0 |
| 服务停止 | 2025-07-08 |
| 代码沿革 | 跨越 Android + iOS 约 13 年 (2012 → 2025) |
## 2. 受影响产品
- **产品名称:** Pocket — Save. Read. Grow. (Android)
- **包名:** `com.ideashower.readitlater.pro`
- **构建版本:** 8.33.0.0 (服务停止前的最终发布版本)
- **分析的 APK:** `com.ideashower.readitlater.pro_8.33.0.0.apk`
- **厂商:** Read It Later, Inc. / Mozilla Corporation
- **Google Play URL:** https://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro
- **服务状态:** 已停止 (2025-07-08)。该应用仍安装在数百万台设备上,没有部署强制卸载、熔断机制或安全更新。视频证据 (2026-01-02) 证实,在官方关闭数月后,该应用仍可全面运行——包括付费墙绕过和后台服务。
## 3. 漏洞详情 — 问题 #1:通过 WebView 实现 0-Click XSS
### 3.1 漏洞分类
| 字段 | 值 |
|---|---|
| 类型 | 基于 DOM 的跨站脚本攻击 |
| CWE | CWE-79 — Web 页面生成时对输入的不当中和处理 |
| 次要 CWE | CWE-116 — 输出不正确的编码或转义 |
| 攻击向量 | 远程,0-click (交付后零用户交互) |
| 所需权限 | 无 |
| 范围 | 已改变 — WebView 上下文越过了信任边界进入原生 Android bridge |
### 3.2 易受攻击的组件
**文件:** `assets/html/j/articleview-mobile.js`
**第 95–99 行:**
```
// article content was retrieved
loadCallback : function(content)
{
// TODO : 3.0 : If file was missing, handle that correctly
$(document.body).html(content);
```
**根本原因:** 外部获取的 HTML 在未经任何清理的情况下直接传递给 jQuery 3.4.1 的 `.html()` 方法。jQuery 3.4.1 会执行嵌入的 `