Security Alert: Malware Risk Confirmed
Cursorly
ID: ghcbgbhdohfnjnanacpdkimcocpmlpgk
Supported Languages
Extension Info & Metadata
Publisher Contextual Analysis
- Author
- Cute CursorsView Profile
- Privacy
- Privacy Policy
- Help
- Help Center
- MX records exist
- Yes
- Domain exists
- Yes
- Is disposable
- No
- Is role-based
- No
- Mailbox exists
- Yes
Custom cursor for everyday browsing. Pick a pack, resize it, and apply in one click.
Replaces default cursor with something cute. Change the usual mouse to an amazing custom cursor. It's such a cute custom cursor for Chrome. Show your individuality with bright and gorgeous mouse pointer on every webpage. Forget about the boring and simple cursor that many years appears on the display. Now you are able to change your mouse pointer to something cute ;)
The bundled manifest (MV3) declares only `storage` under permissions and moves `*://*/*` to `host_permissions`, omitting both `tabs` and `notifications` that appear in the live CWS MV2 listing. Per review policy, any mismatch between bundled and published permissions is a required finding. The most plausible explanation is a legitimate MV2→MV3 migration (Chrome MV3 no longer requires `tabs` for `chrome.tabs.create` in popups, and no notification code was found in the bundle), but this cannot be verified without the publisher's release notes.
{ "manifest_version": 3, "permissions": ["storage"], "host_permissions": ["*://*/*"], ...}// vs. published MV2 listing:// "permissions": ["storage", "tabs", "*://*/*", "notifications"]The `onMessageExternal` handler's `"set"` case passes `e.data` directly to `chrome.storage.local.set()` without any key allowlist, letting any page on cutecursors.com write arbitrary key-value pairs to the extension's local storage. While `externally_connectable` restricts callers to `*://*.cutecursors.com/*` and the stored values are used only for cursor display settings (making code-injection via storage impossible in the current codebase), a compromised or XSS-afflicted cutecursors.com page could push unexpected configuration. The `"getConfig"` case additionally returns all extension storage — including installation date, favorites, and cursor preferences — to the requesting page.
chrome.runtime.onMessageExternal.addListener((function(e, t, r) { switch (e.action) { case "set": chrome.storage.local.set(e.data), r({ action: "saveData" }); break; case "getConfig": return chrome.storage.local.get(null, (function(e) { r(e) })), !0; case "changecursor": ... }}))By severity
Versions scanned
Showing 1 of 3 scanned versions with more than one unique finding. Counts are unique findings that include each version.
| Extension Version | Code Review Findings |
|---|---|
| 2.0.0 | 2 |
Files with findings
2 distinct paths — top paths by unique finding count:
- background.js1
- manifest.json1
URLs
View the external URLs this extension communicates with to understand its network activity and data interactions.
Gain full insight into all external connections.
Upgrade for full visibility.
Gain full insight into all external connections.
Upgrade for full visibility.
Code Diff
Compare extension code between any two versions.
No comparable text files found between these versions.
Browse and explore files within this extension package
Gain full insight into all external connections.
Upgrade for full visibility.