InternetSpeedUtility

ID: bdmpgbmbdllbpdidgdcliliimmkeocin

Could be malicious

Supported Languages

🇧🇷Brazilian Portuguese
🇺🇸English
🇫🇷French
🇩🇪German
🇮🇹Italian
🇯🇵Japanese
🇲🇽Latin American Spanish
🇵🇹Portuguese
🇪🇸Spanish

Extension Info & Metadata

Status
Removed
Version
13.958.19.40261
Size
0.39 MB
Rating
2.8/5
Reviews
40
Users
807,156
Type
Extension
Updated
Apr 14, 2021
Category
7_productivity
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
http://internetspeedutility.netView 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
807,156

Test upload and download speeds. Get FREE tips on how to boost connectivity and more with this Chrome New Tab Extension.

Get InternetSpeedUtility, test upload and download speeds, plus update your new tab page search to MyWay.com. Comes with daily content to show you news, weather and more in a new Chrome window! By installing this extension, you agree to the End User License Agreement and Privacy Policy (https://eula.askapplications.com/eula/) This new tab extension is a product of Ask Applications, Inc. Permissions Requested "Read and change your data on a number of websites" For our product to work, we require access to the websites we own and manage. "Replace the page you see when opening a new tab" This allows us to show you our product - new tab page with free web search. "Read your browsing history" This allows us to tailor product specific content or offers towards relevant information. "Display notifications" This allows us the option to send you updates or additional product offers once you’ve already enjoyed the free product. "Manage your apps, extensions, and themes" This allows us to help you disable or remove this product and also understand whether we are able to provide the best experience. Release Notes: 13.962 : Optimizes the sync of this extension between Chrome profiles.

Item
Type
Severity
Description
webNavigation
Permission
High
This permission enables monitoring of all browser navigation events and transitions. Rated High because it can track every page visit, navigation method, and browsing pattern, potentially exposing sensitive browsing behavior and user activities.
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.
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 15% increase: Older manifest version lacks modern security controls
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.
Older Manifest Version
Risk Factor
Medium
This extension uses Manifest Version 2
alarms
Permission
Low
This permission schedules periodic tasks. Rated Low because it can only trigger events at specified times without access to sensitive data.
notifications
Permission
Low
This permission displays system notifications. Rated Low because it can only show user-visible notifications without accessing system data.
*://anx.tb.ask.com/*
Permission
Unknown
No classification available for this permission.
*://live.tb.ask.com/*
Permission
Unknown
No classification available for this permission.
*://*.internetspeedutility.net/*
Permission
Unknown
No classification available for this permission.
*://hp.myway.com/*
Permission
Unknown
No classification available for this permission.

The background page creates a hidden iframe to a remote web domain and waits for a content-script connection from that page so it can read back storage contents. This is a covert cross-origin collection pattern: the extension uses its privileged context to pull install/tracking data from a remote site without user interaction.

js/dlpHelper.js (Line 4)
function openDLPDomain(url, getLocalStorage, parseLocalStorage, resolve, reject) {  var bgifr = document.createElement("iframe");  bgifr.setAttribute("id", "bgifr");  bgifr.setAttribute("src", url);  document.body.appendChild(bgifr);  var _this = this;  _this.defer(function() {    var bgifr = document.getElementById("bgifr");    document.body.removeChild(bgifr);  });  var onConnect = function(port) {      if (!port.sender.hasOwnProperty("tab")) {        chrome.runtime.onConnect.removeListener(onConnect);        _this.defer(function() {          port.disconnect();        });        getLocalStorage(port, _this.keys)          .then(function(response) {            _this.cleanUp();            if (!response) {              Logger.log("dlpHelper: openDLPDomain: FAIL: no response");              reject(new Error("dlpHelper: openDLPDomain: FAILED to find DLP data in local storage"));            }            Logger.log("dlpHelper: openDLPDomain: SUCCESS: response looked like: " + JSON.stringify(response));            resolve(parseLocalStorage(response));          })

This code iterates over all tabs and frames, scrapes tracking parameters from URL hashes and query strings, and converts them into install-pixel and secondary-offer URLs. Reading campaign identifiers from arbitrary open tabs and reusing them for telemetry/redirect logic is a strong indicator of install attribution tracking beyond the immediate extension UI.

js/dlp.js (Line 86)
frameDetails.some(function(frame) {      var url = new URL(frame.url);      var urlHash = url.hash;      if (urlHash && (ask.apps.background.parentProductHashMatchRegEx.test(urlHash) || ask          .apps.background.extensionDetectContentScriptMatchRegEx.test(frame.url))) {        var mappedParams = getParamsFromString(url.hash.slice(1), params.hash.mapped, {});        var calculatedParams = {};        if (mappedParams.partnerId) {          var partnerId = GlobalPartnerIdFactory.parse(mappedParams.partnerId);          calculatedParams.cobrand = partnerId.getCobrand();          calculatedParams.campaign = partnerId.getCampaign();          calculatedParams.dlput = partnerId.getTrack();        }        var unmappedParams = getParamsFromString(url.hash.slice(1), params.hash          .unmapped, {            soep: "index.jhtml"          });        var urlParams = getParamsFromString(url.search.slice(1), params.searchParams          .unmapped, {            hostname: url.hostname          });        var isDlp2 = !!unmappedParams.sgn;        var pixelUrl = isDlp2 ?          ask.apps.background.config.buildVars.dlpTemplates.pixelUrl.dlp2 :          ask.apps.background.config.buildVars.dlpTemplates.pixelUrl.dlp1;        var secondaryOfferUrl = ask.apps.background.config.buildVars.dlpTemplates          .secondaryOfferUrl;        pixelUrl = replaceTemplatePlaceholders(pixelUrl, mappedParams, unmappedParams,          urlParams, calculatedParams);        secondaryOfferUrl = replaceTemplatePlaceholders(secondaryOfferUrl, mappedParams,          unmappedParams, urlParams, calculatedParams);

When a visited page contains a matching install hash, the extension sends a `ToolbarDetect` beacon tied to the extension's toolbar ID and then forcibly redirects the active tab into the extension's new-tab page. This couples user navigation with remote install attribution and redirection logic, a pattern commonly seen in aggressive toolbar/adware ecosystems.

js/extensionDetectWithHash.js (Line 66)
frameDetails.some(function(frame) {      var url = new URL(frame.url);      if (url.hash) {        var hashParams_1 = ExtensionDetectWithHash.extractHashParams(url.hash);        if (!ask.apps.background.parentProductHashMatchRegEx.test(url.hash))          return false;        var dlpEndpoint_1 = ExtensionDetectWithHash.getDLPEndpoint(Util          .getTopAndSecondLevelDomainsFromHostName(url.hostname));        ask.apps.background.extensionStateStorage.get()          .then(function(state) {            ExtensionDetectWithHash.fireToolbarDetect(hashParams_1, state, dlpEndpoint_1);            var redirectUrl = PageUtils.appendParams(PageUtils.getNewTabResourceUrl(), [              "rd=alreadyInstalled", "ruid=" + Util.generateToolbarId(), PageUtils.stParamName +              "=" + PageUtils.stParamValueTab            ]);            PageUtils.redirectToUrl(details.tabId, redirectUrl, true)              .catch(Logger.warn);          });

This content script turns remote pages on the extension's controlled new-tab/offer domains into command senders by forwarding `postMessage` payloads to the privileged background page. That creates a web-to-extension bridge where remotely served page content can invoke extension capabilities, which materially increases abuse risk if the page or backend is compromised.

js/webTooltabAPIProxy.js (Line 147)
if (extensionState && extensionState.toolbarData.newTabURL) {  var currentUrl = new URL(currentUrlStr);  var newTabUrl = new URL(extensionState.toolbarData.newTabURL.toLowerCase());  if (currentUrl.hostname === newTabUrl.hostname && currentUrl.pathname === newTabUrl    .pathname) {    return resolve();  }}return reject(new Error("Invalid webtooltab call: : URL: " + window.location.href +" does not match offer-service URL or the new tab URL"));});});}function handleWebTooltabMessageEvent(e) {  if (isWebTooltabMessage(e)) {    isValidSource()      .then(function() {          sendMessage(channel, {            name: "webtooltab",            data: JSON.parse(e.data)          }, commands.webtooltab);

The webtooltab API exposed to web pages includes privileged self-management actions such as `chrome.management.uninstallSelf`, with support for suppressing confirmation dialogs via caller-controlled options. In combination with the proxy bridge, remotely hosted pages can directly control lifecycle actions that should normally remain internal to the extension.

js/webtooltabAPI.js (Line 150)
uninstall: function(customUninstallOptions) {    var uninstall = function() {        return new Promise(function(resolve, reject) {              ask.apps.ul.fireInfoEvent(config.buildVars.unifiedLoggingUrl, {                message: "on-before",                topic: "uninstallAPI"              }, config, null);              new Promise(function(resolve, reject) {                  return window.setTimeout(resolve, 50);                })                .then(function() {                    try {                      var uninstallOptions = {                        showConfirmDialog: !!customUninstallOptions && customUninstallOptions                          .showConfirmDialog || false                      };                      Logger.log("webtooltabAPI: uninstall - uninstall options: " + JSON.stringify(                        uninstallOptions));                      var result = chrome.management.uninstallSelf(uninstallOptions);                      if (result) {                        return result.catch(reject);                      }

The extension uses the powerful `management` permission to enumerate other installed extensions, record their IDs/versions, and determine which ones can override the new tab page. Monitoring competing extensions like this is privacy-invasive and can support anti-competitive behavior or targeted remediation flows.

js/watchExtensionsHandler.js (Line 27)
chrome.management.getAll(function(extensionInfos) {      var watchExtensions = getEmptyWatchExtensionsObject();      extensionInfos        .filter(function(eInfo) {          return eInfo.type === "extension" &&            eInfo.id !== chrome.runtime.id &&            Util.checkOverlap(eInfo.permissions, WatchExtensionsHandler.permissionsToMonitor);        })        .forEach(function(eInfo) {          WatchExtensionsHandler.permissionsToMonitor            .filter(function(monitorPermission) {              return ~eInfo.permissions.indexOf(monitorPermission);            })            .forEach(function(permission) {              watchExtensions[permission].stackOfExtensions.push({                id: eInfo.id,                version: eInfo.version,                enabled: eInfo.enabled              });            });        });      Object.keys(watchExtensions)        .forEach(function(installedWatchExtensionsKey) {            watchExtensions[installedWatchExtensionsKey].isDefault = true;            watchExtensions[installedWatchExtensionsKey].stackOfExtensions.push({                  id: chrome.runtime.id,                  version: config.buildVars.version,                  enabled: true

The extension schedules recurring background telemetry pings to a remote endpoint and includes stable extension identifiers. The telemetry helper populates these events with toolbar ID and partner identifiers, turning this into a periodic user/device tracking mechanism rather than a purely functional feature.

js/background.js (Line 517)
function startULPing(config) {  var alarmName = "livePing";  var minTimeToNextPing = 60000;  var interval = config.buildVars.livePing.interval;  var lastPing = config.state.lastLivePing;  var ping = function() {      var eventData = {        cwsid: chrome.runtime.id      };      apps.ul.fireToolbarActiveEvent(config.buildVars.livePing.url, eventData, config)        .then(function(response) {            config.state.lastLivePing = Date.now();            background.extensionStateStorage.update(config.state);

By severity

Critical3
High15
Medium2
Low0

Versions scanned

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

Extension VersionCode Review Findings
13.962.19.3917713
13.958.19.402617

Files with findings

14 distinct paths — top paths by unique finding count:

  • js/background.js3
  • js/dlp.js3
  • js/dlpHelper.js2
  • js/watchExtensionsHandler.js2
  • config/config.json1
  • js/babAPI.js1
  • js/babTypeInjectionScript.js1
  • js/extensionDetect.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Code Injection
critical
js/babAPI.js (line 69)The BabAPI exposes an 'inject-script' feature that accepts an arbitrary JavaScript code string (babMessage.args.code) and executes it in the active tab using chrome.tabs.executeScript. The target frame is selected by …
13.962.19.39177
2Data Exfiltration
critical
js/dlpHelper.js (line 4)A hidden iframe is covertly injected into the background page pointing to https://download.internetspeedutility.net/blank.jhtml. A content script (localStorageContentScript.js) injected into that page then reads the p…
13.962.19.39177
3Remote Code Loading
critical
js/babTypeInjectionScript.js (line 4)The BabTypeInjectionScript class fetches a JavaScript payload from a remotely-controlled URL (babRemoteScriptUrl in config) and then injects that payload into the active tab via chrome.tabs.executeScript with runAt:'d…
13.962.19.39177
4Privilege Escalation
high
ntp1.html (line 25)The hijacked new tab page loads a full-screen iframe that will be populated with hp.myway.com content. The iframe's 'allow' attribute grants the remote third-party page access to geolocation, microphone, camera, midi,…
13.962.19.39177
5Privilege Escalation
high
js/webTooltabAPIProxy.js (line 147)This content script turns remote pages on the extension's controlled new-tab/offer domains into command senders by forwarding `postMessage` payloads to the privileged background page. That creates a web-to-extension b…
13.958.19.40261
6Privilege Escalation
high
js/webtooltabAPI.js (line 150)The webtooltab API exposed to web pages includes privileged self-management actions such as `chrome.management.uninstallSelf`, with support for suppressing confirmation dialogs via caller-controlled options. In combin…
13.958.19.40261
7Tracking
high
js/dlp.js (line 121)The extension syncs a 'dlpToolbarData' object — containing tracking identifiers like toolbarId, partnerId, partnerSubId, installDate, countryCode, and pixel tracking URLs — across all of the user's synced Chrome profi…
13.962.19.39177
8Tracking
high
js/background.js (line 451)The extension establishes a recurring alarm (every 6 hours, per the 21600000ms interval in config.json) that fires a 'ToolbarActive' beacon to https://live.tb.ask.com/tr.gif. Each beacon carries the extension's CWS ID…
13.962.19.39177
9Tracking
high
js/extensionDetect.js (line 108)When the extension detects a navigation to any subdomain of .internetspeedutility.net, it injects this content script which: (1) writes two tracking cookies (mindsparktb_ and mindsparktbsupport_) keyed by the unique t…
13.962.19.39177
10Tracking
high
config/config.json (line 22)The configuration reveals an extensive affiliate/tracking pixel infrastructure. On installation the extension fires a pixel beacon containing the user's full affiliate chain (partnerId, partnerSubId, coId, toolbarId, …
13.962.19.39177
11Tracking
high
js/dlp.js (line 86)This code iterates over all tabs and frames, scrapes tracking parameters from URL hashes and query strings, and converts them into install-pixel and secondary-offer URLs. Reading campaign identifiers from arbitrary op…
13.958.19.40261
12Tracking
high
js/extensionDetectWithHash.js (line 66)When a visited page contains a matching install hash, the extension sends a `ToolbarDetect` beacon tied to the extension's toolbar ID and then forcibly redirects the active tab into the extension's new-tab page. This …
13.958.19.40261
13Unauthorized Data Collection
high
js/localStorageContentScript.js (line 9)This content script, injected into https://download.internetspeedutility.net/blank.jhtml, reads all localStorage keys from that page and transmits them back to the background script over a chrome.runtime port. When no…
13.962.19.39177
14Unauthorized Data Collection
high
js/dlp.js (line 271)The extension uses the 'cookies' permission to call chrome.cookies.getAll() on the .internetspeedutility.net domain, reading all cookies to extract tracking identifiers (toolbarId, partnerId, installDate, partnerSubId…
13.962.19.39177
15Unauthorized Data Collection
high
js/watchExtensionsHandler.js (line 4)The extension enumerates ALL installed extensions using chrome.management.getAll(), recording each extension's ID, version, and enabled state. It then registers persistent listeners for install, uninstall, enable, and…
13.962.19.39177
16Unauthorized Data Collection
high
js/offerService.js (line 277)The OfferService assembles a comprehensive device and user fingerprint — browser name/version, OS, platform, locale, language, userAgent, install date, country code, partner IDs, and user segment — and transmits it vi…
13.962.19.39177
17Unauthorized Data Collection
high
js/background.js (line 95)The extension implements a four-level cascade to extract tracking/affiliate parameters: (1) chrome.storage.sync, (2) cookies from the download domain, (3) localStorage from a silently-loaded tracking iframe, (4) URL h…
13.962.19.39177
18Unauthorized Data Collection
high
js/dlpHelper.js (line 4)The background page creates a hidden iframe to a remote web domain and waits for a content-script connection from that page so it can read back storage contents. This is a covert cross-origin collection pattern: the e…
13.958.19.40261
19Tracking
medium
js/background.js (line 517)The extension schedules recurring background telemetry pings to a remote endpoint and includes stable extension identifiers. The telemetry helper populates these events with toolbar ID and partner identifiers, turning…
13.958.19.40261
20Unauthorized Data Collection
medium
js/watchExtensionsHandler.js (line 27)The extension uses the powerful `management` permission to enumerate other installed extensions, record their IDs/versions, and determine which ones can override the new tab page. Monitoring competing extensions like …
13.958.19.40261
URLs
25
IPv4
0
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.

download.internetspeedutility.net/blank.jhtmlhttps://download.internetspeedutility.net/blank.jhtml
live.tb.ask.com/tr.gifhttps://live.tb.ask.com/tr.gif
anx.tb.ask.com/anx.gifhttps://anx.tb.ask.com/anx.gif
download.internetspeedutility.net/anemone.jhtmlhttps://download.internetspeedutility.net/anemone.jhtml
{{hostname}}/install_pixels.jhtmlhttps://{{hostname}}/install_pixels.jhtml?partner={{partnerId}}&sub_id={{partnerSubId}}&coId={{coId}}&tbGuid={{toolbarId}}&s2={{s2}}&s3={{s3}}&s4={{s4}}&s5={{s5}}
{{hostname}}/conversion.htmlhttps://{{hostname}}/conversion.html?ref={{ref}}&cobrand={{cobrand}}&campaign={{campaign}}&track={{dlput}}&si={{partnerSubId}}&s2={{s2}}&s3={{s3}}&s4={{s4}}&s5={{s5}}&coId={{coId}}&country={{countryCode}}&otOptIn={{ot}}&pDomain={{pd}}&vendor={{vd}}&pGroup={{pg}}&nfc={{nfc}}&guid={{toolbarId}}&ver={{ver}}&sig={{sgn}}
ext.ask.com/%7B%7Bsoep%7D%7Dhttps://ext.ask.com/{{soep}}?productName={{pname}}&installDate={{installDate}}&partnerId={{partnerId}}&si={{partnerSubId}}&tbGuid={{toolbarId}}&coId={{coId}}&isAudioEnabled={{ae}}&isRebuttalEnabled={{re}}
hp.myway.com/internetspeedutility/ttab02chr/index.htmlhttps://hp.myway.com/internetspeedutility/ttab02chr/index.html?p2=${partnerID}&n=${installDateHex}&ptb=${toolbarID}&si=${partnerSubID}
internetspeedutility.dl.myway.com/uninstall.jhtmlhttps://internetspeedutility.dl.myway.com/uninstall.jhtml?c=
download.internetspeedutility.net/images/download/static/native/notifications/%7B%7BcobrandID%7D%7D/%7B%7BtrackID%7D%7D/logger-config.jsonhttps://download.internetspeedutility.net/images/download/static/native/notifications/{{cobrandID}}/{{trackID}}/logger-config.json
Showing 1 to 10 of 30 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Version
Size
Is Malicious
Findings
Permhash
13.962.19.39177
Latest
0.10 MB
Malicious
13
13.958.19.40261
0.09 MB
Malicious
7
13.958.19.24177
0.09 MB
Malicious
—
13.986.19.62886
0.39 MB
Malicious
—
Showing 1 to 4 of 10 rows
Rows per page:

Code Diff

Compare extension code between any two versions.

0 changed files (scanned top 25 shared text files)

No comparable text files found between these versions.

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.