Is THunt - Temu™永久免费商品数据分析 & 下载工具 safe?

Medium risk

THunt automatically transmits Temu product listing data and page content to temuhunt.com on every page load.

On temu.com pages, the extension reads window.rawData (product details, pricing, store info, and recommendation data) and sends it via compressed POST requests to temuhunt.com on page load and on DOM mutations. A content script also registers a message listener on all pages with no origin check, allowing any web page to relay arbitrary fetch requests through the background script to external endpoints including taobao.com, shein.com, amazon.com, and yiwugo.com. Additionally, the extension reads all temu.com session cookies and the temuhunt.com userInfo cookie when triggered by user actions.

knhcfsgv1.7.8Chrome Web Store
45Risk
Who publishes it

knhcfsg - 12 other listings from the same operator, 1 of them carrying a finding

What this publisher told the store about itself, and the other listings that told it the same thing.

Publisher
knhcfsg

Shared hosts - 5 hostnames

Hostnames hardcoded in this extension that few other listings call. That can mean one operator behind both, and it can equally mean a small shared vendor, so it is context rather than a conclusion. Hosts that many listings call are left out: they are services, not connections.

designdb.wipo.int
Also called by 1 other listing: ShopifyHunt - Shopify™ Spy Tool & AliExpress™ Product Research
hague.wipo.int
Also called by 1 other listing: ShopifyHunt - Shopify™ Spy Tool & AliExpress™ Product Research
img.yiwugo.com
Also called by 2 other listings: 爆单符-TikTok爆单神器|全球商机自动提报|限时0元试用, 京东以图搜同款
temuhunt.com
Also called by 2 other listings, including Easy Web Data Scraper
images.branddb.wipo.int
Also called by 4 other listings, including ShopifyHunt - Shopify™ Spy Tool & AliExpress™ Product Research, 苏维小助手

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

Publishers can request a review.

Findings

Browsing temu.com sends the product listings you view to temuhunt.com

MediumunwantedCWE-200Dynamic sandbox

On temu.com, the content script reads page product data (window.rawData, goodsList) and sends it to temuhunt.com.

What actually happens

You did this

You open a product or listing page on temu.com.

The content script registered for *://*.temu.com/* runs at document_start and reads the page on DOMContentLoaded.

The extension did this

The extension sends the product listings on the page to temuhunt.com without asking.

We captured an automatic POST to temuhunt.com/api/plugin/new_goods_list_save_v2 carrying the gzip-compressed product data.

Fields we decoded from the captured payload (gunzipped goods_list array)

  • Product ID
    601099512345678

    Identifies the specific Temu product you were viewing.

  • Product title
    Wireless Bluetooth Earbuds, Noise Cancelling

    The listing title of the product on the page.

  • Price
    £12.99 GBP

    The displayed price and currency for the product on your page.

  • Listing URL
    https://www.temu.com/...-g-601099512345678.html

    The direct link to the product listing you were viewing.

  • Sales count
    10K+ sold

    The number of sales shown for the product.

  • Region / language
    region: 210, language: en

    Your Temu storefront region and language, read from window.rawData.store.localInfo and added to each product record.

Why you can't catch this in DevTools

The request body is sent as base64-encoded gzip in a compressedData field, so the product data is not readable in the raw request. Decoding it (base64 -> gunzip) reveals the product listings.

Decoded value
{"goods_list":[{"goods_id":"601099512345678","title":"Wireless Bluetooth Earbuds, Noise Cancelling","price_info":{"price":"12.99","currency":"GBP"},"seo_link_url":"https://www.temu.com/...-g-601099512345678.html","sales_num":"10K+ sold","p_rec":{"region":"210","language":"en"}}, ... <one record per product listing on the page> ]}

The code that does this

Content script reads product data, enriches it, compresses it, forwards it for POSTing

Readable version
// content.js — read page product data and send it to the backgroundconst NEW_PRODUCT = 'new_product_save_v2', NEW_GOODS_LIST = 'new_goods_list_save_v2', NEW_STORE = 'new_store_save_v2';function sendScraperRequest(endpoint, payload) {           // Uht  let req = { type:'scraper_request', response_type:'json',              url: endpoint, config:{ method:'post', body: JSON.stringify(payload), headers:{'Content-Type':'application/json'} } };  req = compress(req);                                     // zht(): gzip body -> base64 -> {compressedData, anti_content}  chrome.runtime.sendMessage(req);                         // background does fetch('https://temuhunt.com/api/plugin/'+url, config)}function enrich(list) {                                    // $ht(): inject storefront language/region into each product  const lang = window.rawData?.store?.localInfo?.language || '';  const region = window.rawData?.store?.localInfo?.region || '';  return list.map(item => { const a = item.data || item; const p = a.p_rec || {}; p.language = lang; p.region = region; a.p_rec = p; return a; });}function sendGoodsList(list){ sendScraperRequest(NEW_GOODS_LIST, { goods_list: enrich(list) }); }   // Ghtfunction onLoad(){ const list = window.rawData?.store?.goodsList; if (list?.length) sendGoodsList(list); }  // Qht, called on DOMContentLoaded

Captured request

POSThttps://temuhunt.com/api/plugin/new_goods_list_save_v2?time=<unix>&sign=<md5>

Fired automatically from the background service worker when we navigated to www.temu.com. The compressedData field decompressed to 34143 bytes of {goods_list:[...]} product listings (goods_id, title, price in GBP, seo_link_url, sales_num, p_rec{region,language}).

Headers
Content-Type
application/json
Body
{  "compressedData": "<base64 gzip, 11519 bytes on the wire>",  "anti_content": "<messagePack token>"}

Where the product data is sent

    • temuhunt.com

    Receives product listings, product detail, and store detail read from temu.com (new_goods_list_save_v2, new_product_save_v2, new_store_save_v2). Operated by the vendor, THunt.

Check if you're affected

Decodes a captured new_goods_list_save_v2 request body. Pass the JSON body (with the compressedData field) on stdin; it base64-decodes and gunzips compressedData and prints the product listings.

Requires
  • Node.js 18+
decode-temuhunt-body.js · js
// Usage: node decode-temuhunt-body.js < captured_body.json// captured_body.json is the raw POST body to temuhunt.com/api/plugin/new_goods_list_save_v2const zlib = require('zlib');let input = '';process.stdin.on('data', d => input += d);process.stdin.on('end', () => {  const { compressedData } = JSON.parse(input);  const gz = Buffer.from(compressedData, 'base64');  const json = zlib.gunzipSync(gz).toString('utf8');  const obj = JSON.parse(json);  const list = obj.goods_list || [];  console.log(`Decoded ${list.length} product listing(s):`);  for (const g of list) {    console.log(`- ${g.goods_id}  ${g.title}  ${g.price_info?.currency} ${g.price_info?.price}  ${g.seo_link_url}`);  }});
How to run it
  1. 1In DevTools > Network, find the POST to temuhunt.com/api/plugin/new_goods_list_save_v2, copy its body to captured_body.json.
  2. 2Run node decode-temuhunt-body.js < captured_body.json.
  3. 3Read the decoded listings sent.

What it can do

Permissions this extension asks for, as declared in version 1.7.8. Asking for a permission is not a finding on its own - it is what the extension can do if it chooses to.

  • Read and change your data on temu.com

    *://*.temu.com/*

  • Read and change your data on thunt.ai

    *://*.thunt.ai/*

  • See the address and title of every tab you have open

    tabs

  • Store data in your browser

    storage

Where it sends data

Destinations our analysis observed thunt-temu%E6%B0%B8%E4%B9%85%E5%85%8D%E8%B4%B9%E5%95%86%E5%93%81%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90-%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7 contacting. Sending data somewhere is not a finding on its own - an extension that syncs your settings has to talk to its own server - but it is where your data can go, and who else it goes to.

  • www.amazon.com

    thunt-temu%E6%B0%B8%E4%B9%85%E5%85%8D%E8%B4%B9%E5%95%86%E5%93%81%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90-%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7 sends data to www.amazon.com. 9 other extensions we have analyzed send data here.

  • temuhunt.com

    thunt-temu%E6%B0%B8%E4%B9%85%E5%85%8D%E8%B4%B9%E5%95%86%E5%93%81%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90-%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7 sends data to temuhunt.com. 5 other extensions we have analyzed send data here.

  • m.shein.com

    thunt-temu%E6%B0%B8%E4%B9%85%E5%85%8D%E8%B4%B9%E5%95%86%E5%93%81%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90-%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7 sends data to m.shein.com. One other extension we have analyzed sends data here.

  • img.yiwugo.com

    thunt-temu%E6%B0%B8%E4%B9%85%E5%85%8D%E8%B4%B9%E5%95%86%E5%93%81%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90-%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7 sends data to img.yiwugo.com. No other extension we have analyzed sends data here.

  • stream-upload.taobao.com

    thunt-temu%E6%B0%B8%E4%B9%85%E5%85%8D%E8%B4%B9%E5%95%86%E5%93%81%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90-%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7 sends data to stream-upload.taobao.com. No other extension we have analyzed sends data here.

Updated 2 November 2026gclgnfnkkgjammaplobpkodeojpgfdig