
CVE-2026-82090 · CVSS 9.2 КРИТИЧЕСКИЙ · 0-click хранимая XSS в Mozilla Pocket — все версии (v0 → v8.33.0.0) · 18-летний forever-day · без патча · опубликовано MITRE
Автор: Ing. Zampier Zago (FUNFACTOR1) Подразделение: Section 1 — Department of Cyber Security, PS 1978 Limited Контакт: [email protected] Веб-сайт: www.ps1978ltd.it Классификация: Анализ уязвимости безопасности — CVE-2026-82090
Отказ от ответственности о двойном назначении контента: Этот репозиторий содержит анализ уязвимости и Proof of Concept (PoC) для продукта, снятого с поддержки (End-of-Life, EOL). Предоставленная информация и код предназначены строго для образовательных целей, защитного анализа и официальной документации CVE. Автор не несёт ответственности за любое неправомерное использование этой информации.
https://github.com/user-attachments/assets/e2b0aa46-df64-452b-afbf-fa31dd8c650d
Уязвимость межсайтового скриптинга (XSS) на основе DOM подтверждена в Pocket для Android версии 8.33.0.0 (пакет com.ideashower.readitlater.pro) — финальном выпуске, опубликованном Mozilla / Read It Later, Inc. перед прекращением работы сервиса в июле 2025 года. Уязвимость позволяет злоумышленнику внедрить и выполнить произвольный JavaScript в WebView приложения без какого-либо взаимодействия с пользователем, кроме одного действия «Save to Pocket» — эксплуатация 0-click после доставки.
Корневая причина — несанитизированное внедрение HTML-контента из внешних источников непосредственно в DOM через метод jQuery .html() ($(document.body).html(content)) в файле, входящем в состав ресурсов, assets/html/j/articleview-mobile.js (строки 95–99). Контент загружается и отображается автоматически в фоновом режиме компонентом com.pocket.sdk.offline.DownloadingService без необходимости какого-либо взаимодействия с пользователем.
Приложение также предоставляет нативный мост Java-to-JavaScript (PocketAndroidArticleInterface), зарегистрированный через addJavascriptInterface и подтверждённый в classes2.dex, который может вызываться JavaScript, выполняющимся внутри WebView.
Запись о раскрытии вендору: об XSS официально сообщили в Mozilla Security 2024-07-10 с классификацией CWE-79 и полными техническими деталями. Mozilla подтвердила получение 2024-07-11 и явно отказалась от устранения, объявив Pocket вне области действия. Впоследствии Mozilla выпустила v8.33.0.0 в 2025 году с полностью неизменённым уязвимым кодом. Форензический анализ v8.33.0.0 подтверждает идентичный уязвимый вызов в строках 95–99 файла articleview-mobile.js.
Происхождение: та же самая строка — $(document.body).html(content), в файле с тем же именем articleview-mobile.js — присутствует в соответствующем пакете для iOS ReadItLaterPro.app (Pocket iOS v4.5.2), относящемся к периоду непосредственно перед переименованием Read It Later в Pocket 17 апреля 2012 года. CVE охватывает все версии от v0 до v8.33.0.0 — дефект непрерывно поставлялся без изменений на протяжении всего 18-летнего жизненного цикла продукта (см. §7). Форензическое подтверждение на уровне кода с помощью самого старого доступного пакета (iOS v4.5.2) датирует идентичный сток (sink) как минимум 2012 годом.
Патч недоступен. Продукт заброшен. Все установленные экземпляры остаются навсегда уязвимыми.
| Поле | Значение |
|---|---|
| CVE | CVE-2026-82090 — опубликовано 2026-08-28 — CNA: MITRE Corporation |
| Тип уязвимости | DOM-Based XSS (0-click) + злоупотребление JavaScript Bridge |
| CWE | CWE-79, CWE-116 |
| Статус эксплойта | 0-click, 0-day — патч отсутствует; продукт снят с поддержки (End-of-Life) |
| Ответ вендора | 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 |
| Критичность | CRITICAL |
| Впервые сообщено вендору | 2021-04-19 (обход paywall) |
| XSS официально сообщён в Mozilla Security | 2024-07-10 |
| Финальный APK выпущен с неустранённой уязвимостью | 2025 — v8.33.0.0 |
| Прекращение работы сервиса | 2025-07-08 |
| Преемственность кода | 18 лет — все версии (v0 → v8.33.0.0, 2007 → 2025). Подтверждение по коду из iOS-сборки 2012 года. |
com.ideashower.readitlater.procom.ideashower.readitlater.pro_8.33.0.0.apkhttps://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro, но приложение больше недоступно для загрузки.| Поле | Значение |
|---|---|
| Тип | DOM-Based Cross-Site Scripting |
| CWE | CWE-79 — Improper Neutralization of Input During Web Page Generation |
| Дополнительный CWE | CWE-116 — Improper Encoding or Escaping of Output |
| Вектор атаки | Удалённый, 0-click (нулевое взаимодействие с пользователем после доставки) |
| Требуемые привилегии | Нет |
| Область действия | Изменена — контекст WebView пересекает границу доверия и проникает в нативный Android bridge |
Файл: 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 из внешнего источника передаётся напрямую в метод .html() jQuery 3.4.1 без какой-либо санитизации. 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, непосредственно предшествующий уязвимому вызову, демонстрирует, что код так и не был доведён до production-уровня. Этот комментарий присутствовал в каждой версии приложения вплоть до финального релиза v8.33.0.0.
Файл: assets/html/j/articleview-mobile.js, строки 11–14:
// Android comm object
if (typeof PocketAndroidArticleInterface == 'undefined')
PocketAndroidArticleInterface = false;
isAndroid = !!PocketAndroidArticleInterface;