CVE-2026-82090 · CVSS 9.2 严重 · Mozilla Pocket 中的 0-click 存储型 XSS — 所有版本(v0 → v8.33.0.0)· 18 年永久漏洞 · 无补丁 · MITRE 已发布
作者: Ing. Zampier Zago (FUNFACTOR1) 部门: 第 1 分部 — 网络安全部,PS 1978 Limited 联系方式: [email protected] 网站: www.ps1978ltd.it 分类: 安全漏洞分析 — CVE-2026-82090
两用内容免责声明: 本仓库包含针对一款已停止支持(EOL)产品的漏洞分析和概念验证(PoC)。所提供的信息和代码严格用于教育目的、防御性分析以及官方 CVE 文档。作者对任何滥用此信息的行为不承担任何责任。
https://github.com/user-attachments/assets/e2b0aa46-df64-452b-afbf-fa31dd8c650d
在 Pocket Android 8.33.0.0 版本(包名 com.ideashower.readitlater.pro)中已确认存在一个基于 DOM 的跨站脚本(XSS)漏洞,该版本是 Mozilla / Read It Later, Inc. 在 2025 年 7 月服务终止前发布的最终版本。该漏洞允许攻击者在应用程序的 WebView 中注入并执行任意 JavaScript,除了单次“保存到 Pocket”操作外,无需任何用户交互——在投递后即为 0-click 漏洞利用。
根本原因是通过 jQuery 的 .html() 方法($(document.body).html(content))将外部来源的 HTML 内容未经净化地直接注入 DOM,位于资源捆绑文件 assets/html/j/articleview-mobile.js(第 95–99 行)。内容由 com.pocket.sdk.offline.DownloadingService 在后台自动获取并渲染,无需任何用户交互。
该应用程序还暴露了一个原生 Java 到 JavaScript 的桥接(PocketAndroidArticleInterface),通过 addJavascriptInterface 注册,并在 classes2.dex 中得到确认,可由 WebView 内执行的 JavaScript 调用。
供应商披露记录: 该 XSS 于 2024-07-10 正式报告给 Mozilla 安全团队,分类为 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 之前的时期。该 CVE 涵盖从 v0 到 v8.33.0.0 的所有版本——该缺陷在产品整个 18 年生命周期中一直被持续发布,从未修改(见 §7)。通过可获取的最旧捆绑包(iOS v4.5.2)进行的代码级取证确认,将这一相同缺陷点追溯至至少 2012 年。
没有可用的补丁。该产品已被废弃。所有已安装实例将永久处于易受攻击状态。
com.ideashower.readitlater.procom.ideashower.readitlater.pro_8.33.0.0.apkhttps://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro 访问,但该应用已不再可供下载。文件: assets/html/j/articleview-mobile.js
第 95–99 行:```javascript
// 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 会执行嵌入的 `<script>` 标签和内联事件处理器(`onerror`、`onload`)。在这个 1,836 行的文件中,没有任何地方调用 `DOMPurify`、`sanitize()`、`escapeHtml()` 或等效函数。`content` 变量源自 Java 层,没有经过 JS 端的过滤。
紧接在易受攻击的调用之前的 `// TODO : 3.0 : If file was missing, handle that correctly` 注释表明,该代码从未经过生产环境加固。从该应用的每个版本一直到最终发布版 v8.33.0.0,这条注释都一直存在。
### 3.3 JavaScript 桥接证据
**文件:** `assets/html/j/articleview-mobile.js`,第 11–14 行:```javascript
// Android comm object
if (typeof PocketAndroidArticleInterface == 'undefined')
PocketAndroidArticleInterface = false;
isAndroid = !!PocketAndroidArticleInterface;
通过 DEX 字符串分析(classes2.dex)确认:```
PocketAndroidArticleInterface
setJavaScriptEnabled
addJavascriptInterface
JS 调用点确认的桥接方法:`onReady()`、`onError()`、`onScrollChanged()`、`setFrozen()`、`placePageBlockers()`、`toggleFullscreen()`、`setViewType()`、`scrollToPosition()`、`onTextSearch()`、`onRequestedHighlightPatch()`、`updatePageSwipingDisabledAreas()`、`getHorizontalMargin()`、`getMaxMediaHeight()`、`isConnected()`。
### 3.4 后台同步服务
**AndroidManifest.xml** 确认:```xml
<service
android:name="com.pocket.sdk.offline.DownloadingService"
android:permission="android.permission.FOREGROUND_SERVICE_DATA_SYNC">
注册了 BOOT_COMPLETED 接收器。该服务在设备启动和网络可用时自动获取并渲染文章内容,在隐藏的 WebView 中触发 loadCallback,无需任何用户交互。
Phase 1 — Content Injection [CONFIRMED] Attacker hosts page with XSS payload. Victim saves URL via "Save to Pocket". Malicious HTML stored in local Pocket database.
Phase 2 — Zero-Click Background Sync [CONFIRMED] DownloadingService auto-starts on boot (BOOT_COMPLETED). Fetches article content silently, no user interaction.
Phase 3 — Automatic WebView Rendering [CONFIRMED] Pagination engine (updatePaging) triggers hidden WebView render. No user opens the article.
Phase 4 — JavaScript Execution [CONFIRMED] loadCallback calls $(document.body).html(content). jQuery 3.4.1 executes embedded scripts and event handlers.
Phase 5 — Native Bridge Reachability [PARTIAL] Bridge object PocketAndroidArticleInterface is reachable from the XSS execution context (confirmed via classes2.dex string analysis and JS call-site inventory). Full native method surface and downstream impact pending complete JADX decompilation.
---
## 4. 概念验证```html
<!DOCTYPE html>
<html>
<body>
</body>
</html>
复现步骤:
DownloadingService 自动获取内容。loadCallback → $(document.body).html(content) → 载荷触发。关于 PoC 平台范围的说明: 上述可执行的概念验证针对 Android 版本,即 0-click 场景(后台
DownloadingService)。iOS 对应版本(Pocket iOS v4.5.2 /ReadItLaterPro.app)在同名文件中共享完全相同的易受攻击的loadCallback()汇聚点,但通过不同的桥接机制(由UIWebView委托拦截的x-ril-cmd:URL scheme)到达原生代码,并降级为 1-click 场景(用户必须打开已保存的文章)。iOS 证据通过对已发布应用包的静态分析确立,并完整记录在本仓库的iOS_forensic_analysis_v4.5.2.md中。未发布单独的可执行 iOS PoC;共享代码库分析证明了该汇聚点在两个平台上的等价性。
完整向量: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
基础评分:9.2 — 严重
所有日期均根据原始电子邮件证据(POCKET_MAIL.pdf、POCKET_MAIL1.pdf、CRONO2.pdf)核实。
CVE 记录确认从 v0 到 v8.33.0.0 的所有版本均受影响。该缺陷并非回归——它是文章渲染管道的原始架构,自 2007 年 Read It Later 作为 Firefox 扩展发布以来就存在,被带入移动应用(Android 自 2011 年起,iOS 更早),并在 2025 年最终 Android 版本中未经修改地发布。对相同易受攻击汇聚点的代码级取证确认可追溯至 2012 年,通过可获得的最旧应用包(iOS v4.5.2)。
ReadItLaterPro.app)iOS 应用程序包名为 ReadItLaterPro.app——这是 Read It Later, Inc. 在公司于 2012 年 4 月 17 日公开将应用更名为 Pocket 之前使用的品牌前产品名称。该应用包面向 iOS 5.0+,将代码库定位于 2011 年至 2012 年初的时间范围内。
对该 iOS 应用包的取证分析确认,在与 Android 版本同名的文件中存在逐字符完全相同的易受攻击模式。完整的 iOS 取证分析——易受攻击的汇聚点、内容管道、原生桥接、遥测清单和证据引用——已作为 iOS_forensic_analysis_v4.5.2.md 发布在本仓库中。
文件: manifest/cache/j/articleview-mobile.js (iOS) — 与 assets/html/j/articleview-mobile.js (Android) 文件名相同
第 97–107 行 (iOS):```javascript // article content was retrieved loadCallback : function(content) { // TODO : 3.0 : If file was missing, handle that correctly
$(document.body).html(content); // ← IDENTICAL TO ANDROID
// Add empty content to bottom in case an image is at bottom.
$(document.body).append($('<br> '))
this.onArticleReady();
},
两个平台中都存在相同的 `// TODO : 3.0` 注释——完全相同的占位符,在大约 13 年间从未被跟进处理。
### 7.2 确认共享代码库
iOS 包中包含明确的平台分支逻辑,证明 Read It Later, Inc. / Mozilla 向两个平台发布了**单一共享的 JavaScript 代码库**:```javascript
var isAndroid;
if (typeof ReadItLaterJSMethods == 'undefined')
ReadItLaterJSMethods = false;
isAndroid = !!ReadItLaterJSMethods;
当 isAndroid === false 时执行 iOS 桥接路径;当为 true 时执行 Android 路径。两条路径最终都汇聚到同一个存在漏洞的 loadCallback(),且两个平台均未进行任何净化处理。
关于 UIWebView 时间线的说明: Apple 在 iOS 8(2014)中引入了 WKWebView 作为继任者。UIWebView 在 iOS 12(2018)中被正式弃用。App Store 于 2020 年 4 月停止接受使用 UIWebView 的新应用,并于 2020 年 12 月停止接受现有应用的更新。UIWebView 从未被正式从 SDK 中移除——它仍然存在,但不再被接受用于 App Store 提交。此处相关的安全弱点在于:它在进程内运行(没有独立的 WebContent 进程),不支持 Content Security Policy,并通过 stringByEvaluatingJavaScriptFromString: 在主线程上同步执行注入的 JavaScript。
Read It Later, Inc.——以及随后被收购后的 Mozilla——在该产品整个 18 年生命周期(2007 → 2025)中,在多个同名文件中发布了相同的未净化 .html() 注入模式,并带有相同的未处理 TODO 注释,MITRE 已确认其影响从 v0 到 v8.33.0.0 的所有版本。
这包括 2024-07-10 正式 CWE-79 报告之后的时期。2024–2025 年间至少还产生了一个进一步的 Android 发布线(最终为 v8.33.0.0),其中存在漏洞的代码被逐字保留。
Pocket 的文章阅读器通过 $(document.body).html(content) 将原始的外部来源 HTML 注入 DOM,且未进行任何净化处理。第 95 行的 // TODO 注释证实该代码从未经过生产环境加固。这一架构选择从最早的移动版本(见 §7)一直延续到最终的 Android 版本 v8.33.0.0——在大约 13 年以及至少一次完整的所有权变更中保持不变,并且在 2024 年 7 月的正式安全报告之后仍然保持不变。
关于 2024 年之后的供应商响应时间线,以及正式 CWE-79 报告、Mozilla 的拒绝和最终未修补版本之间的确切顺序,请参阅 §6。
不存在或即将推出任何供应商缓解措施。
对于最终用户: 立即卸载 com.ideashower.readitlater.pro。撤销 Google OAuth 授权。
对于安全社区: 此案例符合“Forever-Day”漏洞的定义——已确认、未修补、处于已废弃软件中且无可用修复路径。根据 MITRE EOL 政策,适合归类为 Unsupported When Assigned 标签。
分析的 APK: com.ideashower.readitlater.pro_8.33.0.0.apk
工具: Android Studio、DEX2JAR、手动代码审查、二进制 AXML 解析(UTF-16LE)、Protocol Buffer schema 检查、DEX 字符串提取。iOS bundle 通过字符串提取和嵌入式 JavaScript 管道的源代码审查进行检查。
证据链:```
APK acquired └── com.ideashower.readitlater.pro_8.33.0.0.apk
Decompiled ├── assets/html/j/articleview-mobile.js (XSS — lines 95–99) ├── assets/html/article-mobile.html (jQuery 3.4.1) ├── AndroidManifest.xml (DownloadingService, SDK receivers) └── classes.dex / classes2.dex / classes3.dex
iOS counterpart bundle acquired and analyzed └── ReadItLaterPro.app (Pocket iOS v4.5.2) └── manifest/cache/j/articleview-mobile.js (XSS — lines 97–107) └── full analysis: iOS_forensic_analysis_v4.5.2.md
Vendor communication record └── Original emails verified: POCKET_MAIL.pdf, POCKET_MAIL1.pdf, CRONO2.pdf First report: 2021-04-19 XSS formally reported: 2024-07-10 Vendor final refusal: 2024-07-11
Dynamic evidence └── Video recording 2026-01-02: app fully operational post-sunset on real device
---
## 11. CVE 记录
**CVE ID:** CVE-2026-82090 — 由 MITRE Corporation(CNA)于 2026-08-28 发布。最初通过 cveform.mitre.org 提交为 CAN-2026-2030598。
**厂商:** Mozilla Corporation
**产品:** Pocket(Android)
**版本:** 8.33.0.0
**漏洞类型:** 跨站脚本(XSS)
**描述(用于 cveform.mitre.org):**```
** UNSUPPORTED WHEN ASSIGNED ** A DOM-Based Cross-Site Scripting
(XSS) vulnerability (CWE-79) in the articleview-mobile.js
component of Mozilla Pocket for Android through version 8.33.0.0
allows remote attackers to execute arbitrary JavaScript within
the application's WebView. By leveraging the background
DownloadingService, a crafted HTML payload is processed
automatically without user interaction (zero-click), allowing
interaction with the native PocketAndroidArticleInterface Java
bridge.
NOTE: This product is End-of-Life and no longer supported by
the vendor.
附加信息 / 供应商沟通:``` First disclosure: 2021-04-19 (paywall bypass). Formal security report identifying XSS (CWE-79): 2024-07-10 to Mozilla Security. Vendor response (2024-07-11): Product declared out of scope. Final APK v8.33.0.0 released in 2025 with vulnerable code unchanged. Service sunset 2025-07-08. Product is abandoned. The same vulnerable line is present in the iOS counterpart bundle (ReadItLaterPro.app, v4.5.2, circa 2012), evidencing ~13 years of unmodified shipment across both mobile platforms.
---
## 12. 参考文献
- CVE-2026-82090(官方记录):https://www.cve.org/CVERecord?id=CVE-2026-82090
- CWE-79:https://cwe.mitre.org/data/definitions/79.html
- CWE-116:https://cwe.mitre.org/data/definitions/116.html
- CVSS v4.0 规范:https://www.first.org/cvss/v4.0/specification-document
- MITRE CVE EOL 流程:https://www.cve.org/Resources/General/End-of-Life-EOL-Assignment-Process.pdf
- MITRE CNA 操作规则:https://www.cve.org/resourcessupport/allresources/cnarules
- jQuery `.html()` 行为:https://api.jquery.com/html/
- Android `addJavascriptInterface`:https://developer.android.com/reference/android/webkit/WebView#addJavascriptInterface(java.lang.Object,%20java.lang.String)
- Apple — `UIWebView` 弃用:https://developer.apple.com/documentation/uikit/uiwebview
- Apple — 更新使用 Web 视图的 App(App Store UIWebView 截止日期):https://developer.apple.com/news/?id=12232019b
- Read It Later → Pocket 品牌更名(2012 年 4 月 17 日):https://blog.getpocket.com/2012/04/introducing-the-all-new-read-it-later-now-called-pocket/
---
*Ing. Zampier Zago (FUNFACTOR1) — 第 1 部分 — PS 1978 Limited 网络安全部 — [email protected] — [www.ps1978ltd.it](http://www.ps1978ltd.it) — https://github.com/FUNFACTOR1*
| 字段 | 值 |
|---|
| CVE | CVE-2026-82090 — 发布于 2026-08-28 — CNA:MITRE Corporation |
| 漏洞类型 | 基于 DOM 的 XSS(0-click)+ JavaScript 桥接滥用 |
| CWE | CWE-79, CWE-116 |
| 漏洞利用状态 | 0-click,0-day — 无可用补丁;产品已停止支持 |
| 供应商响应 | 2024-07-11 — “Pocket 不在范围内”(Frida,Mozilla 安全团队) |
| 受影响产品 | 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(付费墙绕过) |
| XSS 正式报告给 Mozilla 安全团队 | 2024-07-10 |
| 最终 APK 发布时漏洞仍存在 | 2025 — v8.33.0.0 |
| 服务终止 | 2025-07-08 |
| 代码血统 | 18 年 — 所有版本(v0 → v8.33.0.0,2007 → 2025)。取证代码确认来自 2012 年 iOS 捆绑包。 |
| 字段 | 值 |
|---|
| 类型 | 基于 DOM 的跨站脚本 |
| CWE | CWE-79 — 网页生成期间输入的不当中和 |
| 次要 CWE | CWE-116 — 输出的不当编码或转义 |
| 攻击向量 | 远程,0-click(投递后零用户交互) |
| 所需权限 | 无 |
| 范围 | 已改变 — WebView 上下文跨越信任边界进入原生 Android 桥接 |
| 指标 | 值 | 理由 |
|---|
| 攻击向量 (AV) | 网络 (N) | 载荷通过互联网投递并执行 |
| 攻击复杂度 (AC) | 低 (L) | 无需绕过竞态条件或内存保护 |
| 攻击要求 (AT) | 存在 (P) | 用户必须在攻击前至少保存过一篇文章以触发后台同步 |
| 所需权限 (PR) | 无 (N) | 目标无需身份验证 |
| 用户交互 (UI) | 无 (N) | 保存后通过后台服务自动执行 |
| 漏洞机密性 (VC) | 高 (H) | 会话令牌、文章数据库、阅读习惯暴露 |
| 漏洞完整性 (VI) | 高 (H) | JS 可通过原生桥接方法更改应用状态 |
| 漏洞可用性 (VA) | 高 (H) | 后台服务可用性可被破坏 |
| 后续影响 (SC / SI / SA) | 无 (N) | 已证明的影响局限于 Android 应用沙箱 / WebView 信任边界内。未证明可转向独立的后续系统;SC/SI/SA 保守设为 None 以避免过度声明 |
| 修复级别 (RL) | 不可用 (U) | 产品已废弃;无补丁发布 |
| 日期 | 事件 | 来源 / 相关方 |
|---|
| 2021-04-19 | 向 Pocket 支持团队提交初始报告:付费墙绕过,允许规避意大利新闻网站上的出版商访问控制。提供了视频、截图和示例 URL。 | Zampier Zago → [email protected] |
| 2021-04-22 | Pocket 支持团队回复:要求提供具体 URL 和截图。 | Pocket 支持团队 (Manuel) → Zampier Zago |
| 2021-05-17 | 研究人员提供了两个实时 PoC URL,演示了完整内容绕过。 | Zampier Zago → [email protected] |
| 2021–2024 | 供应商未采取进一步行动。供应商初始立场:“并非由 Pocket 导致。”鉴于这一明确拒绝,研究人员在三年的时间里对自己的发现持怀疑态度。 | — |
| ~2024 年 6 月 | 研究人员进行 APK 分析,识别出 WebView 中的 XSS(articleview-mobile.js)、JavaScript 桥接滥用向量、CWE-79 / CWE-200 / CWE-693。 | Zampier Zago |
| 2024-05-31 | 案件正式重新开启。第三方公开确认了相同的付费墙绕过(bardeen.ai)。研究人员引用了 2021 年的原始报告。 | Zampier Zago → [email protected] |
| 2024-06-06 | Pocket 支持团队 (Alejandra Galo):内部升级,未承诺修复。“我们的解析器并非设计用于绕过所述付费墙。” | Pocket 支持团队 → Zampier Zago |
| 2024-07-02 | 研究人员通过支持工单 #151540 向 Pocket/Mozilla 安全团队发送正式跟进,明确引用 2021 年首次报告并要求正式确认。 | Zampier Zago → [email protected] |
| 2024-07-04, 13:18 CST | Pocket 支持团队 (Dayana Galeano):重定向至 [email protected]。“由于您报告的是安全漏洞,我建议您改为联系 [email protected]。” | Pocket 支持团队 → Zampier Zago |
| 2024-07-10, 21:05 | 研究人员向 Mozilla 安全团队 ([email protected]) 提交完整技术安全报告,包括 CWE-79 (XSS)、CWE-200(信息暴露)、CWE-693(保护机制失效)、HTTP 请求/响应示例、XSS 载荷演示和影响分析。 | Zampier Zago → [email protected] |
| 2024-07-11, 09:32 | Mozilla 安全团队 (Frida) 回复:“Pocket 不在我们的 Web 漏洞赏金计划范围内,我们只接受严重级别的报告。” 要求单独提交至 HackerOne。未承诺修复。 | Mozilla 安全团队 → Zampier Zago |
| 2024-07-24, 19:00 | Mozilla 隐私团队 ([email protected]):重定向至漏洞赏金表单。无实质性参与。 | Mozilla 隐私团队 → Zampier Zago |
| 2025 | Mozilla 发布 v8.33.0.0 作为 Pocket Android 的最终版本,随后服务终止。articleview-mobile.js(第 95–99 行)中的易受攻击代码完全相同且未修改。未部署安全补丁。无终止开关或强制卸载。 | Mozilla(公开) |
| 2025-07-08 | Pocket 服务正式终止。应用程序仍安装在用户设备上并可运行。 | Mozilla(公开) |
| 2026-01-02 | 在真实设备上录制的视频证据:Pocket Android v8.33.0.0 在服务终止数月后仍完全可运行。付费墙绕过确认仍然有效。后台服务确认正在运行。(可下载压缩版本;包含完整可验证元数据的原始版本可应要求提供。) | Zampier Zago(视频录制) |
| 方面 | Android v8.33.0.0 (2025) | iOS v4.5.2 (~2012) |
|---|
| 存在漏洞的文件 | assets/html/j/articleview-mobile.js | manifest/cache/j/articleview-mobile.js |
| 存在漏洞的汇聚点 | $(document.body).html(content) L95–99 | $(document.body).html(content) L97–107 |
| 净化处理 | 无 | 无 |
| 原生桥接机制 | addJavascriptInterface → PocketAndroidArticleInterface (Java) | x-ril-cmd: URL scheme 被 UIWebView delegate (Objective-C) 拦截 |
| 桥接是否触达原生代码 | 是 | 是 |
| 后台自动渲染 | 是 — DownloadingService 在 BOOT_COMPLETED 时触发 | 否 — 文章必须由用户打开 |
| 是否需要用户交互 | 无(0-click) | 打开文章(1-click) |
| 文章传输 | HTTPS | 在 bundle 分析时为 HTTP 明文(http://text.getpocket.com/v3beta/mobile)— 原始部署中的额外 MITM 向量(服务终止后端点已离线) |
| WebView 技术 | 现代 Android WebView | UIWebView(iOS 12 中已弃用;自 2020 年起 App Store 不再接受) |