• Tech Support ⤴
  • Projects
  • Services
    • AI Development
    • UI/UX Design
    • Web Development
    • Technology Support
    • Mobile App Development
    • Banking ATM Interfaces
    • Process Automation
    • Security Auditing
    • Local AI Servers
  • odoo ERP
get in touchStart with Eva
logo
Tech Support ⤴
Projects
Services
AI DevelopmentUI/UX DesignWeb DevelopmentTechnology SupportMobile App DevelopmentBanking ATM InterfacesProcess AutomationSecurity AuditingLocal AI Servers
odoo ERP
get in touchStart with Eva
Loading…
logo

Transforming businesses through AI-powered digital innovation and creative excellence.

Quick Links

BlogAinexProjectsContact us

Contact Us

pinDubai Digital Park, A5, DTEC - Silicon Oasisemail[email protected]phone+971 55 7538087
© 2026 aratech. All rights reserved.
Privacy PolicyTerms of ServiceCookie Policy
Home / Blog / The Lock That Checks the Address: SlugFest, npm, and the AI Agent That Installs Everything

The Lock That Checks the Address: SlugFest, npm, and the AI Agent That Installs Everything

A flaw in npm trusted publishing let attackers take over more than 1,500 packages by simply claiming an abandoned repository name, and AI agents are now the ones installing the code. GitHub's fix changes what "trusted" means.

October 16, 2026 - 7 min read

Key Takeaways

ExpandCollapse
  • - SlugFest exposed a name-based trust binding in npm trusted publishing: more than 1,500 packages and 10 million downloads were reachable by claiming an abandoned GitHub repository slug.
  • - No credential theft was required. A routine repository rename or transfer was the entire precondition.
  • - GitHub's fix expires unvalidated trusted publisher configurations after 48 hours and binds trust to the repository's immutable ID.
  • - AI agents install roughly 70 packages a month on a typical endpoint and up to 350 on developer machines, resolving dependencies without checking origin.
  • - Package arrival is now a logged security event: the same name-binding weakness hit Open VSX (87 extension packs) and the VS Code Marketplace (677 packs).
Dark cyberpunk illustration of a glowing padlock shaped like a repository address being opened by a circuit-hand while neon AI agent nodes stream into a stack of package boxes

Every supply chain compromise has a moment where trust quietly changes hands. Ours happened in a system most teams never look at: the link between a GitHub repository and an npm package.

Security researchers at Bloom Security named the flaw SlugFest, and the metaphor their lead researcher Golan Myers used is the one that stuck: it is like a lock that checks the address on the door instead of who owns the house. When the owner moves out, whoever moves in gets the key.

Here is the uncomfortable part. Nobody had to steal a credential. The only precondition was a repository rename.

What npm trusted publishing was supposed to fix

In July 2025 npm shipped trusted publishing, and it was a genuinely good idea. Instead of storing long-lived npm tokens on a build server (and leaking them through logs, caches, and compromised CI runners), a GitHub Actions workflow requests a short-lived OpenID Connect token, presents it to npm, and gets a publish credential in return. Releases come with provenance attestations, so anyone can trace where a package was built.

The design removes a whole class of secret-leak incidents. It also introduced a subtle failure mode, because of a single field.

npm bound the trust relationship to the repository's human-readable address: owner/repository. GitHub's OIDC tokens also carry the repository's permanent numeric ID, which survives renames and transfers. npm, until a package's first successful publish, ignored that number entirely and matched on the name.

Names move. They are freed when a maintainer renames, transfers, or deletes a repository, and once a name is free, anyone can claim it.

How SlugFest actually works

  1. A maintainer configures trusted publishing for a package but has not yet published a version from that repository, so the binding is still name-based.
  2. The maintainer renames, transfers, or deletes the repository. The old owner/repository slug becomes available.
  3. An attacker creates a new repository at exactly that freed slug and runs a publish workflow. GitHub mints an OIDC token carrying the reclaimed name with a brand-new repository ID.
  4. npm checks the name, finds it matches the stored configuration, and hands over a publish token for a package the attacker does not own.

From there the attacker ships a malicious version under the legitimate package name. Download counts, reputation, and every dependent project come along for the ride. Bloom's registry-wide scan found more than 1,500 vulnerable packages with over 10 million cumulative downloads and more than a million downloads a month.

Bloom reported it to GitHub on June 6, 2026. It was triaged on June 9. Then the trail went cold through July, and the fix only landed after the researchers prepared to publish, more than 120 days later. GitHub and npm have since confirmed the remediation and apologized for the slow communication.

The fix is exactly the right shape: newly created trusted publisher configurations now expire after 48 hours unless they complete a first successful publish, which validates the binding to the repository's immutable identity. Changing a repository or project identity requires a fresh trust relationship and a fresh 48-hour window. npm also stopped accepting trusted publishing tokens from issue_comment events, on top of the existing pull_request_target restriction.

Then the agents showed up

If SlugFest were only about human developers running npm install, it would already be serious. It is the second half of Bloom's research that should change how you think about your build pipeline.

Bloom studied millions of AI agents across dozens of organizations. The average endpoint receives roughly 70 packages installed by AI agents every month. Developer machines get close to 350. Individual agents install between 0.3 and 1.2 packages a day; on developer machines, direct installs run two to three a day, on top of everything those packages pull in. A typical endpoint runs three agents across command-line interfaces, IDEs, extensions, and assistants. Developer machines run five or more.

Now line that up with how an agent behaves. It resolves dependencies itself, it prefers the latest version, and it rarely asks where a package came from. A malicious release published through a reclaimed slug gets installed and its postinstall hook executes with no human in the loop at all.

Bloom caught this in production, blocking one customer's AI agent as it tried to install an affected package.

The attacker's payoff is a cascade. Compromise one package. An AI agent on a popular maintainer's machine pulls it in. That endpoint becomes the launchpad for a malicious version of the maintainer's own package, and every consumer of it is exposed. That is the Shai-Hulud pattern with an accelerant.

Provenance is not a checkbox

There is a second blind spot that deserves attention, because it is the sort of thing that survives a compliance audit.

A malicious release can carry a provenance attestation generated by the attacker's own repository. Some verification systems check only that an attestation exists, not that its source matches the maintainer the package was supposed to come from. The signature is real. The signer is wrong. This is where supply chain control has to move from "was it signed" to "was it signed by the identity I trust, and is that identity still the same object I trusted last month".

Worth noting that PyPI's Warehouse already stores immutable identifiers, which is what Bloom recommended for npm. The npm GitLab trusted publishing path had the same weakness.

What this means for aratech clients

Most organizations cannot fix a registry, and they are not going to stop using npm. What they can do is stop treating package arrival as an invisible event.

  1. Audit trusted publisher bindings today. Maintainers with publishing rights should run npm trust list and confirm every configured slug still resolves to a repository they control. Any binding pointing at a renamed, transferred, or deleted repository needs to be deleted and recreated.
  2. Treat repository hygiene as security work. Deleting a trust binding whenever a repo is renamed, transferred, or deleted should be a written step in the runbook, not a good intention.
  3. Put a gate in front of the install path. A supply chain firewall that decides what enters the environment is the control that actually scales, because it does not depend on a human reviewing a lockfile diff at 6pm.
  4. Extend the inventory past packages. Audit extensions, plugins, MCP servers, skills, and applications. Bloom found the same pattern in August in Open VSX and the VS Code Marketplace: 87 extension packs in one and 677 in the other referenced extensions that did not exist, free for anyone to claim.
  5. Write the agent policy. Which agents may install software, from which registries, with what approval, and how you would know afterwards.

The pattern worth remembering

Two years of AI-related security stories keep circling the same lesson, and SlugFest states it cleanly: the binding between a human-readable name and the thing it identifies is the most important invariant in any trust system. Break it with a routine rename and the guarantee collapses, silently, with no alert and no failed login.

Your agents are now infrastructure. They install code at machine speed, into environments you are accountable for. The name on the door stopped being proof of who is inside. Verify identity, not spelling, and do it automatically.

Table of Contents

  • ↗What npm trusted publishing was supposed to fix
  • ↗How SlugFest actually works
  • ↗Then the agents showed up
  • ↗Provenance is not a checkbox
  • ↗What this means for aratech clients
  • ↗The pattern worth remembering

Related Posts

Dark cyberpunk illustration of flowing neon source code forming a cracked glowing shield

It Runs, So It Ships: The Last Secure Code Benchmark and the 25% Problem

A new benchmark published on October 14 tested six frontier coding agents on 450 tasks built from 150 real vulnerabilities. The strongest of them produced code that was both functional and secure just 25.1% of the time, while every agent cleared 73% or more on functionality alone. The gap between code that works and code that is safe has become a measurable pipeline problem.

Necolas HamwiNecolas Hamwi
October 15, 2026 - 7 min read
Dark cyberpunk illustration of a glowing terminal and a magnifying glass revealing decompiled code from a stream of binary digits

REA: The 260K-Star Repo That Made Every App Readable

REA, or Reverse Engineer Anything, crossed 262,000 GitHub stars by handing AI coding agents a full reverse engineering toolkit. It inspects binaries, Electron apps, APKs and websites, then explains how they work. The catch: it reconstructs behaviour, not source, and that quietly changes what counts as a moat.

Necolas HamwiNecolas Hamwi
October 15, 2026 - 6 min read
Dark cyberpunk hero illustration of a glowing AI agent core with circuit traces, neon purple and cyan gradients on an ultra-dark background

Meta's Muse Wonder Puts AI Agents in the Driver's Seat

Meta's Superintelligence Lab released Muse Wonder and Muse Wonder Full on October 12, 2026, its first models that match the front tier from OpenAI and Anthropic. Built around long-term memory and persistence, they power agents that remember you and act on your behalf. The launch shifts the real question from which model is smartest to what you can trust an agent to access.

Necolas HamwiNecolas Hamwi
October 14, 2026 - 7 min read