Caution required
Suspicious in code review (v5.23)
Our reviewer found behaviour consistent with malware in version 5.23, but not enough to confirm it. Treat this extension as untrusted until it has been re-reviewed.
What our analysis found
Castorus, used by 60,000 people, is rated caution by Extension Auditor. Our code review reported 2 findings (1 high, 1 medium), led by other. It comes from a trusted publisher and was last updated in October 2026.
Key findings
- High
Other
`down()` (:100-191) obtains a crawl target URL from the extension's own server and validates it with nothing but `isValidUrl` — there is no allowlist tying it to the real-estate domains in `xpathRules` — then `smartFetch` is invoked with `stealthTier: 2` (:122-126) and deliberately routes the request through an existing non-active tab for that hostname, injected into the page's MAIN world with `credentials: 'include'` and the page's own referrer, so it carries the user's live session cookies and originates from the real page context rather than the extension. The response body is then XPath-parsed and posted to the publisher's endpoint. This turns the user's browser, IP and authenticated sessions into a server-tasked scraping proxy for pages the user never visited, which is outside the listing's stated scope ("les annonces que vous consultez") and is not covered by the CWS "Website content" disclosure, since that disclosure describes content the user browses; the `stealthTier` naming and the in-page comment about not mutating the shared tab's URL show the origin-laundering is intentional bot-detection evasion. The ungated consent wrapper compounds it: ` ` wraps only `castorus.doPost`, while `down()` calls `self.castorus.sendDataJson` directly (:179) and is fired by the `loadNewAddAlarm` alarm, so this path never passes the consent check (and ` ` is not among the `importScripts` calls in at all).
- Medium
Obfuscation
`replaceSubstring` is a hand-rolled reversed-alphabet substitution cipher, and its only use is to decode the crawl target URL that the server hands to `down()` (:104 and:115). This is runtime decryption of server-delivered tasking, not bundler or minifier output: the URL is transport-encoded for no functional reason — it is already travelling over HTTPS and every other endpoint the extension contacts is a plaintext `API_*` constant. Its effect is to keep the set of URLs the extension will fetch on the user's behalf out of reach of static analysis of the shipped package, so the crawl targets cannot be enumerated or audited from the CRX.
Analyst notes
Castorus is a genuine 2423-day-old French real-estate listing tracker and the overwhelming majority of the code matches that purpose: `webRequest` is used only for tracking (:221-239), there is no anywhere, the 161 `js_hex_obfuscation` hits are all `\x3c!--`/`--\x3e` escaped HTML comment markers in shadow-DOM CSS templates, and the 3 `js_fromcharcode` hits are an XOR wrap of the extension's own auth token (:130,136). What I cannot square with the listing is `self.castorus.down()` (:100-191): on an alarm every ~120 min (:24) the extension fetches a crawl target URL from its server, decodes it with a hand-rolled substitution cipher (:14-21), then prefers to issue that request from inside a non-active background tab's MAIN world with `credentials: 'include'` and the page's own referrer under a flag literally named `stealthTier` (:260-303), making the user's authenticated session and IP a scraping proxy for pages they never visited — whereas the store listing scopes the product to "les annonces que vous consultez". Signals disagree and I weighted them accordingly: the permhash cluster (51% malicious) is just `<all_urls>`, an extremely common set, chrome-stats' impact is an opinion on the same manifest, and the internal IoC note cites a WhatsApp-spamware write-up that is contradicted at code level (zero `whatsapp` hits in 48 files) — so none of those corroborate; the finding below stands on the code alone. Two mitigations keep this short of malicious: the *upload* is soft-gated, since `down()` passes `id_site = getIdSiteForDomain(...)` (:137) and `sendDataJson` returns null for a non-integer id_site (:203-204), and full gzipped HTML ships only when the server config `blobActived` is true (default false,:27-30;:150,171) — but both gates are set by the same server that supplies the target URL, so they bound third parties, not the publisher. Caveats: ` ` (which defines every `API_*` endpoint constant), ` ` and ` ` are listed in ` ` but absent from the bundle, so the [domain withheld] destination is inferred from host_permissions and the product rather than verified, and `handleDownPost` calls an undefined `self.castorus.downPost`; the bundled manifest's permissions and host_permissions match the live listing exactly, but its web_accessible_resources add two renderer files, so bundle and listing are not byte-identical. The page-to-extension postMessage relay (:41) has no origin check, but it only reaches `toggleFavorite`, `openAutoLoginUrl` and `refreshData` — it does not expose the privileged fetch — so that is hygiene, not a finding.
Castorus Chrome extension security report
ID: mnhffkhmpnefgklngfmlndmkimimbphc
Supported Languages
Extension Info & Metadata
Publisher Contextual Analysis
- Author
- https://www.castorus.com/
- Privacy
- Privacy Policy
- Help
- Help Center
- Country
- FR
- MX records exist
- Yes
- Domain exists
- Yes
- Is disposable
- No
- Is role-based
- Yes
- Mailbox exists
- Yes
- Address
- 9 Rue des Canadiens Soliers 14540 FR
- Website
- Visit
You reached today's free scan limit (3/3 unique extensions).
Upgrade for full visibility.
Screenshots & videos
Install growth
No Security Analysis Available
Security analysis has not been performed for this extension version yet.
About this extension
Historique des annonces immobilières
Read the publisher’s full description
Castorus est un outil de suivi communautaire d'annonces immobilières. Le principe est très simple : vous installez l'extension sur votre navigateur, et Castorus retient pour vous les éléments essentiels des annonces que vous consultez. Castorus se charge directement dans la page de l'annonce immobilière pour vous afficher toutes les modifications que cette dernière a subit depuis sa parution. Castorus vous indique l'évolution du prix de l'annonce, les éventuelles modifications (code postal, description, etc..), les autres liens où cette annonce a été vue, ce que vous pouvez obtenir pour le même prix, et même comment financer ce bien. La durée de mise en vente et l'évolution du prix vous aidera significativement pour votre négociation. Castorus fonctionne aussi sur les sites marchands, et vous indiquera l'évolution du prix des produits, et surtout où trouver ce produit sur d'autres sites marchands qui le proposent moins cher. Pour cause de RGPD, Castorus fonctionne uniquement sur des portails professionnels, pas sur les sites de petites annonces généralistes pour particuliers contenant une rubrique immobilière (comme le pap ou le boncoin)
User reviews
Extension files
Browse and explore files within this extension package
You reached today's free scan limit (3/3 unique extensions).
Upgrade for full visibility.
No network indicators were extracted from this version.
Code Diff
Compare extension code between any two versions.
0 changed files detected
No comparable text files found between these versions.
You reached today's free scan limit (3/3 unique extensions).
Upgrade for full visibility.
Related extensions
Popular in productivity/tools
- 迅雷下载支持84,000,000 users
- Browsec VPN - Free VPN for Chrome8,000,000 users
- Torrent Scanner8,000,000 users
- ChatGPT7,000,000 users
- Norton Safe Search5,000,000 users