Skip to content
Go back

The Chrome Extension Economy, and How Trust Gets Hijacked

The short version

I bought 16 Chrome extensions as part of this research to understand how extension sales work in practice, what buyers actually care about, and what a malicious owner could inherit by taking over something people already trusted.

What stood out was not just the permissions. It was how normal the whole process felt.

If you can buy an extension with an existing user base, you are not just buying code. You are buying distribution, trust, and a path to ship updates to people who already installed you.

That is why extension ownership changes matter more than most people think.

Screenshot: extension list, dashboard, or marketplace overview

Why I looked at this

I was partly inspired by John Tuckner’s blog posts from Secure Annex, especially his work looking at extension ownership changes and the risks that come with them.

At the same time, I was also waiting for one of my own Chrome extensions to pass review, which had me thinking more about the review process, the trust users place in store-published extensions, and how much of that trust survives once ownership changes hands.

Most people treat “installed from the Chrome Web Store” as a trust signal.

That is a reasonable default, right up until you remember that extensions are also assets. They get sold, transferred, abandoned, revived, and handed over to new owners with very little visibility for the people actually using them.

I wanted to understand what that looked like in practice, not just in theory.

What stood out

A few things became obvious very quickly:

A few things also stood out from the process itself:

That is the real problem. Users tend to trust an extension because of what it was, not because they know who controls it now.

Screenshot: ownership transfer, store listing, or acquisition evidence

Why permissions matter

Permissions are where this stops being an abstract trust problem and becomes a practical one.

Permission (Chrome)What it enables (in plain terms)
Host permissions (<all_urls> or specific sites)Read and modify page content on matching sites; scrape forms; inject UI; alter what users see
tabsSee open tabs, titles, and URLs; correlate activity across sites
cookiesRead or modify cookies for permitted sites; can support session hijacking depending on scope
storagePersist data and configuration locally; useful for state, targeting rules, and feature flags
scripting (MV3)Inject scripts into pages with the right host permissions
declarativeNetRequestModify or block requests; can support redirects or traffic manipulation
activeTabTemporary access to the current tab after a user gesture
clipboardRead / clipboardWriteRead or replace clipboard content
downloadsObserve or influence downloads depending on context
identityHook into Google identity flows
managementView and manage installed extensions/apps; can be abused for profiling, identifying security tools, and interfering with the user’s extension environment
alarmsSchedule background tasks; useful for persistence, delayed execution, or periodic beaconing
webNavigationObserve navigation events and track how users move across pages and sites
webRequestObserve and sometimes modify network traffic; powerful for surveillance, redirection, and traffic inspection depending on granted access and Chrome support
contextMenusAdd right-click menu entries; can be abused for social engineering or to make malicious actions look like normal extension features
notificationsDisplay browser notifications; can be abused for phishing prompts, fake alerts, or coercing user interaction
offscreenRun background/offscreen documents for tasks not visible to the user; can help hide processing or support stealthier workflows
nativeMessagingCommunicate with a native application on the host; high risk because it bridges browser and endpoint

What I bought

ExtensionInstallsPermissionsWhy it mattered
Arabic Keyboard573activeTab, storageSimple utility inheriting trust to become a high-value target.
Color Picker4storage, <all_urls>Broad site access hidden behind a common utility.
Block Analytics12declarativeNetRequest, storage, tabs, downloads, *://*/*Shows how traffic control can be bundled into a “privacy” tool.
Custom Cursor30storage, activeTab, scripting, <all_urls>Cosmetic tool with enough access to do far more than change a cursor.
Save Image As PNG79contextMenus, activeTab, downloads, <all_urls>Image tool with reach to touch page content and file workflows.
Extension Manager11management, storageRisk is not page access, but control over the entire extension environment.
LinkedIn Formatter13activeTab, scriptingTargeted example of trust inside a specific professional workflow.
View CSS990activeTab, scriptingHow normal user interaction leads to code running on a live page.

Screenshot: extension table support image, installs, or permission view

What a malicious owner could have done

The examples below are framed as impact demonstrations. No malicious updates were pushed to the store.

1. Arabic Keyboard: broad page access

What I inherited

A virtual keyboard built to help users type Arabic across websites, with broad page access.

What a malicious owner could have done

  • Injected JavaScript into pages across a wide range of sites.
  • Scraped visible form data or login fields on high-value pages.
  • Modified page content to add phishing prompts or fake re-auth flows.

Screenshot: Arabic Keyboard manifest

2. View CSS: user-triggered code injection

What I inherited

A CSS inspection extension with activeTab and scripting, designed to interact with the current page.

What a malicious owner could have done

  • Injected JavaScript into the active page after a normal click.
  • Read or modify visible page content on sensitive sites.
  • Added fake prompts or altered trusted UI inside the current tab.

Screenshot: View CSS manifest

3. Extension Manager: control over the environment

What I inherited

An extension management tool with management and storage.

What a malicious owner could have done

  • Enumerated the user’s installed extensions.
  • Identified security or crypto-related tools for profiling.
  • Interfered with protective extensions where possible.

Screenshot: Extension Manager manifest

Why this matters

The main lesson is simple: install count is not a security signal. It is a distribution signal.

Ownership change, sudden permission growth, or new external domains should be treated as meaningful events. If someone can buy the extension, they can buy the update path too.

Closing

Selling extensions is not automatically suspicious, but trust can be inherited far more easily than most users realize.

I am working to improve the extensions I bought here: https://joshallman.co.uk/WebExtensions

References


Share this post on:

Next Post
Shipping ClipShield, a Browser Extension That Blocks ClickFix and Clipboard Attacks