Is Bright Tab safe?

Medium risk

Bright Tab routes every new-tab search query through its own server with a persistent user ID and a server-assigned secret token.

When installed, Bright Tab contacts bright-tab.com to obtain a secret token and a user identifier, which are stored locally alongside a device-generated UUID. Every subsequent search typed in a new tab is transmitted to bright-tab.com as a URL parameter bundle that includes the search query, the UUID, the secret, and browser metadata, linking the full search history to a stable per-user profile on the vendor's server.

coryatkinson56v1.7Chrome Web Store
45Risk

AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.

Publishers can request a review.

Findings

SeverityMEDIUM
ClassUNWANTED
TypeUnexpected
CWECWE-359
SourceAI SANDBOX

Bright Tab links new-tab searches to persistent IDs

Searching from Bright Tab's new-tab page sends the terms to bright-tab.com in a GET URL that also carries a user UUID, a server token, theme code, browser version, and a stored utm_uid value, confirmed by dynamic analysis.

01EvidenceCAUSE EFFECT
What actually happens
You did this

You submit a search from Bright Tab's replacement new-tab page.

Pressing Enter or clicking the search button calls the same search path.

The extension did this

The extension sends the search to bright-tab.com with persistent identifiers attached.

The request includes the typed query, a user UUID, a server-assigned token, and utm_uid.

02EvidenceFIELD TABLE
Fields attached to the search request
FieldValueWhy it matters
Search terms
weather radarThis is the text you typed into the new-tab search box. It can include personal, work, or internal terms if you search for them there.
Persistent user ID
7a24b0de-0f43-4b64-a9c5-2f6d90c3e812This lets repeated searches from the same browser be tied together over time.
Server token
redacted server tokenThis is a server-assigned value stored by the extension and sent with later searches.
Attribution ID
3481609274This adds another stable value that can group searches or installs in the vendor's system.
Browser context
b=chrome&bv=126&themeIndex=102This records that the request came from Chrome and includes the browser version used by your browser.
03EvidenceNETWORK CAPTURE
Captured request
GEThttps://bright-tab.com/ch/search.php?q=weather%20radar&uid=7a24b0de-0f43-4b64-a9c5-2f6d90c3e812&rnd=1&themeIndex=102&b=chrome&bv=126&secret=<redacted>&source=1&utm_uid=3481609274
Navigation request to the vendor search endpoint; no request body is used for the search.
04EvidenceCODE COMPARE
The code that does this

Install identifiers are stored, read on the new-tab page, and appended to each search.

What it actually does
Install request stores the server token and utm_uidbg.js
function fireInstallPixel(userId) {
    const url = "https://" + SEARCH_DOMAIN + "/ch/install.php";
    let parameters = {
        uid: userId,
        b: "chrome",
        extension: EXTENSION,
        theme_index: EXTENSION_CODE
    };
    let formBody = [];
    for (let property in parameters) {
        let encodedKey = encodeURIComponent(property);
        let encodedValue = encodeURIComponent(parameters[property]);
        formBody.push(encodedKey + "=" + encodedValue);
    }
    formBody = formBody.join("&");
    fetch(url, {
        method: "POST", 
        body: formBody,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
          },
    }).then(res => {
        return res.json()
    }).then(data => {
        SECRET = data["ch"];
        utm_uid = data["utm_uid"];
        chrome.storage.local.set({ secret: SECRET, utm_uid: utm_uid });

        let ty_page =
        "https://" +
        SEARCH_DOMAIN +
        "/ch/ty.php?uid=" +
        utm_uid +
        "&ch=" +
        SECRET;
        chrome.tabs.create({
            url: ty_page,
        });
    }).catch(error => {
        console.log(error);
    });
}
The new-tab page reloads identifiers from extension storagelib/newTab.js
window.addEventListener("load", function () {
  chrome.storage.local.get(
    [
      "secret",
      "userId",
      "utm_uid",
      "installation_week",
      "installation_year",
      "reset_time",
    ],
    function (items) {
      const { reset_time: resetTime } = items;

      if (items.userId !== undefined) {
        USER_ID = items.userId;
      }
      if (items.secret !== undefined) {
        SECRET = items.secret;
      }
      if (items.utm_uid !== undefined) {
        utm_uid = items.utm_uid;
      }
      if (items.installation_week !== undefined) {
        installation_week = items.installation_week;
      }
      if (items.installation_year !== undefined) {
        installation_year = items.installation_year;
      }
    }
  );
});
startSearch appends the identifiers to the search navigationlib/newTab.js
function startSearch() {
    let query = $("#SearchBar").val().trim();
    if (query.length === 0) {
        return;
    }
    let queryStringObject = {
        uid: USER_ID,
        rnd: 1,
        themeIndex : 102,
        b: "chrome",
        bv: ffVersion,
        secret: SECRET,
        source: 1,
        utm_uid: utm_uid,
    };

    // if (query !== undefined && query !== null)
    //     queryStringObject["q"] = query;

    let obj = new URLSearchParams(queryStringObject).toString();
    
    window.location="https://bright-tab.com/ch/search.php?q="+query + "&" + obj;
}
Enter and click actions call the same search functionlib/newTab.js
function OpenSearchResult(searchQuery) {
    startSearch(searchQuery);
}
05EvidenceTHIRD PARTY LIST
External destination for the search data
  • bright-tab.com

    Receives the install request that returns the server token and utm_uid, then receives new-tab search requests containing q, uid, the token parameter, and utm_uid.

Data recipients

bright-tab.com
Updated 17 September 2026kkpnlekgnlpcagkhdhlellaijomcjjbe