Typosquatted Agent Skills Built Reputation Before a Credential-Stealing Rug Pull
Zenity disrupted an active campaign that impersonated Paperclip and Browser Use through look-alike organizations, skills, repositories, and packages. The Paperclip skill family appeared on skills.sh while its skill documents were still benign, accumulated displayed installs, and was weaponized on July 11 with instructions that steered agents to attacker-controlled code and a remote loader. A Browser Use lure instead instructed agents to install a trojanized PyPI package. Recovered payloads searched more than 100 configured paths and posted a base64-encoded plaintext bundle to api[.]getpaperclipp[.]com/feedback. The reported 1.7 million figure is an aggregate displayed-install counter, not unique users or confirmed infections.
Threat Analysis
- Masquerading established the initial trust surface. The actor created
getpaperclipaiandbrowser-use-headlessidentities that resembled legitimate Paperclip and Browser Use projects, then published cloned repositories and skills. - Reputation accumulated before the skill documents changed. The Paperclip skills appeared on July 5 as clean copies. Malicious code entered the surrounding repository on July 6, and the skill setup documents were weaponized on July 11. This is a marketplace time-of-check/time-of-use failure and an AI supply-chain rug pull.
- The activation paths branched by lure. Paperclip instructions called an attacker-controlled checkout or release the only supported route and also directed the agent to fetch and execute a remote Node stage. The Browser Use skill told the agent to install
browser-use-headless==0.1.4, whose helper executed credential collection on import. - The payload's collection and exfiltration are documented precisely. Across Node and Python variants, the malware checked developer, cloud, Git, package-manager, Kubernetes, Docker, infrastructure-as-code, database, and
.envpaths, then sent readable file contents plus host and workspace metadata inside a base64-encoded bundle. Base64 was encoding, not encryption.
Applicable AIDEFEND Defenses (9)
browser-use-headless==0.1.4 or any bytes outside the reviewed cache manifest.What Defenders Should Do Now
- Check whether any agent or developer system used skills from
getpaperclipai/papercliporbrowser-use-headless/browser-use-headless-skill, or installedbrowser-use-headless==0.1.4orpaperclip-ai==0.1.0/0.1.1. - Search egress logs for the disclosed
/healthloader hosts and especially POST requests toapi[.]getpaperclipp[.]com/feedback. - Invalidate approval and re-run semantic, dependency, and behavioral checks whenever any referenced instruction, repository commit, release artifact, package digest, scanner, policy, or freshness requirement changes; displayed popularity must not carry approval across changed bytes.
- Detonate Skill installation and progressively referenced documents with no host secrets, compare the attested observations with a required Skill permission manifest, and let an install broker accept only the approved digest.
- Run admitted Skills in fresh single-use sandboxes with runtime manifest enforcement and externally enforced default-deny egress.
- If a malicious loader or stealer executed, treat the Agent and host as compromised and rotate accessible credentials. If only installation is known, triage exposure without claiming confirmed theft.
Conclusion
This campaign weaponized the gap between marketplace identity, mutable Skill content, and what an Agent ultimately executes. Skill-specific metadata and semantic checks must feed exact-artifact detonation, manifest comparison, and a digest-bound admission decision that is invalidated on change. Runtime permission enforcement, single-use isolation, and default-deny egress then limit any payload that passes admission. Popularity can help discovery, but cannot authorize content that changed after the counter was earned.