Is iFoxTab 新标签页(GPT) safe?

Clean risk

iFoxTab 新标签页(GPT) is rated clean, though our review noted the following. iFoxTab injects a content script into every site, logging each page's URL (origin plus two segments) to a chrome.storage buffer.…

vtak7708v1.6.11Chrome Web Store
0Risk

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

Publishers can request a review.

Findings

SeverityHIGH
ClassUNWANTED
TypeUnexpected
CWECWE-359
SourceAI SANDBOX

iFoxTab records every visited URL and transmits them encrypted to flolight.cn

iFoxTab injects a content script into every site, logging each page's URL (origin plus two segments) to a chrome.storage buffer.

Each new tab it AES-encrypts the buffer with a hardcoded key and POSTs it to ai.flolight.cn; the key is public.

01EvidenceCAUSE EFFECT
What actually happens
You did this

You navigate to a website in Chrome.

The content script is injected into every page due to the <all_urls> manifest match.

The extension did this

The extension records the page URL in a local buffer.

saveUrlEvent() normalises the URL to origin + up to two path segments and pushes it into saveUrlArr, which is persisted to chrome.storage via a Pinia store.

02EvidenceSTORAGE DUMP
Unknown block kind: storage_dump

The data has shipped a block kind this view doesn't render yet. Raw payload below.

{
  "kind": "storage_dump",
  "location": "chrome.storage.local key 'pinia-urlTrackStore' → saveUrlArr",
  "contents": "",
  "meaning": "Queued URL entries from a live test: normalised URL plus visit count. The buffer persists in chrome.storage across restarts until flushed.",
  "technicalNote": "Observed during dynamic analysis: five URLs accumulated across a ~180 second session: facebook.com ×2, google.com, amazon.com, wikipedia.org."
}
03EvidenceCODE COMPARE
The code that does this

AES encryption with hardcoded key and IV (content.js:46719-46744)

What it actually does
Readable equivalent
async pushSaveUrlEvents() {
    if (this.isFlushing || this.saveUrlArr.length === 0) return;
    this.isFlushing = true;

    const { deviceId, time, signStr } = buildRequestMeta();
    const plaintext = JSON.stringify(this.saveUrlArr);

    // AES-128-CBC with hardcoded key and IV — both constants are in the source
    const encrypted = CryptoJS.AES.encrypt(
        plaintext,
        CryptoJS.enc.Utf8.parse('CMApH8hrfZ55rM2F'),  // hardcoded key
        {
            iv:      CryptoJS.enc.Utf8.parse('17v06ic1Ewd2nTOe'), // hardcoded IV
            mode:    CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        }
    );
    const ciphertext_b64 = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);

    const body = { time, deviceId: deviceId.value, sign: signStr, data: ciphertext_b64 };
    await apiClient.saveUrl({ data: body });  // POST to urlAPIBase + '/bi/analyses'
}
04EvidenceOPAQUE REVEAL
Why you can't catch this in DevTools

The POST body 'data' field is the Base64-encoded AES-128-CBC ciphertext. Because the key and IV are hardcoded in the extension source, the ciphertext can be decrypted by anyone with access to the source.

What's actually being sent
[
  {
    "action": "OPEN",
    "key": "https://www.facebook.com",
    "num": 2,
    "param1": "{\"key\":\"https://www.facebook.com\"}",
    "space": "PLUGIN",
    "widget": "URL_ANALYSIS"
  },
  {
    "action": "OPEN",
    "key": "https://www.google.com/account/about",
    "num": 1,
    "param1": "{\"key\":\"https://www.google.com/account/about\"}",
    "space": "PLUGIN",
    "widget": "URL_ANALYSIS"
  },
  {
    "action": "OPEN",
    "key": "https://www.amazon.com",
    "num": 1,
    "param1": "{\"key\":\"https://www.amazon.com\"}",
    "space": "PLUGIN",
    "widget": "URL_ANALYSIS"
  }
]
05EvidenceARTIFACT
Reproduce it yourself

Decrypts an iFoxTab /bi/analyses POST body 'data' field back to the plaintext URL array, using the hardcoded AES-128-CBC key and IV found in content.js. Run it to verify the key is real and the URL list is recoverable.

RequiresNode.js 18+ (uses built-in crypto)
ifox-url-decrypt.js · js
#!/usr/bin/env node
/**
 * iFoxTab URL Tracking — AES key verification
 * Extension: ckngkkfngaahffndbeciefgokaobnmkk (iFoxTab 新标签页(GPT))
 * Key source: content.js:46725-46726
 *
 * Usage: node ifox-url-decrypt.js [base64_ciphertext]
 * With no argument, runs a round-trip self-test with a sample payload.
 */
const crypto = require('crypto');

const KEY = Buffer.from('CMApH8hrfZ55rM2F', 'utf8');  // 16 bytes = AES-128
const IV  = Buffer.from('17v06ic1Ewd2nTOe', 'utf8');  // 16 bytes

function decrypt(b64) {
    const decipher = crypto.createDecipheriv('aes-128-cbc', KEY, IV);
    const buf = Buffer.concat([decipher.update(Buffer.from(b64, 'base64')), decipher.final()]);
    return JSON.parse(buf.toString('utf8'));
}

function encrypt(obj) {
    const cipher = crypto.createCipheriv('aes-128-cbc', KEY, IV);
    const buf = Buffer.concat([cipher.update(Buffer.from(JSON.stringify(obj), 'utf8')), cipher.final()]);
    return buf.toString('base64');
}

if (process.argv[2]) {
    console.log('Decrypted URL array:');
    console.log(JSON.stringify(decrypt(process.argv[2]), null, 2));
} else {
    // Self-test
    const sample = [
        {action:'OPEN', key:'https://www.facebook.com', num:2, space:'PLUGIN', widget:'URL_ANALYSIS'},
        {action:'OPEN', key:'https://www.amazon.com',   num:1, space:'PLUGIN', widget:'URL_ANALYSIS'}
    ];
    const ciphertext = encrypt(sample);
    const recovered  = decrypt(ciphertext);
    console.log('Key:', KEY.toString());
    console.log('IV: ', IV.toString());
    console.log('Ciphertext (b64):', ciphertext);
    console.log('Recovered URLs:');
    recovered.forEach(e => console.log(' -', e.key, '(visits:', e.num + ')'));
    console.log('\nRound-trip OK:', JSON.stringify(sample) === JSON.stringify(recovered));
}
How to run it
  1. 1
    Install Node.js 18+.
  2. 2
    Run: node ifox-url-decrypt.js (self-test with sample payload).
  3. 3
    Or supply a captured 'data' field: node ifox-url-decrypt.js '<base64_from_POST_body>'
06EvidenceTHIRD PARTY LIST
Destination receiving the encrypted URL history
  • ai.flolight.cn

    Receives POST /api/tab/bi/analyses with the encrypted URL array. Also serves sys_config (urlAPIBase, device config). Operated by the developer (flolight.cn).

Updated 17 September 2026mcbnchbebhdilehpmghenojhdmocbnkk