{"id":22317,"date":"2026-07-17T10:22:42","date_gmt":"2026-07-17T10:22:42","guid":{"rendered":"https:\/\/www.securitytoday.de\/2026\/07\/17\/ci-cd-a-publie-le-chargeur-de-botnet-asyncapi\/"},"modified":"2026-07-17T17:17:08","modified_gmt":"2026-07-17T17:17:08","slug":"ci-cd-a-publie-le-chargeur-de-botnet-asyncapi","status":"publish","type":"post","link":"https:\/\/www.securitytoday.de\/fr\/2026\/07\/17\/ci-cd-a-publie-le-chargeur-de-botnet-asyncapi\/","title":{"rendered":"CI\/CD a publi\u00e9 le chargeur de botnet AsyncAPI"},"content":{"rendered":"<p style=\"color:#69d8ed;font-size:0.9em;margin:0 0 16px;padding:0;\">6 min de lecture<\/p>\n<p><strong>Quatre paquets npm AsyncAPI publi\u00e9s le 14 juillet 2026 avec une provenance OIDC valide ont pourtant livr\u00e9 un chargeur multi-\u00e9tapes de botnet. L\u2019intrusion a d\u00e9but\u00e9 dans l\u2019int\u00e9gration continue (CI) : un workflow pull_request_target mal configur\u00e9, suivi d\u2019un push sur la branche de release via des identifiants li\u00e9s \u00e0 un bot. La fonctionnalit\u00e9 npm Trusted Publishing est rest\u00e9e techniquement int\u00e8gre et n\u2019a pas d\u00e9tect\u00e9 cette faille en amont.<\/strong><\/p>\n<div style=\"background:#003340;color:#fff;padding:32px 36px;margin:32px 0;border-radius:8px;\">\n<p style=\"margin:0 0 18px 0;font-size:0.95em;font-weight:800;text-transform:uppercase;letter-spacing:0.2em;color:#69d8ed;border-bottom:2px solid rgba(105,216,237,0.25);padding-bottom:12px;\">Points cl\u00e9s<\/p>\n<ul style=\"margin:0;padding-left:22px;color:rgba(255,255,255,0.92);line-height:1.6;\">\n<li style=\"margin-bottom:12px;\"><strong style=\"color:#69d8ed;\">L\u2019intrusion a d\u00e9but\u00e9 par une mauvaise configuration de la CI, bien avant le jeton de registre.<\/strong> Le workflow pull_request_target avec checkout de la branche non fiable, un GITHUB_TOKEN trop permissif et un push ult\u00e9rieur par un bot : l\u2019exfiltration de secrets et la compromission de branche vont de pair.<\/li>\n<li style=\"margin-bottom:12px;\"><strong style=\"color:#69d8ed;\">La charge utile dans le require(), l\u2019ex\u00e9cution active \u00e9tait plus \u00e9troite que le bundle.<\/strong> ShellExec, persistance et C2 fonctionnaient. Le harvesting, la propagation et l\u2019\u00e9vasion \u00e9taient inclus dans le paquet, mais d\u00e9sactiv\u00e9s dans cette livraison via un interrupteur.<\/li>\n<li><strong style=\"color:#69d8ed;\">Les fichiers de verrouillage (lockfiles) entre 07:10 et 11:18 UTC restent risqu\u00e9s.<\/strong> npm a supprim\u00e9 les versions concern\u00e9es ; les r\u00e9f\u00e9rences existantes et les caches CI ne le sont pas.<\/li>\n<\/ul>\n<\/div>\n<p style=\"font-size:0.88em;color:#666;margin:20px 0 32px 0;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5;padding:10px 0;\"><span style=\"color:#004a59;font-weight:700;text-transform:uppercase;font-size:0.72em;letter-spacing:0.14em;margin-right:14px;\">Articles associ\u00e9s :<\/span><a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/07\/11\/un-paquet-npm-qui-volait-les-cles-privees\/\" style=\"color:#333;text-decoration:underline;\">Un paquet npm ayant vol\u00e9 des cl\u00e9s priv\u00e9es<\/a>&nbsp;&nbsp;<span style=\"color:#ccc;\">\/<\/span>&nbsp;&nbsp;<a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/06\/26\/mini-shai-hulud-le-ver-npm-devore-la-chaine-dapprovisionnement\/\" style=\"color:#333;text-decoration:underline;\">Mini Shai-Hulud : ver npm dans la cha\u00eene d\u2019approvisionnement et contre-mesures<\/a><\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">Ce qui s&rsquo;est exactement pass\u00e9<\/h2>\n<p>Le 14 juillet 2026 \u00e0 06:58 UTC, un commit a \u00e9t\u00e9 pouss\u00e9 sur la branche *next* du d\u00e9p\u00f4t asyncapi\/generator sous l&rsquo;identit\u00e9 factice \u00ab Votre nom \u00bb \/ you@example.com. Douze minutes plus tard, le workflow l\u00e9gitime release-with-changesets.yml a publi\u00e9 trois paquets avec une provenance OIDC npm valide : @asyncapi\/generator@3.3.1, @asyncapi\/generator-helpers@1.1.1 et @asyncapi\/generator-components@0.7.1.<\/p>\n<p>Selon le blog de s\u00e9curit\u00e9 de Microsoft, l&rsquo;acc\u00e8s initial s&rsquo;est produit via la PR #2155 contre le workflow manual-netlify-preview.yml. Ce workflow utilisait pull_request_target et v\u00e9rifiait le commit non fiable (untrusted) en provenance de la t\u00eate de la branche. Le GITHUB_TOKEN disposait de privil\u00e8ges \u00e9tendus ; les identifiants de checkout sont rest\u00e9s dans la configuration Git locale jusqu&rsquo;au nettoyage post-job. Par la suite, des pushs ont \u00e9t\u00e9 effectu\u00e9s depuis le compte asyncapi-bot. Microsoft reste prudent quant \u00e0 la confirmation que ces identifiants ont \u00e9t\u00e9 pr\u00e9cis\u00e9ment vol\u00e9s. Cependant, l&rsquo;encha\u00eenement de l&rsquo;attaque via la requ\u00eate pwn et les pushs ult\u00e9rieurs via le bot sont av\u00e9r\u00e9s et expliquent l&rsquo;acc\u00e8s \u00e0 la branche de release.<\/p>\n<p>Entre 07:51 et 08:30 UTC environ, le m\u00eame attaquant a cibl\u00e9 asyncapi\/spec-json-schemas (branche master). Via des commits avec le pr\u00e9fixe fix:, il a d\u00e9clench\u00e9 if-nodejs-release.yml et livr\u00e9 @asyncapi\/specs@6.11.2-alpha.1 ainsi que @asyncapi\/specs@6.11.2. StepSecurity, Socket, SafeDep et OX Security ont document\u00e9 la m\u00eame infrastructure de dropper et de deuxi\u00e8me niveau (selon StepSecurity : famille Miasma-v3).<\/p>\n<p>Pour contextualiser : aucun token npm de publication n&rsquo;a \u00e9t\u00e9 vol\u00e9. Le processus de publication a emprunt\u00e9 le chemin OIDC Trusted Publishing. La faille de confiance se situe en amont, dans la CI et dans les droits de push sur la branche d\u00e9clenchant le workflow de release.<\/p>\n<div data-element=\"key_number\" style=\"background:#003340;border:1px solid rgba(105,216,237,0.28);border-radius:10px;padding:28px 24px;margin:32px 0;text-align:center;\">\n<div style=\"font-size:2.6em;font-weight:800;color:#69d8ed;line-height:1.05;word-break:keep-all;\">~4 h<\/div>\n<p style=\"margin:10px 0 0;font-size:0.92em;color:#e6e3da;\">Fen\u00eatre d&rsquo;exposition jusqu&rsquo;au retrait des paquets du g\u00e9n\u00e9rateur<\/p>\n<p style=\"margin:6px 0 0;font-size:0.78em;color:#8fa3ab;\">Source : Chronologie StepSecurity, 14.07.2026 UTC<\/p>\n<\/div>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">Pourquoi la \u00ab provenance valide \u00bb peut \u00eatre trompeuse dans ce cas<\/h2>\n<p>Le syst\u00e8me npm Trusted Publishing avec OIDC et les attestations SLSA r\u00e9pondent \u00e0 une question pr\u00e9cise : cet artefact a-t-il \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9 par le workflow GitHub autoris\u00e9 de ce d\u00e9p\u00f4t ? L\u2019attestation des paquets g\u00e9n\u00e9rateurs indiquait exactement repo:asyncapi\/generator:ref:refs\/heads\/next, le fichier du workflow, le commit SHA et l\u2019URL de l\u2019ex\u00e9cution.<\/p>\n<p>En revanche, elle ne r\u00e9pond pas \u00e0 une autre question cruciale : le commit ayant d\u00e9clench\u00e9 le workflow \u00e9tait-il l\u00e9gitime et int\u00e8gre ? La provenance ne prot\u00e8ge pas contre des identifiants de push compromis ni contre des jobs CI ex\u00e9cutant du code non fiable avec des jetons privil\u00e9gi\u00e9s. Lorsque pull_request_target est combin\u00e9 avec un checkout de la t\u00eate de la PR, que des secrets sont laiss\u00e9s dans ces jobs et que la protection des branches est faible sur les branches de release, c\u2019est pr\u00e9cis\u00e9ment cette faille qui est exploit\u00e9e.<\/p>\n<p>Pour les RSSI (CISO) et les \u00e9quipes AppSec, c\u2019est le levier central : les signatures de registre et les indicateurs de provenance \u00e9valuent le cas AsyncAPI comme \u00ab vert \u00bb, alors que la CI a d\u00e9j\u00e0 livr\u00e9 le dropper. Les contr\u00f4les doivent v\u00e9rifier la source de v\u00e9rit\u00e9 ainsi que les permissions des workflows.<\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">M\u00e9canisme de charge utile sans hook d&rsquo;installation<\/h2>\n<p>Aucun des fichiers package.json concern\u00e9s ne contenait de script preinstall\/postinstall. Le dropper s&rsquo;activait d\u00e8s que le code du module empoisonn\u00e9 \u00e9tait charg\u00e9 via require(), c&rsquo;est-\u00e0-dire lors de l&rsquo;ex\u00e9cution normale du g\u00e9n\u00e9rateur ou dans les t\u00e2ches CI construisant des templates AsyncAPI.<\/p>\n<p>L&rsquo;\u00e9tape 1 lance un processus Node d\u00e9tach\u00e9. L&rsquo;\u00e9tape 2 r\u00e9cup\u00e8re depuis une passerelle IPFS un fichier sync.js, stock\u00e9 dans des chemins sp\u00e9cifiques au syst\u00e8me d&rsquo;exploitation, se faisant passer pour une runtime NodeJS inoffensive (sous Linux, par exemple ~\/.local\/share\/NodeJS\/sync.js). L&rsquo;\u00e9tape 3 d\u00e9chiffre un implant Miasma-v3 int\u00e9gr\u00e9. Dans la configuration livr\u00e9e, les fonctions de shell \u00e0 distance (ShellExec), de persistance et de balise C2 (command &#038; control) s&rsquo;ex\u00e9cutaient via plusieurs canaux (HTTP, Nostr, IPFS, DHT BitTorrent, dead-drop Ethereum).<\/p>\n<p>Les analyses statiques men\u00e9es par Aikido et Socket r\u00e9v\u00e8lent \u00e9galement des modules dans le bundle qui \u00e9taient d\u00e9sactiv\u00e9s dans cette livraison via des commutateurs : recon : false (le vol d&rsquo;identifiants ne d\u00e9marre pas), metamorphic : false (mutation, \u00e9vasion et empoisonnement d&rsquo;outils d&rsquo;IA d\u00e9sactiv\u00e9s) ainsi que propagate pour npm\/pypi\/ruby\/cargo syst\u00e9matiquement \u00e0 false (aucune propagation lat\u00e9rale de paquets). Le magasin de l&rsquo;artefact contenait l&rsquo;implant. Cette vague d&rsquo;attaque se limitait \u00e0 une coquille distante avec persistance et C2. L&rsquo;analyse forensique des h\u00f4tes reste indispensable, car l&rsquo;acc\u00e8s shell et la persistance \u00e9taient activ\u00e9s.<\/p>\n<div style=\"overflow-x:auto;-webkit-overflow-scrolling:touch;margin:16px 0 32px 0;\">\n<table style=\"width:100%;min-width:560px;border-collapse:collapse;font-size:0.95em;\">\n<thead>\n<tr style=\"background:#003340;color:#fff;\">\n<th style=\"padding:12px 16px;text-align:left;border:1px solid #003340;\">Paquet<\/th>\n<th style=\"padding:12px 16px;text-align:left;border:1px solid #003340;\">Version malveillante<\/th>\n<th style=\"padding:12px 16px;text-align:left;border:1px solid #003340;\">Version s\u00e9curis\u00e9e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding:12px 16px;border:1px solid #ddd;\"><strong>@asyncapi\/generator<\/strong><\/td>\n<td style=\"padding:12px 16px;border:1px solid #ddd;\">3.3.1<\/td>\n<td style=\"padding:12px 16px;border:1px solid #ddd;color:#003340;font-weight:600;\">3.3.0<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:12px 16px;border:1px solid #ddd;\"><strong>@asyncapi\/generator-helpers<\/strong><\/td>\n<td style=\"padding:12px 16px;border:1px solid #ddd;\">1.1.1<\/td>\n<td style=\"padding:12px 16px;border:1px solid #ddd;color:#003340;font-weight:600;\">1.1.0<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:12px 16px;border:1px solid #ddd;\"><strong>@asyncapi\/generator-components<\/strong><\/td>\n<td style=\"padding:12px 16px;border:1px solid #ddd;\">0.7.1<\/td>\n<td style=\"padding:12px 16px;border:1px solid #ddd;color:#003340;font-weight:600;\">0.7.0 \/ 1.0.0<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:12px 16px;border:1px solid #ddd;\"><strong>@asyncapi\/specs<\/strong><\/td>\n<td style=\"padding:12px 16px;border:1px solid #ddd;\">6.11.2 \/ 6.11.2-alpha.1<\/td>\n<td style=\"padding:12px 16px;border:1px solid #ddd;color:#003340;font-weight:600;\">6.11.1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-size:0.8em;color:#888;margin:8px 0 0;\">Source : Tableau des paquets affect\u00e9s de StepSecurity, au 14.07.2026<\/p>\n<\/div>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">Ce que les \u00e9quipes s\u00e9curit\u00e9 doivent v\u00e9rifier d\u00e8s maintenant<\/h2>\n<p>Commencez par une v\u00e9rification des faits dans votre propre environnement : examinez les fichiers de verrouillage (Lockfiles) et les caches CI dans la fen\u00eatre UTC du 14 juillet. Si vous utilisez @asyncapi\/specs uniquement de mani\u00e8re transitive via le parseur, la version n\u2019appara\u00eet souvent pas dans l\u2019arbre de d\u00e9pendances direct. Les overrides et les analyses SBOM (Software Bill of Materials) sont ici obligatoires.<\/p>\n<p>Ensuite, proc\u00e9dez \u00e0 une analyse forensique des h\u00f4tes : recherchez les chemins de d\u00e9p\u00f4t (Drop-paths) sous le nom trompeur \u00ab NodeJS \u00bb, les processus Node d\u00e9tach\u00e9s, les connexions sortantes vers des passerelles IPFS et des cibles HTTP-C2 inhabituelles. Troisi\u00e8mement, effectuez une rotation des identifiants (Credentials) sur les runners et ordinateurs portables concern\u00e9s. ShellExec peut acc\u00e9der aux secrets d\u2019environnement et aux tokens locaux, m\u00eame si le module de r\u00e9colte group\u00e9 \u00e9tait d\u00e9sactiv\u00e9 dans cette configuration. Priorit\u00e9 absolue : les GitHub PATs, les tokens npm et les cl\u00e9s cloud issues des environnements de build.<\/p>\n<div data-element=\"checklist\" style=\"background:#23261f;border:1px solid rgba(105,216,237,0.22);border-radius:10px;padding:22px 24px;margin:32px 0;box-shadow:inset 0 1px 0 rgba(230,227,218,0.06),0 2px 10px rgba(0,0,0,0.22);\">\n<p style=\"margin:0 0 12px;font-family:'IBM Plex Mono',ui-monospace,SFMono-Regular,monospace;font-size:0.72em;letter-spacing:0.12em;text-transform:uppercase;color:#69d8ed;\">Mesures imm\u00e9diates<\/p>\n<ul style=\"margin:0;padding-left:0;list-style:none;\">\n<li style=\"margin:0 0 10px;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>Recr\u00e9er les fichiers de verrouillage et d\u00e9finir des versions s\u00fbres pour les d\u00e9pendances suspectes<\/li>\n<li style=\"margin:0 0 10px;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>V\u00e9rifier les chemins de d\u00e9p\u00f4t et les processus Node d\u00e9tach\u00e9s sur les h\u00f4tes de d\u00e9veloppement et CI<\/li>\n<li style=\"margin:0 0 10px;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>Effectuer une rotation des secrets sur les machines concern\u00e9es<\/li>\n<li style=\"margin:0 0 10px;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>pull_request_target : \u00e9viter le checkout des branches non fiables avec des secrets ; appliquer le principe des privil\u00e8ges minimaux pour les tokens<\/li>\n<li style=\"margin:0 0 10px;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>Branches de release : obligation de revue, commits sign\u00e9s, interdiction des push directs<\/li>\n<li style=\"margin:0;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>Egress CI : limiter les destinations aux registries attendues, bloquer par d\u00e9faut IPFS\/DHT<\/li>\n<\/ul>\n<\/div>\n<p>Sur le plan structurel, il est judicieux de pr\u00e9voir une p\u00e9riode de refroidissement (Cooldown) pour les nouvelles versions publi\u00e9es sur npm, ainsi que des contr\u00f4les d\u2019egress en temps d\u2019ex\u00e9cution dans les GitHub Actions. La provenance (Provenance) reste une couche utile en compl\u00e9ment du durcissement CI, de la protection des branches, du refroidissement des d\u00e9pendances et de la t\u00e9l\u00e9m\u00e9trie comportementale dans le processus de build.<\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">Contexte pour les entreprises du DACH<\/h2>\n<p>L\u2019AsyncAPI s\u2019int\u00e8gre dans les g\u00e9n\u00e9rateurs d\u2019API, les pipelines de documentation et les cha\u00eenes d\u2019outils DevOps. Les entreprises qui exploitent des architectures pilot\u00e9es par \u00e9v\u00e9nements (Event-driven Architecture) et automatisent OpenAPI\/AsyncAPI utilisent souvent ces outils de mani\u00e8re indirecte. La directive NIS2 et le r\u00e8glement sur la r\u00e9silience cyber (Cyber Resilience Act) renforcent les exigences en mati\u00e8re de gestion des risques li\u00e9s \u00e0 la cha\u00eene d\u2019approvisionnement. L\u2019affirmation \u00ab nous v\u00e9rifions la provenance \u00bb ne suffit plus comme unique mesure de contr\u00f4le si les permissions des workflows et la gouvernance sectorielle restent floues.<\/p>\n<p>Ce cas met en lumi\u00e8re l\u2019importance de la gouvernance au niveau de la source de v\u00e9rit\u00e9 : la branche Git et les workflows CI qui alimentent la pipeline. Les attestations de registre (Registry-Attestationen) compl\u00e8tent cette couche, mais ne la remplacent pas en tant que preuve de confiance unique.<\/p>\n<h2 style=\"padding-top:64px;margin-bottom:20px;\">Foire aux questions<\/h2>\n<p class=\"st-faq-hint\">Chaque question est verrouill\u00e9e. Un clic d\u00e9verrouille la r\u00e9ponse.<\/p>\n<details>\n<summary><strong>L\u2019attestation de provenance npm n\u2019a-t-elle pas suffi comme preuve de confiance ?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">Elle atteste du workflow autoris\u00e9 et du contexte de build. Cependant, elle ne couvre ni la l\u00e9gitimit\u00e9 du commit d\u00e9clencheur ni l\u2019int\u00e9grit\u00e9 des identifiants CI en amont. En cas de compromission de branche, l\u2019attestation peut \u00eatre techniquement correcte tout en induisant en erreur quant \u00e0 l\u2019\u00e9valuation des risques.<\/p>\n<\/details>\n<details>\n<summary><strong>Un bloqueur aurait-il prot\u00e9g\u00e9 contre les scripts d&rsquo;installation ?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">Non. Le dropper \u00e9tait li\u00e9 \u00e0 l&rsquo;appel de module (require). Les scripts de cycle de vie npm (npm-lifecycle-scripts) n&rsquo;\u00e9taient pas concern\u00e9s. Une protection efficace n\u00e9cessite des contr\u00f4les comportementaux et de sortie (egress) pendant la phase de construction.<\/p>\n<\/details>\n<details>\n<summary><strong>Les installations fra\u00eeches sont-elles encore dangereuses aujourd\u2019hui ?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">Les versions malveillantes ont \u00e9t\u00e9 supprim\u00e9es du registre Windows. Les fichiers de verrouillage (lockfiles) et les caches issus de la fen\u00eatre d&rsquo;exposition, ainsi que les h\u00f4tes ayant d\u00e9j\u00e0 ex\u00e9cut\u00e9 la charge utile, restent cependant risqu\u00e9s.<\/p>\n<\/details>\n<details>\n<summary><strong>Quelles informations d&rsquo;identification faut-il d&rsquo;abord faire pivoter ?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">Sur les syst\u00e8mes Dev\/CI concern\u00e9s : jetons GitHub et npm, cl\u00e9s SSH et identifiants cloud stock\u00e9s dans l\u2019environnement ou dans les secrets des runners. La raison ? Un acc\u00e8s shell combin\u00e9 \u00e0 une persistance des donn\u00e9es. Dans cette version, le module de r\u00e9colte \u00e9tait activ\u00e9 dans cette configuration.<\/p>\n<\/details>\n<details>\n<summary><strong>Quelle est la mesure de gouvernance prioritaire ?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">Audit des workflows privil\u00e9gi\u00e9s <strong>pull_request_target<\/strong> et apparent\u00e9s (pas de checkout non fiable avec des secrets, tokens \u00e0 privil\u00e8ges minimaux), s\u00e9curisation des branches de release (revues, commits sign\u00e9s, blocage des pushs directs) et limitation de l\u2019egress CI. <strong>Provenance<\/strong> compl\u00e8te le tout en fournissant une preuve du chemin de build.<\/p>\n<\/details>\n<p><!--ST-LOWER-CARDS lang=fr--><\/p>\n<h3 style=\"margin:48px 0 18px;padding-left:12px;font-size:1.05em;font-weight:800;color:#e6e3da;border-left:3px solid #69d8ed;line-height:1.2;\">Les choix de la r\u00e9daction<\/h3>\n<p><a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/07\/15\/cursor-lance-git-exe-depuis-racine-depot\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:inset 0 1px 0 rgba(230,227,218,0.06),0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><img decoding=\"async\" src=\"https:\/\/www.securitytoday.de\/wp-content\/uploads\/2026\/07\/cursor-windows-git-exe-repo-root-code-execution-cover-hero-250x141.jpg\" alt=\"\" loading=\"lazy\" width=\"116\" height=\"65\" style=\"width:100%;height:100%;object-fit:cover;display:block;\"><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#69d8ed;margin-bottom:5px;\">\u00c0 lire<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">Cursor lance git.exe depuis la racine du d\u00e9p\u00f4t<\/span><\/span><\/a><a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/07\/15\/poc-legacyhive-correctifs-windows-recents\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:inset 0 1px 0 rgba(230,227,218,0.06),0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><img decoding=\"async\" src=\"https:\/\/www.securitytoday.de\/wp-content\/uploads\/2026\/07\/legacyhive-windows-eop-poc-nach-patch-tuesday-cover-hero-250x141.jpg\" alt=\"\" loading=\"lazy\" width=\"116\" height=\"65\" style=\"width:100%;height:100%;object-fit:cover;display:block;\"><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#69d8ed;margin-bottom:5px;\">\u00c0 lire<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">PoC LegacyHive et correctifs Windows r\u00e9cents<\/span><\/span><\/a><a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/07\/15\/deux-vulnerabilites-joomla-ajoutees-catalogue-cisa-kev\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:inset 0 1px 0 rgba(230,227,218,0.06),0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><img decoding=\"async\" src=\"https:\/\/www.securitytoday.de\/wp-content\/uploads\/2026\/07\/joomla-icagenda-balbooa-kev-upload-rce-cover-hero-250x141.jpg\" alt=\"\" loading=\"lazy\" width=\"116\" height=\"65\" style=\"width:100%;height:100%;object-fit:cover;display:block;\"><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#69d8ed;margin-bottom:5px;\">\u00c0 lire<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">Deux vuln\u00e9rabilit\u00e9s Joomla ajout\u00e9es au catalogue CISA KEV<\/span><\/span><\/a><\/p>\n<h3 style=\"margin:48px 0 18px;padding-left:12px;font-size:1.05em;font-weight:800;color:#e6e3da;border-left:3px solid #69d8ed;line-height:1.2;\">Plus du r\u00e9seau MBF Media<\/h3>\n<p><a href=\"https:\/\/www.cloudmagazin.com\/fr\/2026\/07\/16\/quand-les-agents-dia-voyagent-la-residence-des-donnees-comme-defi-operationnel\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:inset 0 1px 0 rgba(230,227,218,0.06),0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><img decoding=\"async\" src=\"https:\/\/www.securitytoday.de\/wp-content\/uploads\/2026\/07\/net-wenn-ki-agenten-reisen-data-residency-al-67057393.jpg\" alt=\"\" loading=\"lazy\" width=\"116\" height=\"65\" style=\"width:100%;height:100%;object-fit:cover;display:block;\"><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#0bb7fd;margin-bottom:5px;\">cloudmagazin<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">Quand les agents d\u2019IA voyagent : la r\u00e9sidence des donn\u00e9es comme d\u00e9fi op\u00e9rationnel<\/span><\/span><\/a><a href=\"https:\/\/mybusinessfuture.com\/fr\/plus-de-faillites-des-cas-plus-modestes-quest-ce-qui-compte\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:inset 0 1px 0 rgba(230,227,218,0.06),0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><img decoding=\"async\" src=\"https:\/\/www.securitytoday.de\/wp-content\/uploads\/2026\/07\/net-mehr-insolvenzen-kleinere-faelle-was-zae-22120048-250x143.jpg\" alt=\"\" loading=\"lazy\" width=\"116\" height=\"65\" style=\"width:100%;height:100%;object-fit:cover;display:block;\"><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#aa8ac2;margin-bottom:5px;\">MyBusinessFuture<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">Plus de faillites, des cas plus modestes : qu\u2019est-ce qui compte<\/span><\/span><\/a><!--\/ST-LOWER-CARDS--><\/p>\n","protected":false},"excerpt":{"rendered":"Quatre packages AsyncAPI npm avec une origine OIDC valide ont livr\u00e9 un chargeur de botnet. L&rsquo;entr\u00e9e \u00e9tait dans un workflow CI mal configur\u00e9.","protected":false},"author":10,"featured_media":22221,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"AsyncAPI npm","_yoast_wpseo_title":"CI\/CD a publi\u00e9 le chargeur de botnet AsyncAPI","_yoast_wpseo_metadesc":"Quatre packages npm AsyncAPI ont fonctionn\u00e9 avec une origine valide et ont livr\u00e9 un chargeur de botnet. L'entr\u00e9e \u00e9tait dans le CI.","_yoast_wpseo_meta-robots-noindex":"","_yoast_wpseo_meta-robots-nofollow":"","_yoast_wpseo_meta-robots-adv":"","_yoast_wpseo_canonical":"","_yoast_wpseo_opengraph-title":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_opengraph-image":"","_yoast_wpseo_opengraph-image-id":0,"_yoast_wpseo_twitter-title":"","_yoast_wpseo_twitter-description":"","_yoast_wpseo_twitter-image":"","_yoast_wpseo_twitter-image-id":0,"_evm_slot_owner":"","evm_cvss":0,"evm_risk":0,"evm_casefile":"","evm_primary_cve":"","evm_external_preview_token":"","evm_external_preview_expires":"","_evm_translation_lang":"fr","featured_post":0,"featured_post_sortierung":0,"_wp_old_slug":[],"footnotes":""},"categories":[256],"tags":[],"class_list":["post-22317","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-praxis-umsetzung-fr"],"evm_reading_time_minutes":10,"wpml_language":"fr","wpml_translation_of":22219,"_links":{"self":[{"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/posts\/22317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/comments?post=22317"}],"version-history":[{"count":1,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/posts\/22317\/revisions"}],"predecessor-version":[{"id":22323,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/posts\/22317\/revisions\/22323"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/media\/22221"}],"wp:attachment":[{"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/media?parent=22317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/categories?post=22317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/tags?post=22317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}