Is TwiHD - вернет качество 1080p на Twitch safe?
TwiHD Twitch 1080p routes browser traffic through remotely-configured proxy servers and transmits device identifiers and IP addresses to its backend.
The extension fetches PAC script URLs and proxy credentials from a remote registry hosted on Google Cloud Storage or Yandex Cloud, then applies them to redirect all browser traffic. On each proxy connection, it sends a persistent device ID and server-assigned user ID along with the device IP address to its API. It also sends usage events to Google Analytics and full request/response error details to a self-hosted Sentry server at sentry-sel-4.vpnn.loan.
Who publishes itՍտարրոկետս ՍՊԸ - no other listings under this identity, 2 shared hostnames
Ստարրոկետս ՍՊԸ - no other listings under this identity, 2 shared hostnames
What this publisher told the store about itself, and the other listings that told it the same thing.
Shared hosts - 2 hostnames
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
User ID, device ID and IP address sent to proxy backend on every connection
Connecting the proxy sends your account ID, a persistent device ID, and your current IP to the developer's backend.
Together these can track which IPs you've used and correlate your device across networks.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-200
- Source
- Dynamic sandbox
You click Connect in the extension popup.
The proxy connection flow begins immediately on user interaction.
The extension POSTs your user ID, device ID, and current IP address to the developer's proxy API.
The same identifiers are also sent on every subscription status check (api/v2/premium/update-and-get-subscription) and premium proxy requests.
- User IDusr_8f2a1c94b7e34d0f
A server-assigned account identifier that ties your subscription and usage history to your account.
- Device IDa3b7c2d1-4e8f-4a9b-b1c2-d3e4f5a6b7c8
A UUID from first install, stored permanently, letting the backend recognize your device across sessions even after logout.
- Device IP address185.220.101.42
Your network's public IP at the time of connection. Transmitted as 'device_ip' in the request body.
- Product nametwihd
Fixed string 'twihd' identifying this extension as the requesting client.
fetchProxyData, connection request body (service_worker.js ~line 893)
return await httpClient.post(`https://${apiBaseUrl}/api/v2/get-proxy`, { json: { product: 'twihd', device_id: deviceId, device_ip: deviceIp ?? 'unknown', on_fail: onFail, with_auth: featureFlags[FeatureKey.ProxyAuth] }}).json();- uubb.website
Primary proxy API backend, receives userId, deviceId, and device IP on every connection and subscription check.
- vrbl.space
Alternate proxy API domain, same data as uubb.website, used when the primary is unreachable.
Persistent tracking ID sent to Google Analytics on every proxy action
Connecting, disconnecting, or using the popup sends a permanent device fingerprint to Google Analytics with the action name.
Created on install, stored permanently, never rotates, letting the developer correlate your usage indefinitely.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-359
- Source
- Dynamic sandbox
You click Connect, disconnect the proxy, or the extension installs or updates.
Any lifecycle action fires a tracked event.
The extension sends your permanent client ID and current session ID to Google Analytics with the action name.
The same client ID accompanies every event for the lifetime of the browser profile, actions can be chained together to build a long-term usage history.
- Permanent client ID3f8a2c1d-9b47-4e2a-a831-7f2c9d0e1b34
A random UUID from first install that never changes, linking all your actions across weeks and months.
- Session ID1717689234821
A shorter-lived session token, refreshed every 30 minutes of inactivity. Ties events within a single browser session together.
- Event nameproxy_connect
The user action that triggered the event (e.g. 'proxy_connect', 'install', 'user_created', 'video_redirect').
Persistent client ID creation and event dispatch (service_worker.js lines 2350-2440)
getOrCreateClientId — permanent UUID
background/service_worker.jsgetOrCreateClientId() { return (async () => { let clientId = (await chrome.storage.local.get('clientId')).clientId; if (!clientId) { clientId = self.crypto.randomUUID(); await chrome.storage.local.set({ clientId }); } return clientId; })();}sendEvent — POSTs to hardcoded GA endpoint with embedded API secret
background/service_worker.jsconst response = await fetch( 'https://www.google-analytics.com/mp/collect' + '?measurement_id=G-XCPV2XK66M&api_secret=<redacted>', { method: 'POST', body: JSON.stringify(payload) });- www.google-analytics.com
Google Analytics Measurement Protocol, receives usage telemetry including the permanent client ID, session ID, and event names for all proxy actions.
Proxy server and PAC script URL controlled by remotely-fetched registry
Traffic routes through a proxy whose address comes from a remote config on Google Cloud Storage or Yandex Cloud.
The operator can change the PAC URL or proxy address anytime, no extension update needed.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-829
- Source
- Dynamic sandbox
You connect the proxy.
The extension begins the connection flow.
Downloads a remote PAC registry, fetches the PAC script it names, decompresses it, and applies it as the system-wide proxy config.
The operator can update the registry at any time to change the PAC script URL or content, redirecting all matched traffic through a different proxy server without any user action or extension update.
PAC registry fetch and fallback logic (service_worker.js lines 1892-1928)
Registry URL selection with Yandex fallback
background/service_worker.jsconst { configsBaseUrl } = await getState(StateKey.ConfigsBaseUrl);const registryUrl = configsBaseUrl === 'https://storage.yandexcloud.net/vpnn-web-configs/' ? new URL('twihd/pca-scripts-registry-yandex.json', configsBaseUrl) : new URL('twihd/pca-scripts-registry-google.json', 'https://storage.googleapis.com/');const registry = await httpClient.get(registryUrl.toString()).json();PAC script fetched from URL specified in registry, then applied
background/service_worker.jsconst pacUrl = (isLitePAC && registry.premiumLite) ? registry.premiumLite : registry.premium;const pacData = await fetchAndDecompress(pacUrl);// ...chrome.proxy.settings.set({ value: { mode: 'pac_script', pacScript: { data: buildPacScript({ host, port, pacString: pacData }) } }, scope: 'regular'});On googleapis failure, switch to Yandex Cloud for all future fetches
background/service_worker.jsif (!configsBaseUrl || configsBaseUrl === 'https://storage.googleapis.com/') { await setState({ [StateKey.ConfigsBaseUrl]: 'https://storage.yandexcloud.net/vpnn-web-configs/' });}- storage.googleapis.com
Primary host for the PAC script registry (twihd/pca-scripts-registry-google.json) and PAC script content. Operator-controlled GCS bucket.
- storage.yandexcloud.net
Fallback host for PAC registry and scripts when googleapis.com is unreachable (bucket vpnn-web-configs, path twihd/).
+2 more findings not shown
What it can do
Permissions this extension asks for, as declared in version 1.0.5. 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 vrbl.space
https://vrbl.space/* and 1 more
Read and change your data on uubb.website
https://uubb.website/* and 1 more
Read and change your data on cukubst.top
https://cukubst.top/* and 1 more
Read and change your data on cuknrz.top
https://cuknrz.top/* and 1 more
Read and change your data on cukvrub.top
https://cukvrub.top/* and 1 more
Read and change your data on cukptk.website
https://cukptk.website/*
Read and change your data on youtube.com
https://*.youtube.com/*
Read and change your data on witch.tv
https://*.witch.tv/*
Read and change your data on test.uubb.website
https://test.uubb.website/*
Read and change your data on ptkdfjnflmpalkfpkehjgopmjldhjhgb.click
https://ptkdfjnflmpalkfpkehjgopmjldhjhgb.click/*
Read and change your data on sentry-sel-4.vpnn.loan
*://sentry-sel-4.vpnn.loan/*
Read and change your data on nrz.homes
*://*.nrz.homes/*
Read and change your data on youtu.be
*://*.youtu.be/*
Read and change your data on googlevideo.com
*://*.googlevideo.com/*
Read and change your data on play.google.com
*://*.play.google.com/*
Read and change your data on ytimg.com
*://*.ytimg.com/*
Read and change your data on vpnn.loan
*://*.vpnn.loan/*
Read and change your data on yandexcloud.net
*://*.yandexcloud.net/*
Read and change your data on twhd.online
*://*.twhd.online/*
Read and change your data on twhd.site
*://*.twhd.site/*
Route all of your browsing through a server of its choosing
proxy
Store data in your browser
storage
Watch every request your browser makes
webRequest
Act on the current tab, but only after you click the extension
activeTab
See the address and title of every tab you have open
tabs
Schedule its own background tasks
alarms
See, disable and uninstall your other extensions, including your security ones
management
Read and change cookies, including the ones that keep you signed in
cookies
Where it sends data
Destinations our analysis observed TwiHD 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.
- www.google-analytics.comwidely used
TwiHD sends data to www.google-analytics.com. A widely used service: 346 other extensions we have analysed send data here.
- storage.googleapis.com
TwiHD sends data to storage.googleapis.com. 7 other extensions we have analysed send data here.
- sentry-sel-4.vpnn.loan
TwiHD sends data to sentry-sel-4.vpnn.loan. No other extension we have analysed sends data here.
- uubb.website
TwiHD sends data to uubb.website. No other extension we have analysed sends data here.