Is YouTube Shorts Remover [QVI] safe?
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.
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, 70k+ 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
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
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 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.
Fetching your Google account page with the ambient session cookie
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();};Parsing gender and birth year out of the account page, then hashing the email as an upload key
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.- Gendergender: 'female' (illustrative)
The gender recorded on your Google account, read from your account settings page.
- Birth yearbirthYear: 1991 (illustrative)
The birth year recorded on your Google account.
- Account identifierprofileId: 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3' (illustrative)
The same SHA-256 hash of your account email used elsewhere, linking this profile data to your account.
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
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.
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 alarm schedule that drives the hourly check-in
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()});Reusing your Google session to capture an auth token, then reading your activity feed
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];- Account identifieraccountId: '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.
- 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.
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.