On July 14, 2026 at 07:10 UTC, four official @asyncapi npm packages were
trojanized with the Miasma RAT — and the attacker never once touched an npm token.
Instead, they opened 37 pull requests to the AsyncAPI generator repository, exploited a
single misconfigured pull_request_target GitHub Actions workflow to steal a
privileged Personal Access Token, pushed malicious code to the next branch,
and let AsyncAPI’s own CI/CD pipeline publish the packages to npm via OIDC. Five
malicious versions reached 2.25 million weekly downloads before being unpublished.
GitHub deployed the fix for this exact vulnerability class — actions/checkout v7
— today, July 16, 2026.
Le 14 juillet 2026 à 07h10 UTC, quatre packages npm officiels @asyncapi
ont été troyanisés avec le Miasma RAT — et l’attaquant n’a
jamais touché un token npm. Il a ouvert 37 pull requests sur le dépôt
générateur AsyncAPI, exploité un seul workflow GitHub Actions
pull_request_target mal configuré pour voler un Personal Access Token
privilégié, poussé du code malveillant sur la branche next,
et laissé le pipeline CI/CD d’AsyncAPI lui-même publier les packages npm
via OIDC. Cinq versions malveillantes ont atteint 2,25 millions de téléchargements
hebdomadaires avant d’être dépubliées. GitHub a déployé
le correctif pour cette classe de vulnérabilité — actions/checkout v7
— aujourd’hui, 16 juillet 2026.
What Is AsyncAPI and Why Does It Matter?
Qu’est-ce qu’AsyncAPI et pourquoi est-ce important ?
AsyncAPI is the open standard for defining event-driven APIs — the
“OpenAPI for message-driven architectures.” Its code-generation toolchain
(@asyncapi/generator) is embedded in thousands of microservices, API gateways,
and enterprise integration pipelines. The four packages compromised in this attack are
foundational to that ecosystem:
AsyncAPI est le standard ouvert pour définir les APIs événementielles
— l’“OpenAPI pour les architectures orientées messages.” Sa
chaîne de génération de code (@asyncapi/generator) est
intégrée dans des milliers de microservices, passerelles API et pipelines
d’intégration d’entreprise. Les quatre packages compromis dans cette
attaque sont fondamentaux pour cet écosystème :
Package Malicious version Weekly downloads
@asyncapi/generator 3.3.1 ~900 000
@asyncapi/generator-helpers 1.1.1 ~600 000
@asyncapi/generator-components 0.7.1 ~500 000
@asyncapi/specs 6.11.2 / 6.11.2-alpha.1 ~250 000
─────────────────────────────────────────────────────────────────
Total 5 versions ~2 250 000
Compromised @asyncapi packages — July 14, 2026 (Source: StepSecurity, Socket.dev, SafeDep.io)
Packages @asyncapi compromis — 14 juillet 2026 (Source : StepSecurity, Socket.dev, SafeDep.io)
The Attack: How a “Pwn Request” Published Without an npm Token
L’Attaque : Comment un “Pwn Request” a Publié sans Token npm
A “pwn request” (also called a pull_request_target exploitation) is a GitHub Actions attack that turns a repository’s own CI/CD pipeline into a weapon. Here is exactly how it played out on July 14, 2026, according to technical reports from Chainguard, StepSecurity, Wiz, and Datadog Security Labs:
Un “pwn request” (aussi appelé exploitation de pull_request_target) est une attaque GitHub Actions qui transforme le propre pipeline CI/CD d’un dépôt en arme. Voici exactement comment cela s’est déroulé le 14 juillet 2026, selon les rapports techniques de Chainguard, StepSecurity, Wiz et Datadog Security Labs :
Reconnaissance & Noise Generation
Reconnaissance & Génération de Bruit
The attacker opened 37 pull requests to the
asyncapi/generator repository. Almost all added a fake charity
donation page — a distraction to drown out the single malicious PR in
GitHub notification noise.
L’attaquant a ouvert 37 pull requests sur le dépôt
asyncapi/generator. Presque toutes ajoutaient une fausse page de dons
caritatifs — une distraction pour noyer la seule PR malveillante dans le bruit
des notifications GitHub.
The Vulnerability: Unsafe pull_request_target
La Vulnérabilité : pull_request_target non sécurisé
The asyncapi/generator repository contained a workflow triggered by
pull_request_target that then checked out the pull request’s
code with actions/checkout. This is the critical flaw: pull_request_target
runs in the context of the base repository, with full access to secrets and
OIDC token minting. When the workflow fetches and executes attacker-controlled code
from the fork, those secrets become accessible.
Le dépôt asyncapi/generator contenait un workflow
déclenché par pull_request_target qui checkoutait ensuite
le code de la pull request avec actions/checkout. C’est la faille
critique : pull_request_target s’exécute dans le
contexte du dépôt de base, avec un accès complet aux
secrets et au minting de tokens OIDC. Quand le workflow récupère et
exécute du code contrôlé par l’attaquant depuis le fork,
ces secrets deviennent accessibles.
# The dangerous pattern — triggers with base repo privileges
# but executes PR (attacker-controlled) code
on:
pull_request_target: # <-- runs with BASE REPO secrets
types: [opened, synchronize]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
# <--- DANGER: fetches ATTACKER code into a privileged context
The vulnerable workflow pattern — PAT and OIDC tokens are accessible to attacker code
Le pattern de workflow vulnérable — le PAT et les tokens OIDC sont accessibles au code de l’attaquant
Token Theft & Branch Push
Vol du Token & Push sur la Branche
The malicious PR triggered the vulnerable workflow, which exposed a highly privileged
Personal Access Token. The attacker used this token to push backdoored commits directly
to the repository’s next branch under a placeholder git identity.
No npm token was stolen — the attacker never needed one.
La PR malveillante a déclenché le workflow vulnérable, qui a
exposé un Personal Access Token hautement privilégié.
L’attaquant a utilisé ce token pour pousser des commits backdoorés
directement sur la branche next du dépôt sous une identité
git factice. Aucun token npm n’a été volé —
l’attaquant n’en avait jamais besoin.
Legitimate CI/CD Does the Publishing
Le CI/CD Légitime Fait la Publication
The branch push triggered AsyncAPI’s real release workflow. That workflow used npm’s GitHub OIDC trusted publisher integration to authenticate to npm and publish the packages. The result: five malicious package versions carrying valid npm provenance attestations — published by AsyncAPI’s own infrastructure, signed by AsyncAPI’s own identity.
Le push sur la branche a déclenché le vrai workflow de release d’AsyncAPI. Ce workflow a utilisé l’intégration npm trusted publisher via OIDC GitHub pour s’authentifier à npm et publier les packages. Résultat : cinq versions de packages malveillants avec des attestations de provenance npm valides — publiés par l’infrastructure même d’AsyncAPI, signés par l’identité même d’AsyncAPI.
The Payload: Miasma RAT Returns in RAT-First Mode
Le Payload : Le Miasma RAT Revient en Mode “RAT-First”
The payload is a new iteration of the Miasma malware framework — the same threat
actor responsible for the Miasma Waves 1–3 attacks in June 2026 (Red Hat
@redhat-cloud-services, @vapi-ai, and 73 Microsoft Azure GitHub
repos). This time, automatic worm propagation is disabled, but the RAT capabilities are
fully active. Security researchers from JFrog noted this as “Miasma Worm Returns as
RAT-First npm Attack With Automatic Propagation Disabled.”
Le payload est une nouvelle itération du framework malveillant Miasma — le
même acteur de menace responsable des attaques Miasma Waves 1 à 3 en juin 2026
(Red Hat @redhat-cloud-services, @vapi-ai, et 73 dépôts
GitHub Microsoft Azure). Cette fois, la propagation automatique en ver est désactivée,
mais les capacités RAT sont pleinement actives. Les chercheurs JFrog l’ont
noté comme “Miasma Worm Returns as RAT-First npm Attack With Automatic Propagation
Disabled.”
Three-Stage Infection Chain
Chaîne d’Infection en Trois Étapes
Unlike previous supply chain attacks that relied on install hooks, the malicious code in
the AsyncAPI packages fires when the infected module is loaded by Node.js
— not at install time. This entirely bypasses npm v12’s install
script blocking.
Contrairement aux précédentes attaques supply chain qui s’appuyaient
sur des hooks d’installation, le code malveillant dans les packages AsyncAPI se
déclenche quand le module infecté est chargé par
Node.js — pas au moment de l’installation. Cela contourne entièrement
le blocage des scripts d’installation de npm v12.
Stage 1 — Dropper (embedded in package, fires on require/import)
↓ Obfuscated JavaScript launcher
↓ Spawns a detached background node process
Stage 2 — IPFS Loader
↓ Downloads encrypted second-stage payload from IPFS
↓ Decrypts and executes in memory
Stage 3 — Miasma RAT (92,000-line modular framework)
├── C2 channels: HTTP + Nostr relays + Ethereum smart contracts + libp2p mesh
├── Persistence: systemd (Linux) / launchd (macOS) / Windows Registry
├── Credential theft: browsers, SSH, npm/GitHub tokens, AWS, macOS Keychain,
│ crypto wallets
├── AI tool poisoning: .claude/settings.json, .cursor/settings.json, .gemini/
├── LAN lateral movement
└── Optional: worm propagation to npm, PyPI, Cargo (disabled this iteration)
Miasma RAT infection chain — July 2026 iteration (Source: THN, GBHackers, JFrog Security Research)
Chaîne d’infection Miasma RAT — itération juillet 2026 (Source : THN, GBHackers, JFrog Security Research)
The use of IPFS for stage-2 delivery is significant: the payload URL is immutable and censorship-resistant, meaning registry operators cannot take down the C2 infrastructure simply by unpublishing the npm package. Even after the malicious versions were removed, any developer who had already installed the packages remained infected.
L’utilisation d’IPFS pour la livraison du stage 2 est significative : l’URL du payload est immuable et résistante à la censure, ce qui signifie que les opérateurs du registre ne peuvent pas démonter l’infrastructure C2 simplement en dépubliant le package npm. Même après la suppression des versions malveillantes, tout développeur ayant déjà installé les packages restait infecté.
The “Pwn Request” Pattern: Third Major npm Attack in 14 Months
Le Pattern “Pwn Request” : Troisième Grande Attaque npm en 14 Mois
The pull_request_target vulnerability is not new — but attackers keep
finding open-source projects that haven’t patched it. This is the third major npm
supply chain attack exploiting this vector in 14 months:
La vulnérabilité pull_request_target n’est pas nouvelle
— mais les attaquants continuent de trouver des projets open source qui ne l’ont
pas corrigée. C’est la troisième grande attaque supply chain npm
exploitant ce vecteur en 14 mois :
| Date | Date | Target | Cible | Impact | Impact |
|---|---|---|---|---|---|
| March 2025 | Mars 2025 | tj-actions/changed-files | tj-actions/changed-files | Secrets leaked across 23,000+ repos | Secrets exfiltrés de 23 000+ dépôts |
| May 2026 | Mai 2026 | TanStack (Mini Shai-Hulud) | TanStack (Mini Shai-Hulud) | 84 packages, SLSA L3 provenance forged, CVE-2026-45321 CVSS 9.6 | 84 packages, provenance SLSA L3 forgée, CVE-2026-45321 CVSS 9.6 |
| July 14, 2026 | 14 juillet 2026 | @asyncapi (Miasma RAT) | @asyncapi (Miasma RAT) | 4 packages, 5 versions, 2.25M weekly downloads | 4 packages, 5 versions, 2,25M téléchargements/semaine |
The pattern is always the same: a public repository accepts external pull requests, a
pull_request_target workflow checks out the PR code, secrets leak, the
attacker publishes malicious packages using the project’s own identity. GitHub’s
OIDC trusted publisher feature — designed to improve security by eliminating long-lived
npm tokens — ironically becomes the final delivery mechanism.
Le schéma est toujours le même : un dépôt public accepte des pull
requests externes, un workflow pull_request_target checkote le code de la PR,
les secrets fuient, l’attaquant publie des packages malveillants en utilisant
l’identité même du projet. La fonctionnalité OIDC trusted publisher
de GitHub — conçue pour améliorer la sécurité en
éliminant les tokens npm de longue durée — devient ironiquement le
mécanisme de livraison finale.
GitHub’s Fix Deployed Today: actions/checkout v7
Le Correctif GitHub Déployé Aujourd’hui : actions/checkout v7
GitHub announced safer pull_request_target defaults for
actions/checkout on June 18, 2026. On July 16, 2026 (today),
GitHub backported this protection to all currently supported major versions
(v4, v5, v6, v7). Any workflow pinned to a floating major tag like
actions/checkout@v4 will automatically pick up the change.
GitHub a annoncé des défauts plus sûrs pour pull_request_target
dans actions/checkout le 18 juin 2026. Le 16 juillet 2026 (aujourd’hui),
GitHub a rétro-porté cette protection à toutes les versions majeures
actuellement supportées (v4, v5, v6, v7). Tout workflow pinned à un
tag majeur flottant comme actions/checkout@v4 récupèrera
automatiquement le changement.
# BEFORE (v4 before July 16, 2026) — VULNERABLE
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }} # fetches attacker code
# AFTER (v4+ from July 16, 2026) — BLOCKED by default
# This will now FAIL with an error if used in pull_request_target context
# To opt out of the protection (for trusted contributors only):
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
allow-unsafe-pr-checkout: true # explicit opt-in required
The new behavior: checkout refuses to fetch fork code in pull_request_target by default (Source: GitHub Changelog, June 18 / July 16, 2026)
Le nouveau comportement : checkout refuse de récupérer le code du fork dans pull_request_target par défaut (Source : GitHub Changelog, 18 juin / 16 juillet 2026)
Important limitation: Workflows pinned to a specific SHA, minor, or patch version are NOT automatically protected and must upgrade manually. Additionally, pwn requests introduced via run blocks using git or gh CLI to pull untrusted refs are not covered by this change.
Limitation importante : Les workflows pinnés à un SHA, une version mineure ou de patch spécifique ne sont PAS automatiquement protégés et doivent être mis à jour manuellement. De plus, les pwn requests introduits via des blocs run utilisant git ou gh CLI pour pull des refs non-fiables ne sont pas couverts par ce changement.
Defense Checklist: Are Your Workflows Safe?
Checklist de Défense : Vos Workflows Sont-ils Sécurisés ?
Whether you are an open-source maintainer or a developer using @asyncapi
packages, here is what to do right now:
Que vous soyez un mainteneur open source ou un développeur utilisant les packages
@asyncapi, voici ce qu’il faut faire maintenant :
For Open-Source Maintainers
Pour les Mainteneurs Open Source
# 1. Find all pull_request_target workflows in your repo
grep -r "pull_request_target" .github/workflows/
# 2. For each hit, check if it also does a checkout with a PR ref
grep -A 20 "pull_request_target" .github/workflows/*.yml | grep -E "head.sha|pull_request.head"
# 3. Upgrade actions/checkout to v7 (or ensure floating @v4 picks up the fix)
# In each workflow file, update:
# uses: actions/checkout@v4
# is fine if pinned to floating major tag (gets the fix automatically)
# If pinned to SHA:
# uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
# upgrade to the latest v4 SHA
# 4. Audit what your release workflows can publish
# - Review npm trusted publisher scopes
# - Ensure publish workflows only trigger on specific protected branches/tags
# - Use environment protection rules with required reviewers for npm publish
Open-Source Maintainer Security Checklist
Checklist Sécurité Mainteneur Open Source
-
Audit all
pull_request_targetworkflows — never check out PR code in this context without explicitallow-unsafe-pr-checkout: trueAuditer tous les workflowspull_request_target— ne jamais checker out le code de PR dans ce contexte sansallow-unsafe-pr-checkout: trueexplicite -
Ensure
actions/checkoutuses a floating major tag (@v4not@v4.1.2) to receive automatic security updates, or pin to the latest SHA S’assurer queactions/checkoututilise un tag majeur flottant (@v4pas@v4.1.2) pour recevoir les mises à jour de sécurité automatiques, ou pinner au SHA le plus récent - Scope npm trusted publisher OIDC to specific protected branches only — never allow publishing from PR branches Limiter le scope OIDC du npm trusted publisher aux branches protégées uniquement — ne jamais autoriser la publication depuis des branches de PR
- Add environment protection rules with required reviewers on any job that publishes to npm Ajouter des règles de protection d’environnement avec des reviewers requis sur tout job qui publie sur npm
-
Review all GITHUB_TOKEN and PAT permissions in workflows — use
permissions: read-allat the workflow level and explicitly grant only what is needed Vérifier toutes les permissions GITHUB_TOKEN et PAT dans les workflows — utiliserpermissions: read-allau niveau du workflow et accorder explicitement uniquement ce qui est nécessaire - Enable StepSecurity Harden-Runner in all GitHub Actions jobs to detect outbound network calls and flag unauthorized registry publishes Activer StepSecurity Harden-Runner dans tous les jobs GitHub Actions pour détecter les appels réseau sortants et signaler les publications de registre non autorisées
For Developers Using @asyncapi Packages
Pour les Développeurs Utilisant les Packages @asyncapi
# Check if you installed the malicious versions
npm ls @asyncapi/generator @asyncapi/generator-helpers @asyncapi/generator-components @asyncapi/specs
# Malicious versions to check:
# @asyncapi/generator@3.3.1
# @asyncapi/generator-helpers@1.1.1
# @asyncapi/generator-components@0.7.1
# @asyncapi/specs@6.11.2
# @asyncapi/specs@6.11.2-alpha.1
# If any match — update immediately:
npm update @asyncapi/generator @asyncapi/generator-helpers \
@asyncapi/generator-components @asyncapi/specs
# Regenerate your lockfile to ensure clean state:
rm package-lock.json && npm install
# Then rotate ALL credentials on affected developer machines:
# - npm tokens: npm token revoke $(npm token list)
# - GitHub PATs: github.com/settings/tokens
# - AWS: aws iam list-access-keys --user-name <user>
# - SSH keys: check ~/.ssh/ for unexpected keys
How to Detect Miasma RAT on Compromised Systems
Comment Détecter le Miasma RAT sur les Systèmes Compromis
If you installed the malicious versions between July 14 and July 15, 2026, assume your developer machine is compromised. Miasma RAT establishes persistence via multiple mechanisms — check for these indicators of compromise (IOCs):
Si vous avez installé les versions malveillantes entre le 14 et le 15 juillet 2026, supposez que votre machine de développement est compromise. Miasma RAT établit une persistance via plusieurs mécanismes — vérifiez ces indicateurs de compromission (IOC) :
# Linux: check for suspicious systemd services
systemctl list-units --type=service | grep -v "\.service$" | head -20
systemctl list-units --type=service | grep -E "node|npm|async"
# Linux: check crontabs
crontab -l
ls -la /etc/cron.d/ /etc/cron.daily/
# macOS: check launchd agents
launchctl list | grep -E "node|npm|async|com\."
ls ~/Library/LaunchAgents/
# Windows: check registry autorun
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run
# All platforms: check for unexpected background node processes
ps aux | grep -E "node|npm" | grep -v "grep"
# Check for unusual network connections (Nostr relays, IPFS, Ethereum nodes)
# Linux/macOS:
lsof -i -n | grep -E "ESTABLISHED|LISTEN" | grep node
Miasma also targets AI tool configuration files, poisoning them to execute commands on every session start. Check these files for unexpected content:
Miasma cible également les fichiers de configuration des outils IA, les empoisonnant pour exécuter des commandes à chaque démarrage de session. Vérifiez ces fichiers pour du contenu inattendu :
# Check AI tool configs for injected commands
cat ~/.claude/settings.json | python3 -m json.tool
cat ~/.cursor/settings.json 2>/dev/null
ls -la ~/.gemini/ 2>/dev/null
# Look for unexpected "hooks", "scripts", or "SessionStart" entries
grep -r "SessionStart\|preToolUse\|postToolUse\|bash\|curl\|wget" \
~/.claude/ ~/.cursor/ 2>/dev/null
Frequently Asked Questions
Questions fréquentes
Am I at risk if I use @asyncapi packages in my project?
Suis-je à risque si j’utilise des packages @asyncapi dans mon projet ?
You are at risk only if you installed (or your CI/CD installed) one of the five specific malicious versions between July 14 and July 15, 2026: @asyncapi/generator@3.3.1, generator-helpers@1.1.1, generator-components@0.7.1, or specs@6.11.2 or 6.11.2-alpha.1. All five have been unpublished. If your package-lock.json was committed before July 14, you are not affected. Run npm ls @asyncapi/generator to verify your installed version.
Vous n’êtes à risque que si vous avez installé (ou votre CI/CD a installé) l’une des cinq versions malveillantes spécifiques entre le 14 et le 15 juillet 2026 : @asyncapi/generator@3.3.1, generator-helpers@1.1.1, generator-components@0.7.1, ou specs@6.11.2 ou 6.11.2-alpha.1. Les cinq ont été dépubliées. Si votre package-lock.json a été commité avant le 14 juillet, vous n’êtes pas affecté. Exécutez npm ls @asyncapi/generator pour vérifier votre version installée.
Does npm audit detect this attack?
npm audit détecte-t-il cette attaque ?
No. npm audit checks for CVEs in the npm advisory database, but malicious packages are removed before a CVE is assigned. By the time you run npm audit, the packages have been unpublished and the advisory may not yet exist. Socket.dev and SafeDep runtime monitoring are the tools that detected this attack within hours of publication. Continuous lockfile monitoring (checking for unexpected version changes since your last deploy) is more effective than point-in-time audit commands.
Non. npm audit vérifie les CVE dans la base de données des advisories npm, mais les packages malveillants sont supprimés avant qu’un CVE soit assigné. Au moment où vous exécutez npm audit, les packages ont été dépubliés et l’advisory peut ne pas encore exister. Socket.dev et le monitoring runtime SafeDep sont les outils qui ont détecté cette attaque dans les heures suivant la publication. Le monitoring continu des lockfiles (vérification des changements de version inattendus depuis votre dernier déploiement) est plus efficace que les commandes d’audit ponctuelles.
Does the Miasma RAT evade antivirus detection?
Le Miasma RAT échappe-t-il à la détection antivirus ?
The first-stage dropper is a small, heavily obfuscated JavaScript file that evades most static analysis tools. The second and third-stage payloads are downloaded from IPFS after installation, meaning they are not present in the npm package that gets scanned. The C2 infrastructure uses Nostr relays and Ethereum smart contracts — network connections that are difficult to block without breaking legitimate applications. Traditional AV is largely ineffective; behavioral monitoring (StepSecurity Harden-Runner, runtime process monitoring, outbound network allowlisting) is necessary.
Le dropper de première étape est un petit fichier JavaScript fortement obfusqué qui échappe à la plupart des outils d’analyse statique. Les payloads des deuxième et troisième étapes sont téléchargés depuis IPFS après l’installation, ce qui signifie qu’ils ne sont pas présents dans le package npm analysé. L’infrastructure C2 utilise des relais Nostr et des smart contracts Ethereum — des connexions réseau difficiles à bloquer sans casser des applications légitimes. L’AV traditionnel est largement inefficace ; la surveillance comportementale (StepSecurity Harden-Runner, monitoring de processus runtime, allowlisting réseau sortant) est nécessaire.
Is this the same “Miasma” as the Red Hat and Microsoft Azure attacks in June 2026?
Est-ce le même “Miasma” que les attaques Red Hat et Microsoft Azure de juin 2026 ?
Yes, it is the same threat actor and malware framework. JFrog researchers explicitly tracked this as “Miasma Worm Returns as RAT-First npm Attack.” The key difference from the June 2026 waves is that worm propagation (automatic infection of developer dependencies) is disabled in this iteration — the attacker chose to operate stealthily as a RAT rather than as a self-spreading worm. The 92,000-line modular framework, IPFS C2, and Nostr communication channels are consistent across all Miasma variants.
Oui, il s’agit du même acteur de menace et du même framework malveillant. Les chercheurs JFrog l’ont explicitement tracé comme “Miasma Worm Returns as RAT-First npm Attack.” La différence clé avec les vagues de juin 2026 est que la propagation en ver (infection automatique des dépendances des développeurs) est désactivée dans cette itération — l’attaquant a choisi d’opérer discrètement comme un RAT plutôt que comme un ver auto-propagant. Le framework modulaire de 92 000 lignes, le C2 IPFS et les canaux de communication Nostr sont cohérents entre toutes les variantes Miasma.
Does pinning my package-lock.json protect against this?
Le pinning de mon package-lock.json me protège-t-il de cela ?
Partially. If your lockfile was committed before July 14, 2026, and your CI/CD runs npm ci (which uses the lockfile exactly), you are protected — the malicious versions won’t be installed. However, if a developer or automated process ran npm install or npm update after July 14, the lockfile may have been updated to include the malicious versions. The safest approach is to use npm ci in all CI/CD pipelines, review lockfile diffs in every PR, and never run npm update in production environments.
Partiellement. Si votre lockfile a été commité avant le 14 juillet 2026, et que votre CI/CD exécute npm ci (qui utilise exactement le lockfile), vous êtes protégé — les versions malveillantes ne seront pas installées. Cependant, si un développeur ou un processus automatisé a exécuté npm install ou npm update après le 14 juillet, le lockfile peut avoir été mis à jour pour inclure les versions malveillantes. L’approche la plus sûre est d’utiliser npm ci dans tous les pipelines CI/CD, de revoir les diffs de lockfile dans chaque PR, et de ne jamais exécuter npm update dans les environnements de production.
How do I protect my own open-source project from pwn requests?
Comment protéger mon propre projet open source contre les pwn requests ?
The most important change is to upgrade to actions/checkout v7 (or ensure you use a floating major tag like @v4, which now includes the fix). Never check out untrusted PR code in a pull_request_target context. Separate your CI jobs : run tests on the untrusted PR code using pull_request (no secrets), and only run privileged jobs (deployment, npm publish) on protected branches via push triggers. Use environment protection rules with required reviewers for any job that publishes to a package registry.
Le changement le plus important est de passer à actions/checkout v7 (ou de s’assurer d’utiliser un tag majeur flottant comme @v4, qui inclut maintenant le correctif). Ne jamais checker out du code de PR non-fiable dans un contexte pull_request_target. Séparez vos jobs CI : exécutez les tests sur le code de PR non-fiable en utilisant pull_request (sans secrets), et exécutez uniquement les jobs privilégiés (déploiement, publication npm) sur des branches protégées via des déclencheurs push. Utilisez des règles de protection d’environnement avec des reviewers requis pour tout job qui publie vers un registre de packages.
Monitor Your npm Dependencies — Including Lockfile Changes
Surveillez Vos Dépendances npm — Y Compris les Changements de Lockfile
The AsyncAPI attack shows why npm audit alone is not enough: malicious
packages are unpublished before a CVE is assigned. CVE OptiBot scans your lockfiles
daily against OSV.dev, GHSA, and NVD — and alerts you the moment a dependency
you already have installed is flagged, even if it was clean at install time.
L’attaque AsyncAPI montre pourquoi npm audit seul ne suffit pas :
les packages malveillants sont dépubliés avant qu’un CVE soit
assigné. CVE OptiBot scanne vos lockfiles chaque jour contre OSV.dev, GHSA et NVD
— et vous alerte dès qu’une dépendance que vous avez déjà
installée est signalée, même si elle était propre au moment de
l’installation.
Related Articles
Articles connexes
- State of npm Supply Chain Security — H1 2026 Retrospective → Rétrospective H1 2026 de la Supply Chain npm →
- GitHub Actions Security Hardening in 2026 → Durcissement de la Sécurité GitHub Actions en 2026 →
- npm Provenance Attestations & SLSA Build Level 3 in 2026 → Attestations de Provenance npm & SLSA Build Level 3 en 2026 →
- Miasma Wave 3: Self-Replicating Worm Hits 73 Microsoft Azure Repos → Miasma Vague 3 : Ver Auto-Répliquant sur 73 Dépôts Microsoft Azure →
- GitHub Actions OIDC Token Security in 2026 → Sécurité des Tokens OIDC GitHub Actions en 2026 →
- npm Vulnerabilities Guide → Guide Vulnérabilités npm →