Dictionary

Dictionary

ID: nhbchcfeodkcblfpdjdhelcfbefefmag

Extension Info & Metadata

Status
Active
Version
23.11.11
Size
1.85 MB
Rating
4.3/5
Reviews
31
Users
6,000
Type
Extension
Updated
Dec 28, 2023
Category
Tools
Price
Free
Featured
Yes
Visibility
Listed
Mature
No
By Google
No
Trusted
Yes

Publisher Contextual Analysis

Trusted
Author
e-dictionary.orgView Profile
MX records exist
No
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
No
Website
Visit
Total Extensions
1
Active
1
Obsolete
0
Listed
1
Unlisted
0
Total Users
6,000
Screenshot 1
Screenshot 2
Screenshot 3
Screenshot 4
Screenshot 5

Full-featured dictionary extension

Easily look up word definitions, pronunciations and synonyms as you browse the web

Item
Type
Severity
Description
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.
*://*/*
Host
Critical
Broad host access — the extension can read/modify content on every website.
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:• 10% increase: Early script execution enables pre-emptive content manipulation
Broad Host Permissions
Risk Factor
High
This extension has broad host permissions allowing it to access many or all websites.
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.
Early Content Script Execution
Risk Factor
Medium
This extension runs content scripts at document_start.
contextMenus
Permission
Low
This permission adds items to browser context menus. Rated Medium because it only modifies right-click menus without access to page content.

The extension silently strips the Content-Security-Policy response header from every website the user visits (both top-level pages and all sub-frames) using a declarativeNetRequest rule. CSP is the primary browser mechanism that prevents cross-site scripting and data injection attacks; removing it globally across all sites means every website the user browses is left unprotected. A legitimate dictionary extension has no need to modify security headers on arbitrary third-party websites.

assets/rules.json (Line 1)
[  {    "id": 1,    "priority": 1,    "action": {      "type": "modifyHeaders",      "responseHeaders": [        {          "header": "content-security-policy",          "operation": "remove"        }      ]    },    "condition": {      "urlFilter": "*://*/*",      "resourceTypes": [        "main_frame",        "sub_frame"      ]    }  }]

A second declarativeNetRequest rule strips the X-Frame-Options header from every sub-frame response across all websites. X-Frame-Options is a critical clickjacking defense that prevents pages from being embedded in iframes without the site's consent. Globally disabling this for all sub-frames allows any third-party page to be silently embedded in iframes inside other pages, enabling clickjacking and UI-redressing attacks on every site the user visits.

assets/rules.json (Line 19)
{  "id": 2,  "priority": 1,  "action": {    "type": "modifyHeaders",    "responseHeaders": [      {        "header": "x-frame-options",        "operation": "remove"      }    ]  },  "condition": {    "urlFilter": "*://*/*",    "resourceTypes": [      "sub_frame"    ]  }}

The extension uses the `cookies` permission to access the LSID authentication cookie from accounts.google.com to determine whether the user is currently signed in to their Google account. While the boolean result is only used locally to gate a feedback prompt, accessing a sensitive Google authentication session token is far outside the scope of a dictionary extension. This represents unauthorized collection of account state data that could be adapted for credential probing.

background-script/background.js (Line 3899)
async isSignedInToGoogle() {  return new Promise(e => {    chrome.cookies.get({      url: "https://accounts.google.com",      name: "LSID"    }, n => {      e(!!n)    })  })}

The extension generates a persistent random UUID as a client ID stored in local storage and transmits it along with usage events (install, uninstall, context menu clicks) to Google Analytics using a hardcoded Measurement Protocol API secret. This constitutes persistent cross-session user tracking without disclosure or consent. The permanent client ID allows the developer to correlate all of a user's extension activity over time.

background-script/background.js (Line 10)
var fr = "https://www.google-analytics.com/mp/collect",  lr = "https://www.google-analytics.com/debug/mp/collect",  dr = "G-7FSX884R4G",  pr = "vWEdjAcARCOZxI6zaJ-l2g";var lt = class {    constructor() {      this.debug = IS_DEV_BUILD    }    async getOrCreateClientId() {      let {        clientId: e      } = await chrome.storage.local.get("clientId");      return e || (e = self.crypto.randomUUID(), await chrome.storage.local.set({        clientId: e      })), e    }    async fireEvent(e, n = {}) {        n.session_id || (n.session_id = await this.getOrCreateSessionId()), n.engagement_time_msec || (n          .engagement_time_msec = 100);        try {          let r = await fetch(`${this.debug?lr:fr}?measurement_id=${dr}&api_secret=${pr}`, {            method: "POST",            body: JSON.stringify({              client_id: await this.getOrCreateClientId(),              events: [{                name: e,                params: n              }]            })          });

On every tab activation and tab update event, the background script queries whether the user is in a normal (non-incognito) window, checks their Google sign-in status via cookie, measures days since install, and counts interaction events. While this is framed as eligibility logic for a feedback prompt, it establishes continuous behavioral profiling of the user's browsing session on all tab navigations, which is disproportionate for a dictionary tool.

background-script/background.js (Line 3872)
async shouldRequestFeedback(e) {  let n = !await this.isIncognito(e),    r = await this.isSignedInToGoogle(),    o = await this.getDaysSinceInstallation() > 7,    i = await this.getSuccessCount() >= 30,    s = await this.isEligibleForReissue(),    a = n && r && o && i && s;  return this.logger.debug(`isEligible: ${a}. Based on       isNormalWindow: ${n},       isSignedIn: ${r},       isAgedInstallation: ${o},       hasSufficientSuccessfulInteractions: ${i},       isEligibleForReissue: ${s}`), a}

By severity

Critical2
High1
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
23.11.115

Files with findings

2 distinct paths — top paths by unique finding count:

  • background-script/background.js3
  • assets/rules.json2
S.No.
Category
Severity
File
Summary
Found in Version
1Network Interception
critical
assets/rules.json (line 1)The extension silently strips the Content-Security-Policy response header from every website the user visits (both top-level pages and all sub-frames) using a declarativeNetRequest rule. CSP is the primary browser mec…
2Network Interception
critical
assets/rules.json (line 19)A second declarativeNetRequest rule strips the X-Frame-Options header from every sub-frame response across all websites. X-Frame-Options is a critical clickjacking defense that prevents pages from being embedded in if…
3Unauthorized Data Collection
high
background-script/background.js (line 3899)The extension uses the `cookies` permission to access the LSID authentication cookie from accounts.google.com to determine whether the user is currently signed in to their Google account. While the boolean result is o…
4Tracking
medium
background-script/background.js (line 10)The extension generates a persistent random UUID as a client ID stored in local storage and transmits it along with usage events (install, uninstall, context menu clicks) to Google Analytics using a hardcoded Measurem…
5Unauthorized Data Collection
medium
background-script/background.js (line 3872)On every tab activation and tab update event, the background script queries whether the user is in a normal (non-incognito) window, checks their Google sign-in status via cookie, measures days since install, and count…
URLs
21
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.example.com-http://www.example.com
chrome.google.com/webstore/detail/dictionary/nhbchcfeodkcblfpdjdhelcfbefefmaghttps://chrome.google.com/webstore/detail/dictionary/nhbchcfeodkcblfpdjdhelcfbefefmag
o526305.ingest.sentry.io/6244539https://[email protected]/6244539
*/*http://*/*
*/*https://*/*
www.google.com/searchhttps://www.google.com/search?q=${t}+${n}`,applyCss:(
duckduckgo.com-https://duckduckgo.com/?q=${t}+${n}`,applyCss:(
www.google-analytics.com/mp/collecthttps://www.google-analytics.com/mp/collect
www.google-analytics.com/debug/mp/collecthttps://www.google-analytics.com/debug/mp/collect
forms.gle/oRACFiJQCZW77Ssu8https://forms.gle/oRACFiJQCZW77Ssu8
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
23.11.11
Latest
1.85 MB
Malicious
5
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.