Les chercheurs expliquent comment la campagne PhantomRaven exploite les failles du npm pour permettre des attaques contre la chaîne d’approvisionnement logicielle.
Les auteurs de menaces trouvent de nouveaux moyens d’insérer du code ou des liens invisibles dans du code open source pour échapper à la détection des attaques de la chaîne d’approvisionnement logicielle.
Le dernier exemple en date a été découvert par des chercheurs de Koi Security, basé en Israël, qui ont déclaré cette semaine avoir découvert la campagne d’un acteur malveillant en cours depuis août, contaminant 126 paquets dans le référentiel de code open source npm de Microsoft. Au total, plus de 86 000 installations de ces packages infectés ont été réalisées et la campagne se poursuit.
Quelle est l’astuce ? Les packages défectueux ne contiennent pas de code malveillant pouvant être détecté par un scanner. Au lieu de cela, il existe un lien invisible vers une URL qui, lorsque le package est installé par un développeur, récupère le code malveillant du serveur de l’attaquant.
La dépendance invisible pourrait être cachée derrière une ligne indiquant simplement « Bonjour ».
« Lorsque vous installez un package avec ce type de dépendance, npm le récupère à partir de cette URL externe », notent les chercheurs. « Pas depuis npmjs.com, où que l’attaquant le souhaite. Et npmjs.com ne suit pas ces URL. Les scanners de sécurité ne les récupèrent pas. Les outils d’analyse des dépendances les ignorent. Pour chaque système de sécurité automatisé, ces packages affichent « 0 dépendances ». Ainsi, pour le développeur qui a téléchargé un package infecté à partir de npm, le package semble sûr.
Pourquoi ça marche ?
Cela fonctionne, disent les chercheurs, car npm prend en charge les URL HTTP en tant que spécificateurs de dépendance. Ainsi, lorsque le package malveillant est installé, npm le récupère automatiquement à partir de l’URL externe.
L’objectif : voler les informations d’identification du développeur GitHub, GitLab, Jenkins et autres, et obtenir un aperçu de l’environnement du développeur – y compris les adresses IP publiques, les noms d’hôte des serveurs, les noms d’utilisateur, les répertoires actuels et la version de node.js – pour une exploitation ultérieure. Les données sont ensuite soigneusement exfiltrées.
La campagne exploite également l’IA
Les noms des packages téléchargés sur npm ne sont pas des typosquats de packages courants, une tactique populaire des acteurs malveillants. Au lieu de cela, les pirates exploitent les hallucinations de l’IA. Lorsque les développeurs demandent aux assistants IA des recommandations de packages, les chatbots suggèrent parfois des noms plausibles, proches de ceux de packages légitimes, mais qui n’existent pas réellement. Ce sont les noms utilisés par l’acteur menaçant. Ainsi, si un développeur interroge un assistant IA sur un package appelé « eslint-plugin-unused-imports », le chatbot peut suggérer le package « unusued-imports » (sans le savoir malveillant), et le développeur peut faire confiance à la recommandation et installer ce package.
Koi Security appelle cette tactique du slopsquatting. Ils appellent la campagne globale PhantomRaven.
À un moment donné, les dirigeants de NPM ont découvert cette campagne par eux-mêmes ou ont été alertés par d’autres chercheurs, car en août, 21 paquets ont été supprimés du référentiel. Cependant, après septembre, 80 packages supplémentaires ont été téléchargés. Selon Koi Security, tous étaient clairement contrôlés par la même personne.
Faille « désastreuse » dans npm
Peu de langages de programmation permettent de spécifier des dépendances via des URL, et même la plupart de ceux qui disposent de gestionnaires de paquets bloquent cette fonctionnalité pour des raisons de sécurité, a-t-elle déclaré. Par exemple, a-t-elle souligné, c’est autorisé en Python, mais le référentiel de packages open source Python Package Index (PyPI) bloque cette fonctionnalité.
Le danger des attaques PhantomRaven est qu’un acteur malveillant peut compromettre les systèmes des développeurs et des développeurs, plutôt que les utilisateurs finaux directement, a déclaré Janca. « Étant donné que Node.js et npm sont utilisés par des millions de projets, même un seul package compromis peut avoir des effets en cascade sur l’ensemble de l’écosystème logiciel », a-t-elle déclaré.
L’attaque est appelée « redirection non validée » (accepter une URL non fiable comme données) et figurait dans le top dix des attaques de l’Open Web Application Security Project (OWASP) dès 2013, a déclaré Janca.
« La validation des entrées est l’étape la plus importante dans toutes les pratiques de codage sécurisées, et cette fonctionnalité de NPM qui contourne la capacité du développeur à même être conscient de ce qui se produit est terrifiante. Ce vecteur d’attaque est susceptible d’être utilisé par de nombreux attaquants dans un avenir proche jusqu’à ce qu’il soit supprimé par NPM. «
Microsoft a été invité à commenter le rapport Koi et a demandé comment il allait mieux sécuriser NPM. Un porte-parole a déclaré qu’ils travaillaient sur une réponse mais qu’aucune n’avait été reçue avant la date limite de publication.
Attaques « invisibles »
Les auteurs de menaces utilisent des codes invisibles pour tromper les défenseurs de plusieurs manières. Par exemple, en août, un blogueur sur la sécurité a signalé que le service Q Developer d’Amazon pouvait être trompé par des caractères invisibles de balise Unicode. Dans un autre cas, Unicode a été utilisé pour masquer des logiciels malveillants dans les extensions de code de Visual Studio.
Oren Yomtov, auteur du rapport Koi Security, a déclaré que Microsoft devrait améliorer les outils d’analyse de npm pour suivre et analyser les URL de dépendance distantes plutôt que de les ignorer. Actuellement, les scanners de sécurité ne récupèrent pas les dépendances des URL HTTP et les outils d’analyse des dépendances les ignorent, a-t-il déclaré, ce qui donne l’impression que les packages avec des dépendances dynamiques distantes ont « 0 dépendance ». Microsoft devrait également exiger une validation de sécurité pour toutes les dépendances récupérées en externe.
Les développeurs ne devraient pas faire aveuglément confiance aux outils d’IA pour les recommandations de packages, a-t-il ajouté. Comme le souligne le rapport, lorsque les développeurs demandent des recommandations de packages à des assistants d’IA comme GitHub Copilot ou à des IDE comme Cursor, les modèles suggèrent parfois des noms de packages plausibles qui n’existent pas réellement. PhantomRaven en a profité et a créé des versions malveillantes de ces packages inexistants. « Vérifiez toujours que les packages existent sur le registre officiel npm avant l’installation », a-t-il conseillé, « et auditez les fichiers package.json pour détecter les dépendances d’URL HTTP suspectes. »



