Is CRXLauncher safe?
Installs local .crx extension files with a permission review before installation.
This extension lets you select a .crx file from your device and review its required permissions before approving installation. The description says installations happen locally in the browser and that the extension does not upload or store extension files.
Who publishes itCRXLauncher - no other listings under this identity
CRXLauncher - no other listings under this identity
What this publisher told the store about itself, and the other listings that told it the same thing.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
Adds 'Extension: crxlauncher' header to every request to crxlauncher.com
On startup, CRXLauncher adds an 'Extension: crxlauncher' header to requests to crxlauncher.com via a declarativeNetRequest rule, confirmed live via getDynamicRules().
This lets the server distinguish CRXLauncher users, with no opt-out.
- Severity
- High unwanted
- Type
- Unexpected
- CWE
- CWE-829
- Source
- Dynamic sandbox
You navigate a top-level tab to any URL on crxlauncher.com.
Any path under http://crxlauncher.com/ or https://crxlauncher.com/ counts. Sub-resources of other pages are not affected, the rule's resourceTypes is restricted to main_frame.
The browser adds an HTTP header 'Extension: crxlauncher' to that outbound request, set by a Chrome declarativeNetRequest rule the extension registered at startup.
Because the value is the same string for every install, crxlauncher.com's web server can use this header to count or distinguish CRXLauncher-installed visitors in its access logs.
The 'Extension: crxlauncher' header is added by Chrome's declarativeNetRequest engine on the outbound request path; it is not visible in the page's own JavaScript (page-side `fetch` does not see the modification because DNR rewrites occur after the page hands the request off). It IS visible to the destination server in its access logs and to any server-side request inspector. The same header is added to every main_frame navigation to *://crxlauncher.com/* for the lifetime of the install.
- Host
- crxlauncher.com
- Accept
- text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
- Extension
- crxlauncher
- User-Agent
- Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
- Sec-Fetch-Dest
- document
- Sec-Fetch-Mode
- navigate
- Sec-Fetch-Site
- none
- Accept-Language
- en-US,en;q=0.9
The DNR rule is registered on every service worker startup if it is not already present.
Startup registration — readable form
// In bg.js (deobfuscated) ~lines 1868-1887.// Runs on every service worker boot.chrome.declarativeNetRequest.getDynamicRules().then((rules) => { // Idempotent: only register if rule id:1 isn't already there. if (rules.find((r) => r.id === 1)) return; chrome.declarativeNetRequest.updateDynamicRules({ addRules: [{ id: 1, priority: 10, action: { type: 'modifyHeaders', requestHeaders: [ { operation: 'set', header: 'Extension', value: 'crxlauncher' }, ], }, condition: { resourceTypes: ['main_frame'], urlFilter: '*://crxlauncher.com/*', }, }], });});- Rule id1
Numeric ID under which Chrome stores the rule. The startup code skips registration if a rule with this id already exists.
- Priority10
Higher than default. Wins over lower-priority rules from this or other extensions that might also modify headers on the same request.
- Action typemodifyHeaders
modifyHeaders, Chrome's API for adding/setting/removing HTTP request or response headers via DNR.
- Header nameExtension
The HTTP header that gets added to outbound requests.
- Header valuecrxlauncher
Static across all installs. Lets crxlauncher.com's logs distinguish CRXLauncher-installed visitors from others with a single header check.
- URL filter*://crxlauncher.com/*
The rule fires only for requests matching this pattern, so the marker header is added only to crxlauncher.com requests, not every site.
- Resource types['main_frame']
main_frame only, the rule fires when the URL is loaded as a top-level page, not for sub-resources like images or XHR.
- crxlauncher.com
Receives 'Extension: crxlauncher' on every main-frame request from a CRXLauncher browser, same publisher. Lets server logs separate CRXLauncher users without a script or cookie.
Reads the live dynamic-rule list from CRXLauncher's service worker and prints the rule that injects the 'Extension: crxlauncher' header. Confirms the rule is registered on your install.
- Chrome 120+
- CRXLauncher (kiilhncajadbgbmdbdcopdpnmdhlbdle) installed
- Developer mode enabled in chrome://extensions
// verify-crxlauncher-dnr-rule.js// Run inside the CRXLauncher service worker DevTools console.// Open chrome://extensions, enable Developer mode, click the// 'service worker' link for CRXLauncher to open its DevTools.(async () => { const rules = await chrome.declarativeNetRequest.getDynamicRules(); const match = rules.find((r) => r.action?.type === 'modifyHeaders' && r.action.requestHeaders?.some((h) => h.header?.toLowerCase() === 'extension' && h.value === 'crxlauncher' ) ); if (match) { console.log('[verify] CRXLauncher DNR header-injection rule is ACTIVE:'); console.log(JSON.stringify(match, null, 2)); } else { console.log('[verify] No matching DNR rule found. Current dynamic rules:'); console.log(JSON.stringify(rules, null, 2)); }})();- 1Install CRXLauncher.
- 2Go to chrome://extensions, enable Developer mode.
- 3Click 'service worker' to open DevTools, Console tab.
- 4Paste and run. Expected: id:1, priority:10, requestHeaders[0]={operation:'set', value:'crxlauncher'}.
**What we observed.** A live Chrome API call (`chrome.declarativeNetRequest.getDynamicRules()`) on the extension's service worker returned exactly the rule shown above on a test profile, with no user interaction beyond installing the extension.
**What this rule does and does not do.** It adds a single static header (`Extension: crxlauncher`) to top-level navigation requests for `*://crxlauncher.com/*`. It does NOT add this header to other sites, and it does NOT add per-user identifiers — the value is the same string for every install. The host_permissions of CRXLauncher are restricted to `*://crxlauncher.com/*` (with `http://*/*` and `https://*/*` listed as optional), and the DNR rule's URL filter is the same — so the marker header is not added to your other browsing.
**Why this is still notable.** The header is added without any UI indication, is not described in the Chrome Web Store listing's permissions disclosure (`declarativeNetRequestWithHostAccess` is listed as a permission, but the listing does not say what rule will be registered), and there is no in-extension toggle to disable it. A user who visits crxlauncher.com to read documentation or download an app cannot tell from the page or DevTools that an extension on their machine is decorating that request.
**Why we did not score this critical.** The header value is the same for every install, so it does not by itself enable per-user tracking. It enables aggregate counting of CRXLauncher-installed visitors in crxlauncher.com's server-side access logs, which is a well-understood server-side analytics signal. We classify this as 'high' rather than 'critical' because the data exposure is bounded to the extension publisher's own domain and does not involve PII.