Chrome Web Store
10Versions
2Code reviewed

Do not install

Code review: critical (v1.0.7)

Our reviewer read version 1.0.7 of this extension and confirmed malicious behaviour. 4 security findings documented below. Do not install it. Remove it if you already have it.

3 indicators in this extension

3 indicators
2 versions analysed

Every finding is verified by a security analyst. Unlock the code evidence, indicators and version history.

Unlock this report — $4.99Start 7-day trial — all reports
One-time payment · Secure checkout by Stripe

What our analysis found

Dark Reader for Chrome, used by 7,000 people, is rated malicious by Extension Auditor. Our code review reported 4 findings (2 critical, 2 high), led by remote code loading. Its permissions mean it can read and change data on all websites and can inject scripts into pages.

Key findings

  • Critical

    Remote Code Loading

    The content script (declared for *://*/* in all frames) asks the service worker for a server-fetched config, then reconstructs the name of a global function at runtime from the server-supplied `hash` field by stripping non-letters, splitting on a server-chosen delimiter, reversing and rejoining, and finally calls `window[decodedName](o.qaRoutine)` where `e` is `window`. Hiding the invoked API behind a server-controlled string transform is deliberate anti-analysis: the call target cannot be determined from the shipped code and can be changed remotely after store review. Because `Object.assign(o, t)` at line 42 lets the server also overwrite `o.qaRoutine` with a string, decoding to a string-eval sink such as turns this into a remote script-execution primitive on every page the user visits.

  • Critical

    Other

    The worker only releases the server-controlled config to a content script when the remote `extStat` flag is set and the requesting frame's URL matches a server-supplied regex, so the hidden behaviour is dormant by default and can be switched on remotely for an arbitrary, operator-chosen subset of sites after store review. That is a classic delayed-activation / selective-targeting kill switch rather than a feature flag, and the ` ` short-circuit plus the latent `optout` state show the config surface anticipates behaviour well beyond theme switching. Combined with the runtime-decoded dispatch in, the operator retains post-publication control over what code runs in every page the user loads.

  • High

    Unauthorized Data Collection

    The payload handed to the remotely-decoded dispatcher assembles a device fingerprint (appVersion, network, platform, userAgentData brands, CPU core count, frame position) and ships it to [domain withheld]. The CWS listing declares no data collection at all, so this undisclosed fingerprint collection fails the disclosure cross-check even though the destination is the publisher's own domain, and none of these values are needed to apply a CSS invert filter. The misleading `qa_metric`/`qaRoutine` naming and the fact that it only fires when the server flips `extStat` mark it as covert rather than ordinary diagnostics.

  • High

    Tracking

    Every 15 minutes (driven by the _drAlarm alarm) the worker beacons a base64-wrapped blob containing a locally generated persistent UUID (lines 53-57) plus cumulative active-use timing to [domain withheld], then merges the JSON reply into the state object it later serves to content scripts. Base64-encoding a querystring payload serves no transport purpose and keeps the exfiltrated fields out of plain-text inspection; the persistent UUID plus usage timers constitute undisclosed cross-session user tracking against a CWS listing that declares no data collection. The response-merge makes this the inbound half of the C2 loop rather than a genuine update check, since nothing in the reply is used for updating.

Analyst notes

Behind a working ~130-line feature, the extension ships a remote command-and-control channel::30-44 beats a base64-wrapped payload (persistent UUID, per-extension usage timing) to [domain withheld] and Object.assign's the JSON response straight into its runtime config, which:66-75 then hands to the all-URLs content script;:39-59 gates on a server-supplied `extStat` kill switch plus server-supplied `rAllow`/`rDeny` regexes matched against location.href, reconstructs a window method name at runtime from a `hash` string the server controls (), and invokes `window[decodedName](o.qaRoutine)`. That runtime-decoded dispatch target, per-site remote targeting, and the dormant navigator-fingerprint beacon to / (CWS data collection is 'none declared') have no relationship to inverting page colors; the permhash cluster at 56% flagged-malicious, the publisher-malicious flag and the store removal only corroborate a conclusion the code already establishes on its own.

Dark Reader for Chrome

Dark Reader for Chrome Chrome extension security report

ID: omfeeokgnjnjcgdbppmnijlmdnpafmmp

Supported Languages

🇪🇹Amharic
🇸🇦Arabic
🇧🇩Bengali
🇧🇷Brazilian Portuguese
🇬🇧British English
🇧🇬Bulgarian
🇪🇸Catalan
🇨🇳Chinese (Simplified)
🇹🇼Chinese (Traditional)
🇭🇷Croatian
🇨🇿Czech
🇩🇰Danish
🇳🇱Dutch
🇺🇸English
🇪🇪Estonian
🇵🇭Filipino
🇫🇮Finnish
🇫🇷French
🇩🇪German
🇬🇷Greek
🇮🇳Gujarati
🇮🇱Hebrew
🇮🇳Hindi
🇭🇺Hungarian
🇮🇩Indonesian
🇮🇹Italian
🇯🇵Japanese
🇮🇳Kannada
🇰🇷Korean
🇲🇽Latin American Spanish
🇱🇻Latvian
🇱🇹Lithuanian
🇲🇾Malay
🇮🇳Malayalam
🇮🇳Marathi
🇳🇴Norwegian
🇮🇷Persian
🇵🇱Polish
🇵🇹Portuguese
🇷🇴Romanian
🇷🇺Russian
🇷🇸Serbian
🇸🇰Slovak
🇸🇮Slovenian
🇪🇸Spanish
🇰🇪Swahili
🇸🇪Swedish
🇮🇳Tamil
🇮🇳Telugu
🇹🇭Thai
🇹🇷Turkish
🇺🇸US English
🇻🇳Vietnamese

Extension Info & Metadata

Status
Active
Version
1.0.10
Size
0.19 MB
Rating
4.3/5
Reviews
40
Users
7,000
Type
Extension
Updated
Apr 8, 2026
Category
Workflow & planning
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
Yes
This publisherTrack record
1extension
All still listed

Publisher Contextual Analysis

Trusted
Author
Dark dev.
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Website
Visit
Extensions
1
Active
1
Obsolete
0
Listed
1
Unlisted
0
Users
7,000

Screenshots & videos

Screenshot 1
Screenshot 2
Screenshot 3

Install growth

Item
Type
Severity
Description
scripting
Permission
Critical
This permission allows injection and execution of JavaScript on any webpage. Rated Critical because it can modify page content, steal sensitive data, and inject malicious code into any site the extension has access to.
*://*/*
Risk Factor
Critical
This permission grants access to all websites without restriction. Rated High because it can access any web content, monitor all web activity, and potentially steal sensitive data across all sites.
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.
Broad Content Script Access
Risk Factor
High
This extension can inject scripts into any website.
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.
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.
Early Content Script Execution
Risk Factor
Medium
This extension runs content scripts at document_start.
alarms
Permission
Low
This permission schedules periodic tasks. Rated Low because it can only trigger events at specified times without access to sensitive data.

3 indicators in this extension

3 indicators
2 versions analysed

Every finding is verified by a security analyst. Unlock the code evidence, indicators and version history.

Unlock this report — $4.99Start 7-day trial — all reports
One-time payment · Secure checkout by Stripe

About this extension

A classic Dark theme for every website. Switch any web pages to dark mode or night shift mode in one click.

Read the publisher’s full description

Dark Reader - Dark Mode and Night Shift is a fast, lite and simple extension that automatically turns the colors of your browser content to warmer or darker. This eye-care extension enables night mode by creating dark themes for websites on the fly. Dark Reader inverts bright colors, making them high contrast and easy to read at night. What will you get from Dark Mode extension: 1) An easy way to create dark mode on every website. In addition, you can customize your dark theme visual from Brightness, Contrast, to Saturation. 2) A night shift mode which changes the website's color to warmer, making it much more pleasing to watch. You can choose to use either dark theme or night shift mode, or both. Turning on reading mode protect your eyes from reading for hours. You can manually choose the shift from color presets, to pick up the most comfortable and calm atmosphere for your eyes during the night sessions or thru the all day long. Social networks, mainstream sites, and all other new tabs will be in dark mode with Dark Theme extension. No needs to open every website settings one by one - just one add-on makes every website in dark mode. Note: Remember to disable any similar dark theme or night shift mode extension to prevent compatibility issues. We really hope that our Dark Reader will be useful to you! We look forward to your feedback and ratings! Also write your suggestions for improving the functionality.

User reviews

Extension files

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.

URLs
3

URLs

View the external URLs this extension communicates with to understand its network activity and data interactions.

No URLs found
No IP addresses found

3 indicators in this extension

3 indicators
2 versions analysed

Every finding is verified by a security analyst. Unlock the code evidence, indicators and version history.

Unlock this report — $4.99Start 7-day trial — all reports
One-time payment · Secure checkout by Stripe
Version
Size
Verdict
Findings
Permhash
1.0.10
Latest
0.19 MBNot scanned—
4f504190330a9485a22d12906577bfc0f81201fa797f77eea25c21239b88f11f
1.0.9
0.03 MBNot scanned—
4f504190330a9485a22d12906577bfc0f81201fa797f77eea25c21239b88f11f
1.0.7
0.05 MBMalicious0
4f504190330a9485a22d12906577bfc0f81201fa797f77eea25c21239b88f11f
1.0.6
0.05 MBNot scanned—
36988650f629fce9529eeed872ea13052c6d7f5d762000d31ed0a1b67d13bfaa
1.0.5
0.05 MBNot scanned—
36988650f629fce9529eeed872ea13052c6d7f5d762000d31ed0a1b67d13bfaa
1.0.4
0.05 MBNot scanned—
36988650f629fce9529eeed872ea13052c6d7f5d762000d31ed0a1b67d13bfaa
1.0.3
0.05 MBNot scanned—
36988650f629fce9529eeed872ea13052c6d7f5d762000d31ed0a1b67d13bfaa
1.0.2
0.63 MBNo malware found0
a330d9d7b023ecb7e7901d4740419de4d2abe9c753bbc68fa6fa7daf8b15e5d5
1.0.1
0.62 MBNot scanned—
a330d9d7b023ecb7e7901d4740419de4d2abe9c753bbc68fa6fa7daf8b15e5d5
1.0.8
0.06 MBNot scanned—
4f504190330a9485a22d12906577bfc0f81201fa797f77eea25c21239b88f11f
Showing 1 to 10 of 10 rows
Rows per page:

Code Diff

Compare extension code between any two versions.

0 changed files detected

No comparable text files found between these versions.

Gain full insight into all external connections.

Upgrade for full visibility.

Popular in Workflow & Planning