Chrome Web Store
56Versions
3Code reviewed

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

Castorus Chrome extension security report

ID: mnhffkhmpnefgklngfmlndmkimimbphc

Supported Languages

🇫🇷French

Extension Info & Metadata

Status
Active
Version
5.25
Size
0.15 MB
Rating
3.0/5
Reviews
131
Users
60,000
Type
Extension
Updated
Oct 13, 2026
Category
Productivity Tools
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
Yes
This publisherTrack record
1extension
All still listed

Publisher Contextual Analysis

Trusted
Author
https://www.castorus.com/
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
Extensions
1
Active
1
Obsolete
0
Listed
1
Unlisted
0
Users
60,000

You reached today's free scan limit (3/3 unique extensions).

Upgrade for full visibility.

Screenshots & videos

Screenshot 1
Screenshot 2

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.

Version
Size
Verdict
Findings
Permhash
5.25
Latest
0.15 MBNot scanned—N/A
5.23
0.15 MBCaution0
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
5.22
0.15 MBCaution—
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
5.17
0.15 MBCaution—
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
5.16
0.15 MBCaution—
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
5.15
0.15 MBNo malware found0
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
5.14
0.15 MBCaution—
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
5.13
0.15 MBCaution—
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
5.12
0.15 MBNot scanned—
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
5.00
0.15 MBCaution—
95b745bfe79016fd1d2ef77748df68620ba0378ac4efba38c3aac80f8e09e9af
Showing 1 to 10 of 60 rows
Rows per page:

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.

Popular in productivity/tools