
The chrome extension threat model has shifted - most enterprise allowlists haven't caught up
December 24, 2025. Christmas Eve.
The Trust Wallet Chrome extension pushes update v2.68 to the Chrome Web Store.
→ Google verification badge: ✓
→ Marketplace review: passed
→ Users on the extension: ~1M
48 hours later, $8.5M is gone, drained from 2,520 wallet addresses into 17 attacker-controlled wallets (Trust Wallet post-mortem; SecurityWeek, Jan 2026).
The badge was real. The review process worked exactly as designed. And it didn't matter because the attack didn't happen at submission. It happened in an update, using stolen developer credentials.
That's the structural problem with marketplace verification, and it's worth unpacking.
The attack chain: credentials first, malicious update second
Per Trust Wallet's post-mortem and Koi Security's infrastructure analysis
| Per Trust Wallet's post-mortem and Koi Security's infrastructure analysis |
|---|
| → Trust Wallet's GitHub secrets, including their Chrome Web Store API key, were stolen during the Shai-Hulud 2.0 npm supply chain campaign in November 2025. |
| → Shai-Hulud 2.0 was a self-replicating npm worm. 640+ infected packages. ~25,000 data-leaking GitHub repos at peak. |
→ Attacker C2 infrastructure was staged by December 8-16 days before the malicious update went live. The exfil domain (api-metrics-trustwallet[.]com) was pre-registered. |
| → On December 24, the attacker used the leaked CWS API key to publish v2.68 directly. Bypassed Trust Wallet's internal release controls. Passed marketplace review. Auto-updated to ~1M users. |
>The pattern: the visible event is the tail end of a 2-8 week credential lifecycle compromise. If you're only looking at the malicious version, you're missing weeks of upstream signal.
Why marketplace badges can't fix this
Verification is a point-in-time check. Once approved, updates ship silently - no equivalent re-review. Attacker playbook:
- Submit clean code → earn badge → build install base
- Wait (months, sometimes years)
- Compromise the developer account
- Push weaponized update through the trusted channel
Malwarebytes calls these "sleeper agents." The DarkSpectre cluster documented by Koi Security includes extensions that stayed clean for 5+ years before flipping. Combined ShadyPanda + GhostPoster + DarkSpectre activity: ~8.8M users across 7+ years
This isn't hypothetical. The 2024-2025 evidence base
- Cyberhaven (Dec 25, 2024): OAuth phishing → malicious v24.10.4 → cookies and session tokens for ChatGPT and Facebook for Business exfiltrated. MFA + Google Advanced Protection didn't stop it: the OAuth flow itself was legitimate. Part of a 35-extension, 2.6M-user campaign.
- FreeVPN.One: Caught screenshotting every page visited. While carrying a Featured badge.
- GitLab Threat Intel (Feb 2025): Coordinated cluster of compromised extensions abusing
declarativeNetRequestto strip CSP headers and inject content across<all_urls>. - LayerX Enterprise Browser Extension Security Report 2025: 53% of enterprise employees have extensions with high/critical permission scopes; 52% run 10+ concurrently.
Common thread: trust signals - badges, Featured placement, review counts, install size describe what was true at submission, not what's true today.
>Want to see this on your own stack? Spin.AI runs a free Browser Extension Risk Assessment that scores any Chrome / Edge extension against developer reputation, permission scope, code behavior, update patterns, and network activity. No signup, no email gate, results in under a minute per extension.
🔗 https://spin.ai/application-risk-assessment/
Useful as a baseline even if you never touch their platform, most IT teams find 3-5 high-risk extensions on day one of running this.
What this means operationally
1. Investigate the credential lifecycle, not just the event. When a malicious update appears, the meaningful question is "when did developer credentials leak?" - not "what does the bad version do?" For Trust Wallet, the answer lived in an npm worm on someone else's machine, weeks earlier.
2. Monitor permission deltas across versions. Extension asked for activeTab at install, now wants <all_urls> + webRequest three updates later? That's the signal. Most IT teams have zero visibility into this.
3. Ownership transitions = high-risk inflection points. Extensions get sold quietly. New publisher email on a two-year-old extension is worth a closer look.
4. Allowlist + continuous risk scoring beats blocklist. Blocklists chase known-bad after the fact. Trust Wallet v2.68 passed every known-bad check on December 24.
5. Baseline what's actually in your environment, before you build governance on top. Most orgs significantly underestimate their extension footprint. LayerX's data puts the median enterprise user at 10+ concurrent extensions, most never reviewed by IT. You can't monitor permission deltas or alert on ownership changes if you don't have a risk-scored inventory to begin with. This is the step everyone skips.
The marketplace-verification model assumes extension risk is static.
The attack pattern assumes it isn't.
>14 months of data is reasonably conclusive on which side is right. The harder problem is operationalizing #1 to #4 at scale, that's where extensions meet broader SaaS posture management (OAuth-grant sprawl, SaaS-to-SaaS connections, third-party app risk all live on the same problem tree).
Spin.AI's SpinSPM is built for that surface specifically - the engineering write-up on the continuous-assessment model covers the signals worth alerting on if you're building this in-house.
Curious what others are running for extension governance specifically, whether anyone's gotten useful signal out of monitoring permission diffs between versions, or if it's still mostly allowlists + periodic audits.