The Install Step Nobody Reviewed
Every control you built against malicious dependencies assumes a human is present when the package lands, and the runtime that fetched this stealer had none.
The ranking algorithm did the distribution work
Package registries encode time. npm and PyPI expose publisher age, download history and dependent counts. Crude reputation signals, each one taking weeks to fake. A skill marketplace that surfaces entries by momentum inverts that logic. Faster growth buys prominence, prominence buys more growth. Trending placement substituted for reputation, which is how this typosquat reached a distribution velocity ordinary package typosquats never achieve. CSO Update reads it as a structural property of curation-free marketplaces with popularity-driven surfacing, not one registry's one-time failure. That makes a second wave the reasonable planning assumption.
What a stealer in an automation runtime actually takes
The payload class matters less than the landing site. Browser Use-class automation exists to drive a logged-in browser, so the runtime holds live authenticated sessions. A stealer sitting there harvests session cookies, not only files on disk. Session tokens survive a password change. Forcing password resets while leaving cookies valid leaves the intruder signed in.
The rest of the reachable material is the standard agent inventory. Long-lived Git personal access tokens, cloud access keys, CI/CD tokens, package-registry tokens, .env contents. Non-expiring credentials go first. They are what converts a single stealer hit into a six-month intrusion.
Scoping when there are no indicators
The reporting names no researchers, publishes no skill names and provides no hashes, so hash-based scoping is unavailable. The population under investigation has to be defined by capability instead. Inventory every agent runtime. Flag the ones that resolve skills, plugins or tools from public registries. Grep agent configs, lockfiles and logs for Paperclip and Browser Use lookalike names. Apply assume-breach to the secrets those runtimes could reach. Each of those steps is low-regret: rotation and egress control cost almost nothing if the campaign never touched the estate.
The control that breaks the chain anyway
Egress deny-by-default on agent execution sandboxes is the one measure that holds even when a malicious skill installs successfully. Block raw.githubusercontent.com, gists and unauthenticated release downloads from agent execution contexts. Route every install through an internal artifact proxy. Behind that, three behavioural detections, because behaviour is the only durable coverage available without indicators:
- Agent runtime spawning pip, npm, curl or wget.
- Unexpected child processes emerging from agent containers.
- Outbound connections from agent workloads to raw content CDNs.
Process ancestry and egress telemetry catch the next variant too. An indicator list, whenever one appears, catches only this one.
Dependency review, PR approval and two-person production rules were all still in force. The agent did the install, and not one of those gates sat in its path.
The structural read
Typosquatting has migrated out of package namespaces and into AI service and skill namespaces. Brand-protection monitoring scoped to an npm organisation and PyPI project names now has to cover agent registries as well. Internally the answer is a curated skill catalog with signed, provenance-verified entries, plus a block on direct agent access to public registries. Autonomous dependency installation is the thing being removed. Pinned lockfiles with hash verification, internal mirror only, no network during install steps, human approval for any new dependency an agent proposes.
What to do
Inventory every AI agent runtime by end of week and flag which ones resolve skills, plugins or tools from public registries, then grep agent configs, lockfiles and logs for Paperclip and Browser Use lookalike names.
Rotate every secret an exposed agent runtime could reach — long-lived Git PATs, cloud access keys, CI/CD and registry tokens, .env contents — and invalidate the browser sessions held by automation agents.
Enforce egress deny-by-default on all agent execution sandboxes this sprint, blocking raw content CDNs and unauthenticated release downloads, and deploy the three process-ancestry detections behind it.