
CVE-2026-82090 · CVSS 9.2 CRITICAL · 0-click stored XSS in Mozilla Pocket — all versions (v0 → v8.33.0.0) · 18-year forever-day · no patch · MITRE published
Author: Ing. Zampier Zago (FUNFACTOR1) Division: Section 1 — Department of Cyber Security, PS 1978 Limited Contact: [email protected] Web: www.ps1978ltd.it Classification: Security Vulnerability Analysis — CVE-2026-82090
Dual-Use Content Disclaimer: This repository contains a vulnerability analysis and a Proof of Concept (PoC) for an End-of-Life (EOL) product. The information and code provided are strictly for educational purposes, defensive analysis, and official CVE documentation. The author holds no responsibility for any misuse of this information.
https://github.com/user-attachments/assets/e2b0aa46-df64-452b-afbf-fa31dd8c650d
A DOM-based Cross-Site Scripting (XSS) vulnerability has been confirmed in Pocket Android version 8.33.0.0 (package com.ideashower.readitlater.pro), the final release shipped by Mozilla / Read It Later, Inc. before service termination in July 2025. The vulnerability allows an attacker to inject and execute arbitrary JavaScript in the application's WebView without any user interaction beyond a single "Save to Pocket" action — a 0-click exploit post-delivery.
The root cause is the unsanitized injection of externally-sourced HTML content directly into the DOM via jQuery's .html() method ($(document.body).html(content)), in the asset-bundled file assets/html/j/articleview-mobile.js (lines 95–99). Content is fetched and rendered automatically in the background by com.pocket.sdk.offline.DownloadingService with no user interaction required.
The application also exposes a native Java-to-JavaScript bridge (PocketAndroidArticleInterface), registered via addJavascriptInterface and confirmed in classes2.dex, callable by JavaScript executing within the WebView.
Vendor disclosure record: The XSS was formally reported to Mozilla Security on 2024-07-10 with CWE-79 classification and full technical detail. Mozilla acknowledged receipt on 2024-07-11 and explicitly declined to remediate, declaring Pocket out of scope. Mozilla subsequently released v8.33.0.0 in 2025 with the vulnerable code entirely unchanged. Forensic analysis of v8.33.0.0 confirms the identical vulnerable call at lines 95–99 of articleview-mobile.js.
Lineage: The same identical line — $(document.body).html(content), in a file of the same name articleview-mobile.js — is present in the iOS counterpart bundle ReadItLaterPro.app (Pocket iOS v4.5.2), dating to the era immediately preceding the April 17, 2012 rebrand of Read It Later as Pocket. The CVE covers all versions from v0 through v8.33.0.0 — the defect has been continuously shipped, unmodified, across the product's entire 18-year lifespan (see §7). Forensic code-level confirmation via the oldest available bundle (iOS v4.5.2) dates the identical sink to at least 2012.
No patch is available. The product is abandoned. All installed instances remain permanently vulnerable.
com.ideashower.readitlater.procom.ideashower.readitlater.pro_8.33.0.0.apkhttps://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro but the app is no longer available for download.File: assets/html/j/articleview-mobile.js
Lines 95–99:
// article content was retrieved
loadCallback : function(content)
{
// TODO : 3.0 : If file was missing, handle that correctly
$(document.body).html(content);
Root cause: Externally-sourced HTML is passed directly to jQuery 3.4.1's .html() method with no sanitization. jQuery 3.4.1 executes embedded <script> tags and inline event handlers (onerror, onload). No call to DOMPurify, sanitize(), escapeHtml(), or equivalent exists anywhere in the 1,836-line file. The content variable originates from the Java layer without JS-side filtering.
The // TODO : 3.0 : If file was missing, handle that correctly comment immediately preceding the vulnerable call demonstrates the code was never production-hardened. This comment was present in every version of the app through the final release v8.33.0.0.
File: assets/html/j/articleview-mobile.js, lines 11–14:
// Android comm object
if (typeof PocketAndroidArticleInterface == 'undefined')
PocketAndroidArticleInterface = false;
isAndroid = !!PocketAndroidArticleInterface;
Confirmed via DEX string analysis (classes2.dex):
PocketAndroidArticleInterface
setJavaScriptEnabled
addJavascriptInterface
Confirmed bridge methods from JS call sites: onReady(), onError(), onScrollChanged(), setFrozen(), placePageBlockers(), toggleFullscreen(), setViewType(), scrollToPosition(), onTextSearch(), onRequestedHighlightPatch(), updatePageSwipingDisabledAreas(), getHorizontalMargin(), getMaxMediaHeight(), isConnected().
AndroidManifest.xml confirms:
<service
android:name="com.pocket.sdk.offline.DownloadingService"
android:permission="android.permission.FOREGROUND_SERVICE_DATA_SYNC">
With BOOT_COMPLETED receiver registered. The service fetches and renders article content automatically on device boot and network availability, triggering loadCallback in a hidden WebView without any user interaction.
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.
<!DOCTYPE html>
<html>
<body>
</body>
</html>
Steps to reproduce:
DownloadingService fetches content automatically.loadCallback → $(document.body).html(content) → payload fires.Note on platform scope of the PoC: The executable proof of concept above targets the Android build, which is the 0-click case (background
DownloadingService). The iOS counterpart (Pocket iOS v4.5.2 /ReadItLaterPro.app) shares the identical vulnerableloadCallback()sink in a file of the same name, but reaches native code through a different bridge mechanism (thex-ril-cmd:URL-scheme intercepted by theUIWebViewdelegate) and degrades to a 1-click case (the user must open a saved article). The iOS evidence is established by static analysis of the shipped app bundle and is documented in full iniOS_forensic_analysis_v4.5.2.mdin this repository. No separate executable iOS PoC is published; the shared-codebase analysis demonstrates the equivalence of the sink across both platforms.
Full vector: 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
Base Score: 9.2 — CRITICAL
All dates verified against original email evidence (POCKET_MAIL.pdf, POCKET_MAIL1.pdf, CRONO2.pdf).
The CVE record confirms all versions from v0 through v8.33.0.0 as affected. The defect is not a regression — it is the original architecture of the article-rendering pipeline, present since Read It Later launched as a Firefox extension in 2007, carried into the mobile apps (Android from 2011, iOS earlier), and shipped unchanged through the final 2025 Android release. Forensic code-level confirmation of the identical vulnerable sink extends to 2012 via the oldest available bundle (iOS v4.5.2).
ReadItLaterPro.app)The iOS application bundle is named ReadItLaterPro.app — the pre-rebrand product name used by Read It Later, Inc. before the company publicly renamed the app to Pocket on 17 April 2012. The bundle targets iOS 5.0+, placing the codebase in the 2011–early 2012 timeframe.
Forensic analysis of this iOS bundle confirms a character-for-character identical vulnerable pattern in a file with the same name as the Android version. The complete iOS forensic analysis — vulnerable sink, content pipeline, native bridge, telemetry inventory, and evidence references — is published in this repository as iOS_forensic_analysis_v4.5.2.md.
File: manifest/cache/j/articleview-mobile.js (iOS) — same filename as assets/html/j/articleview-mobile.js (Android)
Lines 97–107 (iOS):
// 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();
},
The same // TODO : 3.0 comment is present in both platforms — the same exact placeholder, never followed up on, across ~13 years.
The iOS bundle contains explicit platform-branching logic that proves Read It Later, Inc. / Mozilla shipped a single shared JavaScript codebase to both platforms:
var isAndroid;
if (typeof ReadItLaterJSMethods == 'undefined')
ReadItLaterJSMethods = false;
isAndroid = !!ReadItLaterJSMethods;
When isAndroid === false the iOS bridge path executes; when true the Android path executes. Both paths converge on the same vulnerable loadCallback() with no sanitization on either platform.
Note on UIWebView timeline: Apple introduced WKWebView as the successor in iOS 8 (2014). UIWebView was formally deprecated in iOS 12 (2018). The App Store stopped accepting new apps using UIWebView in April 2020 and updates to existing apps in December 2020. UIWebView was never formally removed from the SDK — it remains present but is no longer accepted for App Store submissions. Its security weaknesses relevant here are that it runs in-process (no separate WebContent process), has no Content Security Policy support, and executes injected JavaScript synchronously on the main thread via stringByEvaluatingJavaScriptFromString:.
Read It Later, Inc. — and subsequently Mozilla after acquisition — shipped the same unsanitized .html() injection pattern, in a file of the same name, with the same unaddressed TODO comment, across the product's entire 18-year lifespan (2007 → 2025), confirmed by MITRE as affecting all versions from v0 through v8.33.0.0.
This includes the period after the formal CWE-79 report of 2024-07-10. At least one further Android release line was produced in 2024–2025 (culminating in v8.33.0.0) with the vulnerable code preserved verbatim.
Pocket's article reader injects raw externally-sourced HTML into the DOM via $(document.body).html(content) with no sanitization. The // TODO comment at line 95 confirms the code was never production-hardened. This architectural choice was present from the earliest mobile builds (see §7) through the final Android release v8.33.0.0 — unchanged across approximately 13 years and at least one full ownership transition, and unchanged after a formal security report in July 2024.
For the post-2024 vendor response timeline and the precise sequence between the formal CWE-79 report, Mozilla's refusal, and the final unpatched release, refer to §6.
No vendor mitigations exist or are forthcoming.
For end users: Uninstall com.ideashower.readitlater.pro immediately. Revoke Google OAuth grants.
For security community: This case qualifies as a "Forever-Day" vulnerability — confirmed, unpatched, in abandoned software with no remediation path available. Suitable for classification under the Unsupported When Assigned tag per MITRE EOL policy.
APK analyzed: com.ideashower.readitlater.pro_8.33.0.0.apk
Tools: Android Studio, DEX2JAR, manual code review, binary AXML parsing (UTF-16LE), Protocol Buffer schema inspection, DEX string extraction. iOS bundle inspected via string extraction and source review of the embedded JavaScript pipeline.
Evidence chain:
1. APK acquired
└── com.ideashower.readitlater.pro_8.33.0.0.apk
2. 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
3. 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
4. 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
5. Dynamic evidence
└── Video recording 2026-01-02: app fully operational post-sunset on real device
CVE ID: CVE-2026-82090 — Published 2026-08-28 by MITRE Corporation (CNA). Originally submitted as CAN-2026-2030598 via cveform.mitre.org.
Vendor: Mozilla Corporation Product: Pocket (Android) Version: 8.33.0.0 Vulnerability Type: Cross-Site Scripting (XSS)
Description (for 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.
Additional Information / Vendor Communication:
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.
.html() behavior: https://api.jquery.com/html/addJavascriptInterface: https://developer.android.com/reference/android/webkit/WebView#addJavascriptInterface(java.lang.Object,%20java.lang.String)UIWebView deprecation: https://developer.apple.com/documentation/uikit/uiwebviewIng. Zampier Zago (FUNFACTOR1) — Section 1 — Department of Cyber Security, PS 1978 Limited — [email protected] — www.ps1978ltd.it — https://github.com/FUNFACTOR1
| Field | Value |
|---|
| CVE | CVE-2026-82090 — Published 2026-08-28 — CNA: MITRE Corporation |
| Vulnerability type | DOM-Based XSS (0-click) + JavaScript Bridge Abuse |
| CWE | CWE-79, CWE-116 |
| Exploit status | 0-click, 0-day — no patch available; product End-of-Life |
| Vendor response | 2024-07-11 — "Pocket is out of scope" (Frida, Mozilla Security Team) |
| Affected product | Pocket Android v8.33.0.0 (final release) |
| Package ID | com.ideashower.readitlater.pro |
| Vendor | Mozilla Corporation / Read It Later, Inc. |
| CVSS v4.0 Score | 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 |
| Severity | CRITICAL |
| First reported to vendor | 2021-04-19 (paywall bypass) |
| XSS formally reported to Mozilla Security | 2024-07-10 |
| Final APK released with vulnerability intact | 2025 — v8.33.0.0 |
| Service sunset | 2025-07-08 |
| Code lineage | 18 years — all versions (v0 → v8.33.0.0, 2007 → 2025). Forensic code confirmation from 2012 iOS bundle. |
| Field | Value |
|---|
| Type | DOM-Based Cross-Site Scripting |
| CWE | CWE-79 — Improper Neutralization of Input During Web Page Generation |
| Secondary CWE | CWE-116 — Improper Encoding or Escaping of Output |
| Attack vector | Remote, 0-click (zero user interaction post-delivery) |
| Privileges required | None |
| Scope | Changed — WebView context crosses trust boundary into native Android bridge |
| Metric | Value | Justification |
|---|
| Attack Vector (AV) | Network (N) | Payload delivered and executed via internet |
| Attack Complexity (AC) | Low (L) | No race conditions or memory protections to bypass |
| Attack Requirements (AT) | Present (P) | User must have saved at least one article prior to the attack to trigger background sync |
| Privileges Required (PR) | None (N) | No authentication required on target |
| User Interaction (UI) | None (N) | Execution automatic via background service post-save |
| Vuln. Confidentiality (VC) | High (H) | Session tokens, article DB, reading habits exposed |
| Vuln. Integrity (VI) | High (H) | JS can alter app state via native bridge methods |
| Vuln. Availability (VA) | High (H) | Background service availability can be disrupted |
| Subsequent (SC / SI / SA) | None (N) | Demonstrated impact contained within the Android Application Sandbox / WebView trust boundary. No pivot to a separate subsequent system has been proven; SC/SI/SA conservatively set to None to avoid overclaim |
| Remediation Level (RL) | Unavailable (U) | Product abandoned; no patch forthcoming |
| Date | Event | Source / Parties |
|---|
| 2021-04-19 | Initial report to Pocket Support: paywall bypass allowing circumvention of publisher access controls on Italian news sites. Video, screenshots, and example URLs provided. | Zampier Zago → [email protected] |
| 2021-04-22 | Pocket Support response: requested specific URLs and screenshots. | Pocket Support (Manuel) → Zampier Zago |
| 2021-05-17 | Researcher provided two live PoC URLs demonstrating full content bypass. | Zampier Zago → [email protected] |
| 2021–2024 | No further vendor action. Vendor's initial position: "not due to Pocket." Researcher doubted own finding for three years given the definitive rejection. | — |
| ~June 2024 | Researcher conducts APK analysis, identifies XSS in WebView (articleview-mobile.js), JavaScript bridge abuse vector, CWE-79 / CWE-200 / CWE-693. | Zampier Zago |
| 2024-05-31 | Case formally reopened. Public third-party confirmation of identical paywall bypass (bardeen.ai). Researcher references original 2021 report. | Zampier Zago → [email protected] |
| 2024-06-06 | Pocket Support (Alejandra Galo): escalated internally, no fix committed. "Our Parser is not designed to bypass said Paywalls." | Pocket Support → Zampier Zago |
| 2024-07-02 | Researcher sends formal follow-up to Pocket/Mozilla Security Team via support ticket #151540, explicitly referencing the 2021 first report and requesting formal acknowledgment. | Zampier Zago → [email protected] |
| 2024-07-04, 13:18 CST | Pocket Support (Dayana Galeano): redirects to [email protected]. "Since you're reporting a security vulnerability, I'd encourage you to reach out to [email protected] instead." | Pocket Support → Zampier Zago |
| 2024-07-10, 21:05 | Researcher submits full technical security report to Mozilla Security ([email protected]) including CWE-79 (XSS), CWE-200 (information exposure), CWE-693 (protection mechanism failure), HTTP request/response examples, XSS payload demonstration, and impact analysis. | Zampier Zago → [email protected] |
| 2024-07-11, 09:32 | Mozilla Security (Frida) response: "Pocket is out of scope of our web bug bounty program and we only accept reports with critical severity." Requests individual HackerOne submissions. No fix committed. | Mozilla Security Team → Zampier Zago |
| 2024-07-24, 19:00 | Mozilla Privacy Team ([email protected]): redirects to bug bounty form. No substantive engagement. | Mozilla Privacy Team → Zampier Zago |
| 2025 | Mozilla releases v8.33.0.0 as the final version of Pocket Android before service sunset. The vulnerable code in articleview-mobile.js (lines 95–99) is identical and unmodified. No security patch deployed. No kill-switch or forced uninstall. | Mozilla (public) |
| 2025-07-08 | Pocket service officially terminated. Application remains installed and operational on user devices. | Mozilla (public) |
| 2026-01-02 | Video evidence recorded on real device: Pocket Android v8.33.0.0 fully operational months after service termination. Paywall bypass confirmed active. Background services confirmed running. (Compressed version downloadable; original with full verifiable metadata available on request.) | Zampier Zago (video recording) |
| Aspect | Android v8.33.0.0 (2025) | iOS v4.5.2 (~2012) |
|---|
| Vulnerable file | assets/html/j/articleview-mobile.js | manifest/cache/j/articleview-mobile.js |
| Vulnerable sink | $(document.body).html(content) L95–99 | $(document.body).html(content) L97–107 |
| Sanitization | None | None |
| Native bridge mechanism | addJavascriptInterface → PocketAndroidArticleInterface (Java) | x-ril-cmd: URL scheme intercepted by UIWebView delegate (Objective-C) |
| Bridge reaches native code | Yes | Yes |
| Background auto-render | Yes — DownloadingService on BOOT_COMPLETED | No — article must be opened by user |
| User interaction required | None (0-click) | Open article (1-click) |
| Article transport | HTTPS | HTTP plaintext (http://text.getpocket.com/v3beta/mobile) at time of bundle analysis — additional MITM vector in original deployment (endpoint offline since service termination) |
| WebView technology | Modern Android WebView | UIWebView (deprecated iOS 12; not accepted by App Store since 2020) |