Un package npm aux 27 000 téléchargements a dérobé discrètement des jetons OpenAI

Un package npm malveillant nommé codexui-android a passé une période inconnue à dérober discrètement des jetons d’authentification OpenAI aux développeurs qui l’avaient installé. Avec environ 27 000 téléchargements par semaine, le package se présentait comme une interface utilisateur légitime pour le modèle Codex d’OpenAI. Derrière cette façade familière, il exécutait une opération furtive de collecte d’identifiants que les chercheurs en sécurité classent désormais comme une attaque typique de la chaîne d’approvisionnement npm visant les jetons OpenAI à grande échelle.

Cette découverte est un nouveau rappel brutal que les registres de packages ne sont pas intrinsèquement sûrs et que la popularité n’est pas, à elle seule, un indicateur de fiabilité.

Comment codexui-android cachait le vol de jetons dans un package à l’apparence légitime

L’attaque reposait sur une tromperie simple mais efficace : construire quelque chose que les développeurs veulent réellement utiliser, puis y ajouter une logique malveillante qui s’exécute silencieusement en arrière-plan. Le package codexui-android offrait une interface fonctionnelle pour Codex d’OpenAI, ce qui signifie que les développeurs l’installaient, le testaient et le conservaient dans leurs projets, souvent sans jamais se demander ce que le package faisait au niveau réseau.

Cette approche est connue sous le nom d’attaque par package trojanisé. Le code malveillant était intégré dans ce qui semblait être un outil utile, contournant le scepticisme naturel qu’aurait suscité un package visiblement non fonctionnel ou mal conçu. Le package extrayait des jetons d’actualisation OpenAI, ces identifiants à longue durée de vie qui permettent aux applications de demander de nouveaux jetons d’accès sans que l’utilisateur ait à se reconnecter.

Le nom codexui-android suivait également une convention de nommage qui suggérait une légitimité. Il empruntait à la notoriété du produit Codex d’OpenAI tout en y ajoutant un suffixe spécifique à une plateforme, ce qui le faisait passer pour un outil dédié à l’univers mobile. Les développeurs cherchant sur npm des outils liés à Codex n’auraient eu aucune raison évidente de s’en méfier.

Ce que des jetons d’actualisation OpenAI volés permettent réellement aux attaquants

Les jetons d’actualisation ne sont pas de simples mots de passe. Dans de nombreux systèmes d’authentification, ils constituent de véritables clés maîtresses. Lorsqu’un attaquant obtient un jeton d’actualisation valide, il peut générer de nouveaux jetons d’accès à répétition, conservant ainsi un accès persistant à un compte même après la fin de la session d’origine ou le changement du mot de passe.

Pour les comptes OpenAI, cet accès pourrait se traduire par une utilisation non autorisée des crédits d’API payants, un accès aux invites stockées ou aux données des modèles affinés, une divulgation potentielle de code propriétaire transmis via l’API et, dans un contexte professionnel, un accès latéral aux ressources d’équipe liées au même compte.

Le risque s’aggrave rapidement dans les environnements de développement. Les ingénieurs manipulent fréquemment des clés d’API et des jetons dotés de permissions élevées. Un seul jeton d’actualisation compromis dans un pipeline CI/CD ou un environnement de développement partagé pourrait offrir à un attaquant une tête de pont persistante, difficile à détecter et encore plus difficile à éliminer totalement. Cet effet en cascade rappelle ce qui s’est produit lors de la brèche Dropbox Sign, où des identifiants collectés ont ouvert des chemins vers des systèmes interconnectés bien au-delà du point de compromission initial.

Pourquoi l’écosystème npm facilite le passage à l’échelle des attaques de la chaîne d’approvisionnement

Le registre npm héberge plus de deux millions de packages. Publier un nouveau package ne demande qu’une vérification d’identité minimale, et la nature ouverte du registre est précisément ce qui le rend si utile à la communauté mondiale des développeurs. C’est aussi ce qui en fait une cible récurrente pour les attaquants de la chaîne d’approvisionnement.

Le cas de codexui-android montre comment les attaquants exploitent le modèle de confiance sur lequel repose le développement open source. Les développeurs supposent généralement qu’un package avec un nombre élevé de téléchargements a été soumis à un certain niveau d’examen par la communauté. Cette hypothèse est de plus en plus dangereuse. Les compteurs de téléchargements peuvent être artificiellement gonflés, et une utilisation réelle ne vaut pas une revue de sécurité.

Le problème plus large des attaques de la chaîne d’approvisionnement npm n’est pas nouveau, mais le ciblage des outils d’IA marque une évolution. À mesure que les développeurs intègrent des API de grands modèles de langage dans leurs systèmes de production, les jetons qui authentifient ces intégrations deviennent des cibles de grande valeur. Les attaquants sont clairement conscients de cette évolution. Les packages imitant des outils de développement pour l’IA constituent une catégorie de menace émergente que la communauté de la sécurité s’efforce encore de contrer à grande échelle.

Défense en profondeur pour les développeurs : isolation des identifiants, segmentation réseau et au-delà

L’incident codexui-android met en lumière plusieurs pratiques concrètes qui peuvent réduire l’exposition à ce type d’attaque.

Isolation des identifiants est la mesure d’atténuation la plus immédiate. Les jetons d’API et les jetons d’actualisation doivent avoir la portée la plus restreinte possible, être stockés dans des gestionnaires de secrets plutôt que dans des variables d’environnement ou des fichiers de configuration, et être régulièrement renouvelés. Si un jeton est dérobé, une portée limitée signifie des dégâts limités.

Audit des dépendances devrait faire partie intégrante de tout flux de développement. Des outils comme npm audit, ainsi que des plateformes tierces d’analyse de la composition logicielle, peuvent signaler les packages aux comportements inhabituels ou aux vulnérabilités connues. Le verrouillage des versions des dépendances dans des fichiers package-lock et la revue des modifications avant d’accepter une mise à jour réduisent également l’exposition aux publications malveillantes.

Surveillance du trafic réseau sortant peut intercepter les tentatives d’exfiltration que les outils d’audit ne repèrent pas. Si un environnement de développement ou un pipeline CI/CD est configuré pour alerter en cas de connexions sortantes inattendues, un package qui tente de communiquer ses jetons volés devient détectable.

Principe du moindre privilège s’applique à tous les niveaux. Les machines de développement ne devraient pas fonctionner avec des identifiants donnant accès à la production. Les pipelines CI/CD devraient utiliser des jetons à courte durée de vie générés au moment de l’exécution plutôt que des secrets stockés à long terme.

Enfin, passer en revue vos propres packages installés pour repérer tout ce qui touche aux flux d’authentification est un exercice qui vaut la peine dès maintenant. L’incident codexui-android ne risque pas d’être isolé. Auditez ce qui se trouve dans votre node_modules, vérifiez les autorisations de vos jetons d’API et traitez avec une vigilance accrue tout package qui manipule le stockage d’identifiants.

Les attaques de la chaîne d’approvisionnement réussissent parce qu’elles exploitent la confiance à grande échelle. Reconstruire cette posture de sécurité une dépendance à la fois, en commençant par les identifiants les plus sensibles de votre stack, est la réponse la plus pratique à la disposition des développeurs individuels aujourd’hui.