Skip to content

Pin @asyncapi/specs to 6.11.1 (supply chain attack in 6.11.2) - #67

Merged
joostfarla merged 1 commit into
mainfrom
pin-asyncapi-specs
Jul 14, 2026
Merged

Pin @asyncapi/specs to 6.11.1 (supply chain attack in 6.11.2)#67
joostfarla merged 1 commit into
mainfrom
pin-asyncapi-specs

Conversation

@joostfarla

Copy link
Copy Markdown
Member

Why

On 2026-07-14, @asyncapi/specs@6.11.2 and 6.11.2-alpha.1 were published with malicious
code injected via a compromised release pipeline (asyncapi/spec-json-schemas#656). The
payload executes on import (not via install scripts): it installs a persistent remote
access tool and exfiltrates credentials (npm/GitHub tokens, SSH keys, AWS credentials).

This repo depends on @asyncapi/specs transitively: @stoplight/spectral-rulesets
declares ^6.8.0 on it. Our committed lockfile already pinned the last clean release
(6.11.1) and CI installs with --frozen-lockfile, so no build here was compromised. But
while the malicious version was tagged latest, any un-frozen re-resolution (a dependency
bump touching the Spectral subtree, or a fresh resolve without the lockfile) would have
pulled it in.

What

  • Pin @asyncapi/specs to exactly 6.11.1, in both dialects so the pin holds regardless
    of which package manager runs the install:
    • pnpm.overrides, read by pnpm (our toolchain and CI)
    • top-level overrides, read by npm and Bun; ignored by pnpm, so the two coexist
  • Bump the patch version to 1.1.5 for release.

The lockfile diff is only the recorded overrides section; no other resolution changed.

Scope and current status

Overrides apply only at the root of an install, so this protects builds of this repo (and
the artifacts CI builds from it), not consumers who install the published package.
Package managers deliberately ignore overrides declared inside dependencies.

Consumers are protected by the registry cleanup instead: npm has since removed both
malicious versions entirely (6.11.2 and 6.11.2-alpha.1, including the alpha dist-tag)
and latest points to 6.11.1 again, so nothing malicious is reachable by any range, tag,
or exact version. This pin remains as defense-in-depth against a repeat compromise and
should be removed once AsyncAPI ships a verified-clean release above 6.11.1.

After merge: tag v1.1.5 to trigger the publish workflow.

@asyncapi/specs 6.11.2 and 6.11.2-alpha.1 (published 2026-07-14) contain
malware (asyncapi/spec-json-schemas#656). @stoplight/spectral-rulesets
declares ^6.8.0 on it, so any fresh resolution pulls the compromised
version while it remains tagged latest on npm. Pin the transitive
dependency to the last clean release — via pnpm.overrides for pnpm and a
top-level overrides field for npm/Bun — and bump the patch version.

Note: overrides only apply at the root of an install, so this protects
builds of this repo, not consumers of the published package; their
protection is npm removing the malicious versions.
@joostfarla
joostfarla requested a review from tomootes July 14, 2026 11:46
@joostfarla
joostfarla merged commit 8a896b9 into main Jul 14, 2026
3 checks passed
@joostfarla
joostfarla deleted the pin-asyncapi-specs branch July 14, 2026 11:47
joostfarla added a commit to developer-overheid-nl/don-checker that referenced this pull request Jul 14, 2026
* Pin @asyncapi/specs to 6.11.1 via overrides

@asyncapi/specs 6.11.2 and 6.11.2-alpha.1 (published 2026-07-14) contain
malware (asyncapi/spec-json-schemas#656). @stoplight/spectral-rulesets
declares ^6.8.0 on it, so any fresh resolution pulls the compromised
version while it remains tagged latest on npm. Pin the transitive
dependency to the last clean release — via pnpm.overrides for pnpm and a
top-level overrides field for npm/Bun — and bump the patch version.

Note: overrides only apply at the root of an install, so this protects
builds of this repo, not consumers of the published package; their
protection is npm removing the malicious versions.

* Update @geonovum/standards-checker to 1.1.5

Picks up the release that pins @asyncapi/specs to 6.11.1
(Geonovum/standards-checker#67). The re-resolved subtree keeps
@asyncapi/specs at 6.11.1 under this repo's own overrides pin.
joostfarla added a commit to Geonovum/ogc-checker that referenced this pull request Jul 14, 2026
* Pin @asyncapi/specs to 6.11.1 via overrides

@asyncapi/specs 6.11.2 and 6.11.2-alpha.1 (published 2026-07-14) contain
malware (asyncapi/spec-json-schemas#656). @stoplight/spectral-rulesets
declares ^6.8.0 on it, so any fresh resolution pulls the compromised
version while it remains tagged latest on npm. Pin the transitive
dependency to the last clean release — via pnpm.overrides for pnpm and a
top-level overrides field for npm/Bun — and bump the patch version.

Note: overrides only apply at the root of an install, so this protects
builds of this repo, not consumers of the published package; their
protection is npm removing the malicious versions.

* Update @geonovum/standards-checker to 1.1.5

Picks up the release that pins @asyncapi/specs to 6.11.1
(Geonovum/standards-checker#67). The re-resolved subtree keeps
@asyncapi/specs at 6.11.1 under this repo's own overrides pin.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants