Skip to content

Security Independently confirmed3 publishers 2 min read Published

npm Trusted Publishing accepted a freed GitHub repo name as proof of who may publish

Bloom Security counted more than 1,500 npm packages exposed because Trusted Publishing bound publish rights to a GitHub repository name. GitHub says it has shipped fixes, and Bloom's Golan Myers said it is unknown whether anyone exploited the flaw.

The Watch · Security desk

Send a correction

Illustration accompanying npm Trusted Publishing accepted a freed GitHub repo name as proof of who may publish
Generated illustration
Bloom's exposed npm packages are widely downloaded Bloom Security's count of npm packages exposed by the Trusted Publishing flaw, and the downloads those packages have.

Key figures: Bloom Security counted more than 1,500 npm packages exposed. Those packages have more than 10 million downloads in total, averaging about 670 downloads a month per package.

Bloom's exposed npm packages are widely downloaded
FigureValueNoteClaim
npm packages Bloom counted as exposed, more than1,500 packages3
Total downloads, more than10,000,000 downloads4
Average monthly downloads per exposed package, about670 a monthAverage across the exposed packages17

What happened

  • npm stored the bound repository as an owner/repo string and did not check the permanent numeric IDs that GitHub puts in every identity token.
  • After a rename, transfer or deletion freed the old name, anyone could create a repository there, add a matching workflow file and receive a publish credential.
  • Bloom's researchers carried out the full attack against a package and repositories under their own control, with the publish coming from a repository belonging to a second organization.
  • Bloom filed its report on June 6 through GitHub's HackerOne bug bounty program. GitHub's validation followed on June 9.
  • GitHub's change was announced on October 2. According to npm's documentation, the first successful publish under a configuration ties that configuration to the repository's immutable identity.

Why it matters

  • Who has to decide decision Maintainers have a short audit: run npm trust list, confirm each repository is still one they control, re-create bindings to renamed or transferred repositories, and remove a binding before deleting its repository.
  • What it limits constraint A release published through the flaw carries a valid provenance attestation, so validity alone does not show the intended source; users must read the repository it names, and Bloom is withholding package names.
  • Who's exposed exposure Bloom estimates AI agents install about 70 packages a month on a typical endpoint and close to 350 on developer machines, usually without reviewing the package or its maintainer.

GitHub's name retirement narrows the set. When an owner account is renamed or deleted, GitHub retires the name of any repository that drew more than 100 clones in the preceding week [13]. That protects some packages. "We took this into account. Everything we considered vulnerable was pertaining to claimable slugs," said Golan Myers, security researcher at Bloom Security [14].

The reach of any one package is small. Together, the exposed packages account for over 10 million downloads in total and over a million every month [4]. That averages about 670 a month per package [17]. But a malicious version can carry a postinstall script, and npm runs it automatically on every machine that installs the update [23].

The disclosure went quiet before the fix. Bloom says GitHub's last reply came on July 8 and that six follow-ups after it, including a mediation request to HackerOne, went unanswered [22]. A GitHub spokesperson then told Help Net Security: "Unvalidated Trusted Publishing configurations now expire 48 hours after creation and can no longer authorize publishing." [8]

GitHub's statement does not say whether configurations that published before the change were bound retroactively [18]. We think the 1,500 figure cannot be read as closed until that is answered [18].

Myers said it is unknown whether anyone exploited the flaw in the wild [19]. In our view the fault is in how the binding was designed: Bloom says npm's GitLab trusted publishing integration has the same weakness [25].

What to watch

  • Whether GitHub or npm confirms that bindings which published before October 2 are now tied to immutable IDs.
  • Any report of a package published through a freed slug outside Bloom's controlled test.
  • Whether npm applies the same identity check to its GitLab trusted publishing integration, which Bloom says has the same weakness.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence62
Adoption
Not scored
Hype gap+20
Incentives55
Confidence64

Perspective Coverage

3 publishers
Builder
Builder 45%
Operator
Operator 38%
Investor
Investor 17%
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    Bloom Security researchers found that npm's Trusted Publishing feature let an attacker push new versions of someone else's package without stealing a credential.

    Reported SupportedView cited source
  2. [2]

    The attacker only needed to register a GitHub repository name the maintainer had left behind.

    Reported SupportedView cited source
  3. [3]

    Bloom counted more than 1,500 npm packages exposed this way.

    Reported SupportedView cited source
  4. [4]

    The exposed packages have more than 10 million downloads in total and more than a million a month.

    Reported SupportedView cited source
  5. [5]

    Trusted Publishing, generally available since July 2025, replaces long-lived publishing tokens; GitHub issues the workflow a signed identity token and npm exchanges it for a publish credential that expires within minutes.

    Reported SupportedView cited source
  6. [6]

    npm recorded the bound repository by its owner/repo slug; GitHub also assigns permanent numeric IDs to every repository and owner that survive renames and transfers and puts both IDs in the token, and npm did not check them.

    Reported SupportedView cited source
  7. [7]

    Once a maintainer renamed, transferred or deleted the bound repository, or the owner account was renamed or deleted, the old slug was free; anyone could create a repository at that name, add a workflow file with the matching filename, and receive a publish credential for a package they did not own.

    Reported SupportedView cited source
  8. [8]

    "Unvalidated Trusted Publishing configurations now expire 48 hours after creation and can no longer authorize publishing."

    Reported Supported Source: GitHub spokesperson, to Help Net SecurityView cited source
  9. [9]

    GitHub announced the change on October 2, and npm's documentation says a configuration's first successful publish binds it to the repository's "immutable identity."

    Reported SupportedView cited source
  10. [10]

    Maintainers with Trusted Publishing should run npm trust list and confirm each listed repository still resolves to one they control, delete and re-create any binding that points at a renamed or transferred repository, and remove the binding before deleting a repository.

    Reported SupportedView cited source
  11. [11]

    Users can verify that a package's provenance attestation names the repository the project is supposed to come from.

    Reported SupportedView cited source
  12. [12]

    GitHub, which owns npm, says it has shipped fixes.

    Reported SupportedView cited source
  13. [13]

    GitHub retires the names of repositories with more than 100 clones in the week before an owner account is renamed or deleted, which protects some packages.

    Reported SupportedView cited source
  14. [14]

    "We took this into account. Everything we considered vulnerable was pertaining to claimable slugs,"

    Reported Supported Source: Golan Myers, security researcher at Bloom SecurityView cited source
  15. [15]

    Bloom ran the attack end to end on a package and repositories its researchers controlled, publishing from a second organization's repository that had claimed the freed slug.

    Reported SupportedView cited source
  16. [16]

    A release published this way also carries a valid provenance attestation, a signed build record, naming the attacker's repository.

    Reported SupportedView cited source
  17. [17]

    Across the exposed packages, downloads average about 670 a month per package.

    Derived Supported
  18. [18]

    GitHub's statement does not say whether configurations that published before the change were bound retroactively.

    Reported SupportedView cited source
  19. [19]

    Myers said it is unknown whether anyone exploited the flaw in the wild.

    Reported Supported Source: Golan Myers, Bloom SecurityView cited source
  20. [20]

    Bloom is not publishing the affected package names, so users of npm packages cannot check against a list.

    Reported SupportedView cited source
  21. [21]

    Bloom reported the issue through GitHub's bug bounty program on HackerOne on June 6, and GitHub validated it on June 9.

    Reported ContestedView cited source
  22. [22]

    Bloom says the last reply it got from GitHub was on July 8, and that six follow-ups after that, including a mediation request to HackerOne, went unanswered.

    Reported Contested Source: Bloom SecurityView cited source
  23. [23]

    A malicious version can carry a postinstall script, code that npm runs automatically on every machine that installs the update.

    Reported ContestedView cited source
  24. [24]

    Based on telemetry from dozens of organizations, Bloom estimates that AI agents on a typical endpoint install about 70 packages a month, and close to 350 on developer machines, not counting dependencies; those installs usually happen without a review of the package or its maintainer.

    Reported Contested Source: Bloom Security estimateView cited source
  25. [25]

    Bloom says npm's GitLab trusted publishing integration has the same weakness.

    Reported Insufficient Source: Bloom SecurityView cited source

Sources

3 independent publishers whose own reporting we read for this story.

  1. dev.to

    1 article · October 13, 2026

    New stricter rules from GitHub for code packages after security investigation
  2. helpnetsecurity.com

    1 article · October 13, 2026

    npm Trusted Publishing flaw exposed 1,500+ npm packages to takeover
  3. thehackernews.com

    1 article · October 13, 2026

    GitHub Tightens npm Publishing After Flaw Left 1,500+ Packages Vulnerable to Hijacking

Topics and entities

Topics

Entities