Extension code is obfuscated

The extension's JavaScript is obfuscated rather than merely minified, which hides its behaviour from reviewers and breaks the Chrome Web Store's code-readability rule.

Do this: Uninstall it; code you cannot read cannot be trusted. Obfuscated extension code cannot be reviewed by you or by the store, which is the point of obfuscating it.
PassThe extension's code is readable or plainly minified.
HighThe extension's code is obfuscated.

The fix, in one snippet

Example to adapt Nothing to audit
Minified is normal. Packed, encoded or self-decrypting is not.

Illustrative values. Change the paths, hostnames and options to match your own site before using it.

The sections below explain what is tested, why it matters and the alternatives.

What we test

For each script the analyser separates minification (short identifiers, no whitespace, but readable strings and API names) from obfuscation: hex- or unicode-escaped identifiers and strings (\x61\x62), a string array with a rotating decoder function (the _0x1a2b pattern of javascript-obfuscator), control-flow flattening (a large switch inside while(true)), self-defending code that inspects its own toString(), eval or Function on decoded strings, the Dean Edwards packer, JSFuck, a high fraction of non-alphanumeric characters and high string entropy. Each file is reported with the signals found. Limits: aggressive compilers such as Closure's ADVANCED mode produce dense output that can resemble obfuscation, so the analyser keys on decoder patterns rather than density; embedded base64 assets and WebAssembly glue can produce false positives.

Why it matters

The Chrome Web Store has prohibited obfuscated code since 2018 precisely because reviewers could not tell what it did; minification is allowed. Nearly every malicious extension found in the wild is obfuscated, because obfuscation defeats both automated review and the researchers who look at packages afterwards. Some legitimate developers obfuscate to protect what they consider intellectual property; that still violates the policy and still prevents you from verifying what runs with access to your browsing. Every user of the extension carries the unknown.

How to fix it

Users: remove the extension and report it to the store. Prefer open-source extensions with a public repository so the package can be compared with the source. To look yourself, enable Developer mode on chrome://extensions, note the ID and open the files under the profile's Extensions folder, or load the package in CRX Viewer. The pattern to recognise:

var _0x3f2a=['\x63\x6f\x6f\x6b\x69\x65','\x66\x65\x74\x63\x68'];(function(_0x1,_0x2){…})(_0x3f2a,0x1c4);

Developers: ship readable or minified code, keep source maps or a public repository, and expect obfuscated submissions to be rejected or removed. Related checks: remote code and, for files, obfuscated scripts. Guides: are browser extensions safe? and signature vs heuristic detection.

Where this fits

Extension code is obfuscated is check 3 of 9 that the browser extension analyzer runs under extension permissions and behaviour, ordered the way they are worth fixing. That ordering is the point: Fixing this one while the check above it still fails buys less than it looks like.

Fix this one first

Above it in the same category sits Extension can read and change data on all websites (high), where the extension asks for access to every website, so it can read and change everything you see and type in the browser. An attacker who has that does not need this, so it is the better use of the same hour.

What fixing this still leaves open

Extension code is obfuscated closes one route in. Immediately below it: Extension requests high-risk permissions, where the extension requests permissions that reach beyond the page: Intercepting requests, reading cookies or history, controlling downloads, talking to native programs, or debugging other tabs; Content scripts injected into every page, where the extension injects its own script into every page you open, whether or not you use it there; Extension contacts external endpoints, where the extension's code contains addresses of external servers it communicates with, so some of your data or activity may leave the browser.

Prompt for an AI Hand this check to an assistant Sign in to copy it
The first few lines
You are a senior web engineer. I ran a security and SEO scanner against my site and it reported the finding below. Fix it properly rather than suppressing the symptom.

Finding: Extension code is obfuscated (high severity)
Scanner check id: extension-obfuscated-code
17 more lines, including the evidence and the exact fix

The rest of this prompt names the pages and line numbers we found the problem on, the configuration to change, and the constraints a good answer has to respect. It is free, it just needs an account so the work is not scraped wholesale.

Sign in with Google

Signing in is free and takes one click. We store your email address and nothing else.

References

  1. Chrome Web Store: Code readability requirements
  2. Chromium Blog: Trustworthy Chrome Extensions, by default (2018)
  3. Mozilla Add-on Policies (source code submission)
  4. CRX Viewer

Related guides