Is 企业背景信息查询 safe?
企业背景信息查询 fetches a config from files.xiaolvji.com and applies its network rules and tab URLs during searches.
The extension downloads a configuration from files.xiaolvji.com and installs the network rewrite rules it contains across all sites around each company search, then removes them after about 20 seconds. The same configuration can supply a URL that the extension opens in an extra background tab during searches, and it drives scripted input and clicks on search tabs. The rules and URLs are not restricted to an allowlist of domains or action types.
Who publishes itTianWangLiJing - 10 other listings from the same operator, 6 of them carrying a finding
TianWangLiJing - 10 other listings from the same operator, 6 of them carrying a finding
What this publisher told the store about itself, and the other listings that told it the same thing.
Same store account
10 other listings published from this account, 20k+ users between them. 6 of them carry a finding.
Shared hosts - 1 hostname
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.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
Search add-on installs network rules supplied by a remote server on every site
Code analysis shows the extension fetches rule definitions from files.xiaolvji.com and installs them as browser-wide network rules around each search.
We did not observe the server returning rules.
- Severity
- High unwanted
- Type
- Unexpected
- CWE
- CWE-829
- Source
- Static analysis
You run a multi-engine search from the extension popup.
The extension adds server-supplied network rules that can redirect, block or alter headers on any site.
Rule list built from server config, then installed
Rule list built from server config
// ruleList = userConfigData.csl + each engine's networkRules// only id and priority are overwritten; action type and domain are not checkedfor (const rule of userConfigData.csl ?? []) { rule.id = nextId; rule.priority = 1; seenUrlFilters.add(rule.condition.urlFilter); ruleList.push(rule); nextId++;}for (const engine of userConfigData.zdy) { if (engine[5] === 'executeScript' && Array.isArray(engine[6].networkRules)) { for (const rule of engine[6].networkRules) { rule.id = nextId; rule.priority = 1; if (!seenUrlFilters.has(rule.condition.urlFilter)) { ruleList.push(rule); nextId++; } } }}Rules installed before each search
// replaces all existing dynamic rules with the server-derived listconst ids = (await getDynamicRules()).map(r => r.id);await updateDynamicRules({ addRules: ruleList, removeRuleIds: ids });runSearch(); clearRulesAt = now + 20000;- Config endpointfiles.xiaolvji.com/addonUpdateLast.php
Server the extension asks for its settings.
- userConfigData.csl[{condition:{urlFilter:...}, action:{...}}]
Rule objects installed as given.
- engine networkRulesenginesData[*][6].networkRules
Per-engine rules, read when the engine type is executeScript.
- Rule lifetimef = t + 2e4
Rules are cleared about 20 seconds after each search.
Run in the extension service worker console after a search to list the dynamic rules it installed.
- Chrome with the extension installed
chrome.declarativeNetRequest.getDynamicRules(rules => { console.log(rules.length + ' dynamic rules'); console.log(JSON.stringify(rules, null, 2));});- 1Open chrome://extensions and inspect the service worker.
- 2Run a multi-engine search from the popup.
- 3Paste the script in the console within 20 seconds and review the rules.
Static analysis finding. This behaviour was identified by reading the shipped extension code and has not yet been reproduced in a live run. The trigger conditions and the exact data sent are read from the code, not from an observed capture.
Search add-on opens a server-supplied URL in a background tab during searches
Code analysis shows a URL from the remote config (key glj) is opened in an inactive tab during multi-engine searches when the current time is inside a server-set window.
We did not observe the server returning one.
- Severity
- High unwanted
- Type
- Unexpected
- CWE
- CWE-829
- Source
- Static analysis
You run a multi-engine search while a server-set time window is active.
The extension opens a URL chosen by the server in an extra inactive tab in your window.
glj lookup and tab creation
const { glj } = await storage.get(['glj']);const now = Date.now();const list = glj?.[lang];if (Array.isArray(list) && list.length) { const entry = list[now % list.length]; if (entry?.data && now >= entry.st && now < entry.et) { chrome.tabs.create({ windowId: win.id, url: entry.data, active: false, index: tabs.length }); }}- datahttps://example.com/landing (illustrative)
The address opened in the extra tab.
- st1767225600000 (illustrative)
Start of the window, in milliseconds since 1970.
- et1769904000000 (illustrative)
End of the window; no tab opens after this time.
- Sourcefiles.xiaolvji.com/addonUpdateLast.php
Config endpoint that supplies glj.
Run in the extension service worker console to print the stored glj entries and log tabs created during a search.
- Chrome with the extension installed
chrome.storage.local.get(['glj'], r => console.log(JSON.stringify(r.glj, null, 2)));chrome.tabs.onCreated.addListener(t => console.log('tab created', t.pendingUrl || t.url, 'active=' + t.active));- 1Inspect the extension service worker.
- 2Paste the script.
- 3Run a multi-engine search from the popup and watch the console.
Static analysis finding. This behaviour was identified by reading the shipped extension code and has not yet been reproduced in a live run. The trigger conditions and the exact data sent are read from the code, not from an observed capture.
What it can do
Permissions this extension asks for, as declared in version 14.829.67.10. 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 every site you visit
<all_urls>
Act on the current tab, but only after you click the extension
activeTab
See the address and title of every tab you have open
tabs
Add items to the right-click menu
contextMenus
Run its own code inside the pages you visit
scripting
Store data in your browser
storage
Block and redirect the requests your browser makes
declarativeNetRequest
Where it sends data
Destinations our analysis observed 企业背景信息查询 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.
- files.xiaolvji.comwidely used
企业背景信息查询 sends data to files.xiaolvji.com. A widely used service: 25 other extensions we have analysed send data here.