Pin @asyncapi/specs to 6.11.1 (supply chain attack in 6.11.2) - #67
Merged
Conversation
@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.
tomootes
approved these changes
Jul 14, 2026
This was referenced Jul 14, 2026
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
On 2026-07-14,
@asyncapi/specs@6.11.2and6.11.2-alpha.1were published with maliciouscode 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/specstransitively:@stoplight/spectral-rulesetsdeclares
^6.8.0on 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. Butwhile the malicious version was tagged
latest, any un-frozen re-resolution (a dependencybump touching the Spectral subtree, or a fresh resolve without the lockfile) would have
pulled it in.
What
@asyncapi/specsto exactly6.11.1, in both dialects so the pin holds regardlessof which package manager runs the install:
pnpm.overrides, read by pnpm (our toolchain and CI)overrides, read by npm and Bun; ignored by pnpm, so the two coexist1.1.5for release.The lockfile diff is only the recorded
overridessection; 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
alphadist-tag)and
latestpoints 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.5to trigger the publish workflow.