TanStack et bien d'autres paquets affectés : analyse et examen approfondi

MMaximilian SchwarzmĂŒller
컎퓚터/소프튞웚얎êČœì œ 뉎슀AI/ëŻžëž˜êž°ìˆ 

Transcript

00:00:00Nous subissons une autre attaque majeure de la chaĂźne d'approvisionnement en ce moment mĂȘme,”
00:00:06et elle s'est propagĂ©e de NPM Ă  l'Ă©cosystĂšme Python, donc Ă©vitez d'installer tout paquet”
00:00:12NPM ou Python pour l'instant. Assurez-vous que votre systĂšme est bien sĂ©curisĂ©. J'ai une vidĂ©o”
00:00:19Ă  ce sujet, je partagerai le lien ci-dessous et j'y reviendrai aussi dans cette vidĂ©o, mais d'abord”
00:00:23je veux vous donner des dĂ©tails sur ce qui est touchĂ© et comment savoir si vous l'ĂȘtes. Tout a commencĂ© avec”
00:00:30les paquets TanStack : TanStack query, TanStack router, TanStack start, etc. Hier, le 11 mai,”
00:00:36en un temps trùs court, plusieurs paquets malveillants, ou en fait tous les paquets TanStack,”
00:00:43ont Ă©tĂ© publiĂ©s dans des versions malveillantes. L'attaque a Ă©tĂ© contenue en 20 minutes.”
00:00:50Finalement, elle a Ă©tĂ© dĂ©tectĂ©e et stoppĂ©e rapidement, mais tous ces paquets malveillants ont Ă©tĂ© publiĂ©s”
00:00:57durant ce court laps de temps. Ensuite, la propagation s'est poursuivie et elle continue encore.”
00:01:03Elle a touchĂ© les paquets Mistral qui n'ont que quatre utilisateurs, mais ils ont quand mĂȘme Ă©tĂ©â€
00:01:09affectĂ©s car ce malware agit comme un ver : il vole des donnĂ©es et des identifiants, potentiellement”
00:01:16les vĂŽtres s'il est installĂ© sur votre systĂšme. Je reviendrai sur comment savoir si vous ĂȘtes touchĂ©â€
00:01:20dans un instant, mais il a continuĂ© Ă  se propager Ă  d'autres paquets NPM car c'est son but,”
00:01:26et mĂȘme dans l'Ă©cosystĂšme Python en ce moment mĂȘme. Cela ne date que de quelques heures,”
00:01:32deux heures au moment oĂč j'enregistre ceci. Maintenant, comment savoir si vous ĂȘtes touchĂ© ?”
00:01:39Si vous avez installĂ© un paquet TanStack hier soir, dans mon cas sur le fuseau horaire allemand,”
00:01:45vous devez vous considĂ©rer comme affectĂ©. Si vous l'avez installĂ© vers cette heure-lĂ , gardez Ă  l'esprit”
00:01:54que c'est en UTC, donc convertissez-le selon votre zone. Dans ce cas, vous ĂȘtes probablement touchĂ©.”
00:02:00Mais comme cela se propage aux paquets Mistral et à bien d'autres paquets JavaScript,”
00:02:06trop nombreux pour ĂȘtre listĂ©s ici, vous devez considĂ©rer votre machine comme compromise.”
00:02:13Je partagerai les liens vers ces publications pour que vous puissiez voir la liste complùte”
00:02:18de tous les paquets concernĂ©s au fur et Ă  mesure. Mais comme indiquĂ©, c'est encore en cours,”
00:02:22donc n'installez rien pour l'instant. Il existe aussi des indicateurs de compromission.”
00:02:31Cherchez certaines empreintes de fichiers, des hashes SHA, pour le routeur dans un fichier JS.”
00:02:38Si vous avez un moyen de surveiller les requĂȘtes rĂ©seau effectuĂ©es sur votre machine,”
00:02:42cherchez du trafic sortant vers cette URL. Ce serait un indicateur clair”
00:02:48que des donnĂ©es ont Ă©tĂ© exfiltrĂ©es de votre systĂšme. Que signifie concrĂštement une compromission ?”
00:02:55Ce malware fait deux choses principales. D'abord, il rĂ©colte des donnĂ©es. Il cherche”
00:03:03des jetons NPM, GitHub, des identifiants AWS et d'autres secrets. Il scanne votre systùme”
00:03:12aux endroits habituels oĂč sont stockĂ©s les secrets, les collecte et les envoie”
00:03:18Ă  l'URL que je vous ai montrĂ©e. Il vole donc ces secrets. Mais il ne s'arrĂȘte pas lĂ .”
00:03:26Comme je l'ai dit, il agit comme un ver et utilise les jetons GitHub volĂ©s.”
00:03:33Il s'en sert avec les jetons NPM pour publier d'autres paquets compromis. Si vous maintenez”
00:03:40un autre paquet, ou si un workflow CI/CD s'est exĂ©cutĂ© durant cette pĂ©riode et”
00:03:46dĂ©pendait de paquets TanStack, alors dans ce workflow, les paquets TanStack compromis”
00:03:53ont Ă©tĂ© rĂ©cupĂ©rĂ©s. Le code malveillant a pu s'y exĂ©cuter. Et dans ce workflow,”
00:04:00mĂȘme si ce n'est pas sur votre machine, il a pu voler des identifiants”
00:04:06pour publier une version malveillante du paquet que votre workflow CI/CD”
00:04:14essayait de construire. C'est ainsi qu'il se propage. Il agit vraiment comme un ver.”
00:04:20Il utilise les jetons volĂ©s pour infecter plus de paquets. C'est ainsi que cela a atteint”
00:04:26vers Mistral, d'autres paquets JavaScript, et mĂȘme l'Ă©cosystĂšme Python. Et nous en
00:04:32Et Ă  ma connaissance, cela continue de s'Ă©tendre. Alors, comment s'en protĂ©ger ?”
00:04:39J'ai créé une vidĂ©o Ă  ce sujet sur mon autre chaĂźne, AkataMind. Le lien sera en description.”
00:04:44Pour faire court, vous devez vous assurer de ne pas exĂ©cuter votre code ou dĂ©velopper”
00:04:51directement sur votre machine hîte, mais plutît dans une machine virtuelle ou un conteneur dev.”
00:04:57Ne stockez pas de secrets en clair sur votre machine. Pour AWS,”
00:05:03par exemple, privilĂ©giez le Single Sign-On plutĂŽt que de stocker des identifiants IAM,”
00:05:10et utilisez des techniques similaires pour vos autres services. De plus,”
00:05:16envisagez d'utiliser des services comme Infisical ou Doppler pour stocker vos secrets”
00:05:25dans le cloud et non sur votre disque dur ou dans des fichiers .env.”
00:05:30J'en parle dans l'autre vidĂ©o. Utilisez aussi des gestionnaires de paquets”
00:05:38qui permettent de configurer un ñge minimum de publication, comme le permet Bun.”
00:05:44Dans le fichier bunfig.toml, vous pouvez dĂ©finir un Ăąge minimum de sortie pour garantir”
00:05:49que 'bun install' n'installe que des paquets vieux d'au moins X secondes ou jours.”
00:05:56pnpm a une fonction similaire, tout comme les derniùres versions de npm.”
00:06:02Encore une fois, j'ai couvert cela ailleurs. Si vous utilisez Bun ou une bonne config npm,”
00:06:09Bun bloque par dĂ©faut l'exĂ©cution des scripts post-install,”
00:06:15c'est-à-dire les scripts de cycle de vie des paquets que vous installez.”
00:06:21C'est un autre mĂ©canisme de sĂ©curitĂ© car ce malware s'appuie souvent”
00:06:28sur l'exĂ©cution de tels scripts. Utiliser un gestionnaire de paquets sĂ©curisĂ©,”
00:06:36isoler votre code dans une VM et ne pas stocker de secrets en clair :”
00:06:41voilĂ  ce qu'il faut faire, surtout maintenant que ces attaques deviennent plus sĂ©rieuses.”
00:06:46Nous allons voir comment celle-ci a fonctionnĂ© car c'est trĂšs intĂ©ressant.”
00:06:52Malheureusement, elles sont de plus en plus frĂ©quentes. Je fais une vidĂ©o par mois lĂ -dessus,”
00:06:58voire plus, car je pense qu'elles sont plus faciles Ă  rĂ©aliser dĂ©sormais.”
00:07:04À l'Ăšre de l'IA, il est plus simple d'analyser les paquets ou les dĂ©pendances ciblĂ©es,”
00:07:12d'Ă©tudier leur code source ou leur configuration CI/CD pour trouver des failles.”
00:07:22C'est ce qui s'est passĂ© pour TanStack. Ce n'est pas la machine d'un mainteneur”
00:07:28qui a Ă©tĂ© touchĂ©e, mais le workflow CI/CD de TanStack. J'y reviendrai.”
00:07:34L'IA facilite la recherche de vulnĂ©rabilitĂ©s et l'Ă©criture de code, mĂȘme malveillant.”
00:07:40En parallĂšle, nous vivons une explosion logicielle : on Ă©crit plus de code que jamais.”
00:07:45Il y a donc plus de cibles, dont beaucoup nĂ©gligent la sĂ©curitĂ©,”
00:07:51ce qui rend ces attaques d'autant plus attractives. Comment tout cela a commencĂ© ?”
00:07:57C'est fascinant. Ce n'est pas une approche inĂ©dite, mais elle est trĂšs Ă©laborĂ©e.”
00:08:03L'Ă©quipe TanStack a publiĂ© un rapport d'incident expliquant le dĂ©roulement de l'attaque.”
00:08:09Je mettrai le lien, mais je vais vous en faire le rĂ©sumĂ© ici.”
00:08:15En rĂ©sumĂ©, cette attaque a reposĂ© sur trois Ă©tapes clĂ©s que je vais dĂ©tailler.”
00:08:22D'abord, un schĂ©ma de 'pull request pwn request'. Je vais expliquer ce que c'est.”
00:08:30Ensuite, l'empoisonnement du cache GitHub Actions via les limites de confiance des forks,”
00:08:38et l'extraction en mĂ©moire d'un jeton OIDC. Qu'est-ce que tout cela signifie ?”
00:08:45Vous pouvez lire l'article pour les dĂ©tails, mais voici l'essentiel. Commençons par”
00:08:50la 'pull request pwn request'. Pour comprendre, il faut savoir que GitHub Actions”
00:08:58est la solution CI/CD de GitHub. J'ai d'ailleurs un cours complet à ce sujet”
00:09:05si vous voulez apprendre à configurer GitHub Actions pour vos tñches d'automatisation,”
00:09:10publier vos paquets ou vos sites web. Comme tout outil CI/CD,”
00:09:16il repose sur des Ă©vĂ©nements qui dĂ©clenchent des workflows automatisĂ©s.”
00:09:24Par exemple, dĂ©ployer votre site automatiquement quand vous poussez sur la branche principale.”
00:09:29Le 'push' est l'un de ces Ă©vĂ©nements. Vous pouvez dĂ©finir des tĂąches spĂ©cifiques :”
00:09:34installer des dĂ©pendances, compiler le projet, le mettre en ligne.”
00:09:40Un autre dĂ©clencheur est 'pull_request_target'. Il s'active”
00:09:44lorsqu'une pull request est ouverte sur votre dĂ©pĂŽt. Cela signifie”
00:09:49que n'importe qui peut forker votre dĂ©pĂŽt, y faire des modifications et ouvrir”
00:09:56une pull request, ce qui dĂ©clenchera ce workflow. Ça a l'air dangereux ? Ça l'est,”
00:10:05et c'est le point de dĂ©part de l'attaque. Il existe aussi le dĂ©clencheur 'pull_request'.”
00:10:14Ce dernier exĂ©cute le workflow dans le contexte du dĂ©pĂŽt forkĂ©. Ainsi,”
00:10:19tout ce qui est malveillant reste confinĂ© au fork, pas au dĂ©pĂŽt de base.”
00:10:25En revanche, 'pull_request_target' s'exĂ©cute dans le contexte du dĂ©pĂŽt de base.”
00:10:31C'est lĂ  que rĂ©side le danger. Dans le cas de TanStack, l'attaquant a inclus”
00:10:38le code malveillant du ver dans son fork, puis a ouvert une pull request.”
00:10:45Cela a dĂ©clenchĂ© 'pull_request_target' sur un exĂ©cuteur GitHub Actions,”
00:10:52tournant dans le contexte du dĂ©pĂŽt principal. Cela ne donne pas un accĂšs direct”
00:10:58au code source de base pour le modifier, mais cela signifie que le cache utilisĂ©â€
00:11:04Et c'est ce qui s'est passé ici pour l'attaque TanStack : dans cette pull request,
00:11:10au sein de ce fork, l'attaquant a inclus le code malveillant, le code du ver, le malware dans le dépÎt TanStack,
00:11:20plus précisément dans son fork. Ensuite, l'attaquant a ouvert la pull request,
00:11:26ce qui a déclenché l'exécution de pull_request_target. Et comme mentionné, cela lance
00:11:33un runner GitHub Actions, qui s'exécute alors dans le contexte du dépÎt de base. Qu'est-ce que cela signifie ?
00:11:40Cela ne signifie pas que l'attaquant accĂšde au code de base ou peut y fusionner le code malveillant,
00:11:46mais cela signifie, par exemple, que le cache utilisé à cet endroit
00:11:53sera partagé avec les exécutions ultérieures de GitHub Actions issues du dépÎt de base,
00:12:00potentiellement via des hooks ou des déclencheurs totalement différents comme le push.
00:12:05L'étape suivante a été l'empoisonnement du cache. Mais qu'est-ce que cela signifie ? Eh bien,
00:12:11l'attaquant a ajouté du code à son fork pour s'assurer que lorsque l'action GitHub
00:12:17s'exécutait via le déclencheur pull_request_target, elle lancerait une commande, la commande hash files,
00:12:23qui est supportée par GitHub Actions, pour stocker quelque chose dans le cache. Maintenant,
00:12:28quel est l'intĂ©rĂȘt de ce cache ? L'idĂ©e derriĂšre le cache GitHub Actions est simplement d'accĂ©lĂ©rer
00:12:33a volĂ© un jeton NPM Ă©phĂ©mĂšre (OIDC) pour publier une version infectĂ©e de TanStack.”
00:12:39NPM propose une fonction de 'trusted publishing' censĂ©e ĂȘtre plus sĂ»re.”
00:12:46Normalement, on peut utiliser un jeton de compte, mais s'il est volĂ©, c'est fini.”
00:12:52Avec la publication de confiance, on doit passer par un fournisseur comme GitHub Actions.”
00:12:56Un jeton Ă  durĂ©e de vie trĂšs courte est alors gĂ©nĂ©rĂ© pour signer la nouvelle version.”
00:13:00Mais si le code qui s'exĂ©cute dans le workflow est dĂ©jĂ  compromis,”
00:13:06il a accĂšs Ă  ce jeton tout neuf. C'est ce qui s'est passĂ© : le malware”
00:13:12a utilisĂ© ce jeton pour publier la version malveillante sur NPM. Fait intĂ©ressant,”
00:13:18l'attaque a partiellement Ă©chouĂ© car le workflow GitHub Actions s'est interrompu”
00:13:24comme celles du dĂ©clencheur push, partagent le mĂȘme contexte et le mĂȘme cache. Et c'est
00:13:31Si le code avait Ă©tĂ© valide, le workflow se serait terminĂ© normalement”
00:13:39et la version compromise aurait paru parfaitement authentique.”
00:13:46L'attaquant n'avait plus qu'à attendre qu'un flux de travail GitHub Actions normal s'exécute pour les paquets TanStack.
00:13:53Lorsqu'un mainteneur poussait du code, cette autre exécution de GitHub Actions réutilisait
00:14:01le mĂȘme cache configurĂ© prĂ©cĂ©demment par l'exĂ©cution malveillante, et rĂ©cupĂ©rait alors
00:14:08le cache empoisonné préparé, qui incluait le code malveillant. C'est ainsi que ce code
00:14:13est passé du fork vers l'exécution normale de GitHub Actions lors d'un push standard par un mainteneur
00:14:21qui n'avait pas été affecté par un quelconque code malveillant. Le cache a servi de véhicule de transport
00:14:28entre ces deux exécutions de GitHub Actions au final. Puis, dans une troisiÚme étape, une fois que
00:14:35Ce n'est pas fini, et toutes les futures attaques ne seront pas dĂ©tectĂ©es aussi vite.”
00:14:44La surface d'attaque grandit : plus de code, plus de cibles potentielles,”
00:14:54et l'IA qui aide les attaquants. Si vous le pouvez, n'installez rien pour le moment,”
00:15:00vérifiez vos configurations et consultez les liens ci-dessous pour plus de détails.
00:15:04Il existe grosso modo deux façons de publier un paquet sur NPM, on pourrait dire. La premiÚre consiste à créer un
00:15:11jeton avec votre compte NPM et Ă  l'utiliser pour publier de nouvelles versions de votre paquet. Le problĂšme,
00:15:19c'est que si ce jeton est volé, n'importe qui peut publier une nouvelle version de ce paquet. Pour renforcer la
00:15:26sĂ©curitĂ©, il existe ce processus de publication de confiance oĂč NPM dit : non, vous ne pouvez pas publier de paquets depuis
00:15:33votre machine, vous devez passer par l'un de ces fournisseurs de confiance, GitHub Actions étant l'un d'entre
00:15:37eux, et il existe une intégration de publication de confiance pour GitHub Actions que vous pouvez configurer. Ensuite,
00:15:44dans le cadre de ce processus de publication de confiance, un jeton de publication à courte durée de vie sera récupéré
00:15:50ou demandé. Et ensuite, ce jeton à courte durée de vie sera utilisé pour signer cette nouvelle version
00:15:57du paquet en cours de publication. En théorie, l'idée est que le jeton est difficile à voler parce
00:16:03qu'il n'est sur la machine d'aucun mainteneur. Et de plus, il est de courte durĂ©e. MĂȘme s'il Ă©tait volĂ©,
00:16:08il n'est pas actif trÚs longtemps. Le problÚme, bien sûr, est simplement que si le code qui s'exécute dans le workflow
00:16:15CI/CD qui demande ce jeton de confiance a été infecté, alors ce code
00:16:21malveillant a accÚs à ce tout nouveau jeton de publication de confiance à courte durée de vie. Et c'est ce qui s'est passé
00:16:27ici. Ce code malveillant a donc abusé de ce jeton ou a utilisé ce jeton pour publier ensuite une nouvelle version
00:16:36du paquet TanStack. Maintenant, assez curieusement, cette attaque a un peu échoué parce qu'elle a bien
00:16:44obtenu ce jeton de confiance et l'a utilisé pour contacter l'API NPM afin de publier une nouvelle version
00:16:52du paquet TanStack qui incluait ce ver, qui incluait le code malveillant. Mais elle s'est en fait
00:16:58retrouvée dans un workflow GitHub Actions qui n'a pas pu se terminer parce qu'il y avait un problÚme dans
00:17:06le code qui avait été poussé vers le CI/CD. Si les attaquants avaient fait attention à lancer leur
00:17:12attaque Ă  un moment oĂč un code valide Ă©tait poussĂ©, alors bien sĂ»r ce workflow se serait
00:17:19terminé et ils n'auraient pas eu besoin de publier un paquet malveillant manuellement en contactant
00:17:26l'API NPM, mais ils auraient pu injecter le code malveillant dans ce workflow,
00:17:32le laisser se terminer avec succÚs, et une version compromise de TanStack aurait alors été
00:17:38publiée tout en paraissant tout à fait valide, puisqu'il s'agissait d'un push normal par un mainteneur et que le workflow
00:17:45s'était terminé avec succÚs. La façon dont cette attaque a fonctionné, parce que ce workflow ne s'est pas terminé avec succÚs,
00:17:51a rendu un peu plus facile la détection de ce qui se passait par un contributeur externe, au final,
00:18:00parce qu'on pouvait voir qu'une nouvelle version des paquets TanStack avait Ă©tĂ© publiĂ©e alors mĂȘme que le
00:18:05workflow GitHub Actions avait Ă©chouĂ©, donc aucune nouvelle version n'aurait dĂ» ĂȘtre publiĂ©e. On pouvait donc voir une
00:18:12incohérence, ce qui a facilité la détection de cette attaque, et c'est en partie là que les
00:18:19mainteneurs de TanStack et nous tous avons eu de la chance. C'est néanmoins une attaque assez élaborée comme vous pouvez
00:18:26probablement le dire, qui a fonctionnĂ© sans compromettre la machine de qui que ce soit, et mĂȘme si elle a Ă©tĂ© stoppĂ©e
00:18:32rapidement, elle a fait de sérieux dégùts car, comme je l'ai mentionné, elle se propage encore, et c'était un long
00:18:41épisode sur tout cela, je sais, mais je veux vraiment insister sur le fait que vous devez travailler à sécuriser
00:18:49votre systÚme, comme je l'ai partagé plus tÎt et dans cette vidéo. Vous voulez vous assurer de réduire le
00:18:56risque d'ĂȘtre affectĂ©. Cette attaque a Ă©tĂ© stoppĂ©e rapidement, et pourtant elle continue de se propager,
00:19:05ce n'est donc pas encore fini, et il est possible que toutes les attaques ne soient pas détectées aussi rapidement
00:19:11Ă  l'avenir. Ils ont eu un peu de chance ici, il aurait pu ĂȘtre plus difficile de dĂ©tecter cette
00:19:18attaque, et les dĂ©gĂąts auraient alors pu ĂȘtre encore plus importants ; mais ils sont dĂ©jĂ  consĂ©quents ici et
00:19:24ce n'est pas fini. Nous verrons d'autres attaques de ce type, j'en suis sûr, car comme je l'ai dit, la surface
00:19:31d'attaque s'agrandit et devient plus intéressante. Il y a plus de gens qui écrivent du code, beaucoup de gens
00:19:36qui ne savent pas ce qu'ils font, et l'IA aide Ă  mener de telles attaques. VoilĂ  donc ce qui se
00:19:42passe en ce moment. Si vous ne le devez pas, n'installez peut-ĂȘtre rien, vĂ©rifiez bien votre configuration, et vous
00:19:48trouverez tous les liens ci-dessous si vous voulez approfondir, si vous voulez voir la liste complĂšte des paquets
00:19:51affectés, et ainsi de suite.

Key Takeaway

L'attaque de la chaßne d'approvisionnement contre TanStack exploite le déclencheur pull_request_target et l'empoisonnement du cache GitHub Actions pour voler des secrets systÚme et propager automatiquement le malware vers de nouveaux paquets NPM et Python.

Highlights

  • L'attaque du 11 mai a compromis l'intĂ©gralitĂ© des paquets de l'Ă©cosystĂšme TanStack sur NPM en moins de 20 minutes.

  • Le malware agit comme un ver informatique en utilisant des jetons GitHub et NPM volĂ©s pour publier automatiquement des versions infectĂ©es d'autres paquets.

  • Une exfiltration de donnĂ©es est confirmĂ©e si le trafic rĂ©seau sortant pointe vers l'URL malveillante identifiĂ©e dans les indicateurs de compromission.

  • Le gestionnaire de paquets Bun permet de bloquer l'installation de versions trop rĂ©centes via le fichier bunfig.toml pour Ă©viter les versions malveillantes immĂ©diates.

  • L'attaque a exploitĂ© une faille dans le dĂ©clencheur pull_request_target de GitHub Actions pour empoisonner le cache partagĂ© du dĂ©pĂŽt principal.

  • Le stockage de secrets en clair sur le disque dur, comme les fichiers .env ou les identifiants IAM AWS, constitue le vecteur principal de vol d'identitĂ© lors de cette infection.

Timeline

Étendue de l'infection sur NPM et Python

  • L'attaque touche simultanĂ©ment les Ă©cosystĂšmes JavaScript via NPM et Python.
  • Tous les paquets TanStack comme Query, Router et Start ont reçu des mises Ă  jour malveillantes le 11 mai.
  • Le malware se propage de maniĂšre autonome vers des paquets tiers comme Mistral aprĂšs l'infection initiale.

L'attaque a dĂ©butĂ© par la publication massive de versions infectĂ©es des bibliothĂšques TanStack sur une pĂ©riode trĂšs courte de 20 minutes. Bien que contenue rapidement, la nature virale du code lui permet de continuer sa progression vers d'autres bibliothĂšques. MĂȘme des paquets avec un trĂšs faible nombre d'utilisateurs sont ciblĂ©s car le but est la collecte systĂ©matique d'identifiants.

Identification d'une machine compromise

  • Toute installation de paquet TanStack effectuĂ©e le soir du 11 mai (heure UTC) indique une compromission probable.
  • La prĂ©sence de hashes SHA spĂ©cifiques dans les fichiers JavaScript du routeur confirme l'infection.
  • Le monitoring du trafic rĂ©seau sortant vers des URL suspectes rĂ©vĂšle l'exfiltration de donnĂ©es en cours.

Le risque de compromission s'Ă©tend au-delĂ  de TanStack en raison de la propagation rapide du ver Ă  d'autres dĂ©pendances JavaScript trop nombreuses pour ĂȘtre listĂ©es. Les utilisateurs doivent vĂ©rifier l'intĂ©gritĂ© de leurs fichiers locaux et surveiller toute activitĂ© rĂ©seau anormale. Si une interaction avec ces paquets a eu lieu durant la fenĂȘtre d'attaque, la machine hĂŽte doit ĂȘtre considĂ©rĂ©e comme totalement compromise.

Mécanismes de vol de secrets et propagation

  • Le malware scanne le systĂšme pour extraire des jetons NPM, GitHub et des identifiants AWS.
  • Les workflows CI/CD qui utilisent les paquets infectĂ©s servent de relais pour publier de nouvelles versions malveillantes.
  • Le ver utilise les permissions des jetons volĂ©s pour infecter les dĂ©pĂŽts dont l'utilisateur est mainteneur.

Le processus malveillant priorise la récolte de secrets stockés dans les emplacements standards du systÚme de fichiers. Une fois les jetons GitHub et NPM obtenus, le script les utilise pour s'injecter dans d'autres projets via les pipelines d'intégration continue. Cette méthode permet au malware de passer d'un environnement de développement à un autre sans intervention humaine.

Stratégies de protection et isolation

  • Le dĂ©veloppement dans des machines virtuelles ou des conteneurs isolĂ©s prĂ©vient l'accĂšs du malware Ă  la machine hĂŽte.
  • L'utilisation de services comme Infisical ou Doppler remplace le stockage dangereux de secrets en local.
  • La configuration d'un Ăąge minimum de publication dans Bun ou pnpm bloque l'installation automatique de paquets suspects trop rĂ©cents.

La sécurisation repose sur la suppression des secrets en clair, notamment en privilégiant le Single Sign-On (SSO) pour AWS plutÎt que les clés IAM statiques. Les gestionnaires de paquets modernes offrent des leviers techniques comme la désactivation des scripts post-install par défaut dans Bun. Ces mesures barriÚres limitent l'impact d'une dépendance compromise sur l'intégrité globale du systÚme de développement.

Anatomie technique de l'attaque via GitHub Actions

  • L'attaquant exploite le dĂ©clencheur pull_request_target qui s'exĂ©cute avec les privilĂšges du dĂ©pĂŽt de base.
  • Le cache GitHub Actions sert de vecteur pour transfĂ©rer le code malveillant du fork vers le workflow de push officiel.
  • Le malware intercepte les jetons OIDC Ă©phĂ©mĂšres de la 'Trusted Publishing' de NPM pour signer les versions infectĂ©es.

L'attaque utilise une technique de 'pull request pwn' oĂč un contributeur externe dĂ©clenche un workflow malveillant sur le dĂ©pĂŽt cible. En manipulant la commande 'hash files', l'attaquant empoisonne le cache que les mainteneurs utiliseront plus tard lors de leurs propres mises Ă  jour. Cela permet d'injecter du code dans le pipeline officiel sans jamais modifier directement le code source visible sur GitHub.

Détection fortuite et avenir des attaques par IA

  • L'Ă©chec technique du workflow GitHub Actions a permis de dĂ©tecter l'incohĂ©rence entre l'absence de build rĂ©ussi et la publication sur NPM.
  • L'intelligence artificielle accĂ©lĂšre l'analyse des failles dans les configurations CI/CD complexes.
  • L'augmentation du volume de code produit mondialement multiplie les cibles vulnĂ©rables.

La détection de cette attaque spécifique a été facilitée par une erreur des attaquants qui a provoqué l'échec du workflow, alertant ainsi les contributeurs attentifs. Toutefois, l'IA rend la découverte de telles vulnérabilités plus systématique et facile pour les acteurs malveillants. La fréquence de ces incidents augmente car la surface d'attaque logicielle ne cesse de croßtre tandis que la rigueur sécuritaire ne suit pas toujours cette cadence.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video