Le Dependency Confusion : une menace croissante pour la cybersécurité

24 janv. 2025

|

5

min de lecture

AppSec

Comprendre le Dependency Confusion : une menace croissante pour la cybersécurité

Le Dependency Confusion est une vulnérabilité qui est récemment devenue un sujet de préoccupation en cybersécurité. Ce type de vulnérabilité a gagné en notoriété après une attaque très médiatisée impliquant le package PayPal, où des attaquants ont exploité une faille dans la gestion des dépendances pour injecter des versions malveillantes de paquets dans des applications et développements. 

Ce phénomène illustre une menace émergente au sein des chaînes d’approvisionnement logicielles. Alors que la gestion des dépendances est essentielle dans le développement moderne, il est crucial de comprendre les risques associés à ces outils et de mettre en place des mesures de sécurité pour s’en protéger. 

L’attaque par Dependency Confusion est un exemple frappant de la manière dont une simple erreur dans la gestion des dépendances peut mener à des conséquences dramatiques pour la sécurité des applications et des données. Dans cet article, nous allons examiner ce qu’est le Dependency Confusion, son fonctionnement, et comment des solutions telles que le Dependency Firewall peuvent y répondre efficacement. 😉

Qu’est-ce que le Dependency Confusion ?  

Le Dependency Confusion, ou “confusion de dépendance”, repose sur une vulnérabilité liée à la gestion des bibliothèques et paquets externes dans les projets logiciels. Les développeurs utilisent des systèmes de gestion de dépendances comme npm (Node), pip (Python) ou RubyGems, qui permettent d’intégrer facilement les bibliothèques externes à leur code. 

Ces dépendances peuvent être utilisées pour des fonctions aussi simples que la cryptographie ou de gestion des sessions, ou pour des utilisations plus complexes liées à des APIs ou des frameworks entiers. 

L’attaque de Dependency Confusion se produit lorsqu’un attaquant exploite ces dépendances pour introduire des paquets malveillants. 

Par exemple, si un projet utilise une bibliothèque appelée auth-lib, un attaquant pourrait publier une version malveillante portant le même nom sur un registre public (par exemple, sur npm ou PyPI). De nombreux gestionnaires de paquets privilégient par défaut les versions publiques, ce qui ouvre la porte à l'intégration involontaire de ces paquets malveillants.  

Comment fonctionne l’attaque ?  

L’attaque par Dependency Confusion suit un processus en plusieurs étapes : 

  1. Identification de la cible : l’attaquant identifie une ou plusieurs organisations et repère les paquets fréquemment utilisés dans ses projets.

  2. Création de paquets malveillants : il conçoit des paquets portant le même nom que ceux utilisés par l'organisation en y intégrant des fonctionnalités malveillantes. 

  3. Publication sur des registres publics : les paquets malveillants sont publiés sur des registres publics de dépendances et deviennent disponibles pour les gestionnaires de paquets (npm, pip, Maven, Composer). 

  4. Téléchargement et exécution : lorsqu'un développeur intègre une dépendance, le gestionnaire de paquets peut prioriser le paquet malveillant (depuis le registre public, plutôt que le privé) entraînant l’exécution de développement ou de production. 

  5. Exploitation : une fois le code malveillant en place, l’attaquant peut exfiltrer des données sensibles, accéder à des systèmes internes, outrepasser les mécanismes d’authentification ou installer des outils pour des attaques futures. 

Pourquoi la gestion des dépendances expose-t-elle à ce risque ? 

Les systèmes de gestion de dépendances ont leurs propres limites et zones de fragilité :

  • Manque de validation des sources : les projets téléchargent souvent des paquets sans vérification approfondie. 

  • Complexité de la gestion des versions : les interdépendances entre paquets rendent difficile la maîtrise des versions. 

  • Peu d’équipes auditent le code source des dépendances qu’ils fabriquent : l’audit de type SAST sur le code est encore assez peu répandu, et lorsqu'il est réalisé, c’est avec des outils ayant un taux de détection des vulnérabilités très faible. D’ailleurs un vieil adage dit “Open source, tout le monde a le code, personne ne l’audite”.

  • Combinaison de registres privés et publics : entre les registres publics qui acceptent sans grande validation les paquets venant de personnes mal intentionnées et les registres privés souvent mal protégés, le risque d’infiltration augmente. D’autant que les équipes de développement utilisent les 2 types de registres en parallèle et qu’on ne sait plus d'où provient le paquet.

Les meilleures pratiques pour se protéger contre le Dependency Confusion 

Le Dependency Confusion est une menace sérieuse pour les entreprises utilisant des chaînes d'approvisionnement logicielles complexes. Heureusement, plusieurs mesures de sécurité peuvent être mises en place pour réduire les risques. Voici les solutions clés à apporter : 

Adopter des conventions de nommage rigoureuses 

Définissez des règles strictes pour nommer vos dépendances internes afin de réduire le risque de conflits avec des paquets externes malveillants. Par exemple, ajoutez un préfixe unique ou utilisez votre nomenclature propre à votre organisation pour vos packages internes. 

Surveiller activement et analyser les dépendances 

Mettez en place une surveillance continue des dépendances utilisées dans vos projets. Cette analyse proactive vous permettra d’identifier rapidement toute activité suspecte ou modification inattendue, et d’assurer que seules des sources fiables sont utilisées. 

Utiliser des dépôts privés pour les packages 

Stockez et gérez vos dépendances internes dans des dépôts privés sécurisés, réduisant ainsi le besoin de télécharger des paquets directement depuis des registres publics. Cette pratique limite l’exposition de vos projets aux paquets non vérifiés ou malveillants. 

Appliquer des contrôles d’accès stricts 

Assurez-vous que seuls les utilisateurs autorisés ont accès à vos dépôts privés et aux outils de gestion de dépendances. Des permissions bien définies et des contrôles d’accès rigoureux empêchent les accès non autorisés ou les modifications malveillantes. 

Signer et vérifier les packages

La signature numérique des paquets garantit leur intégrité et leur authenticité. Avant d’intégrer une dépendance à un projet, vérifiez que la signature correspond bien à l’émetteur prévu et qu’elle n’a pas été altérée. 

Verrouiller les versions des dépendances 

Pour éviter que des mises à jour indésirables ou malveillantes soient automatiquement téléchargées, verrouillez les versions des packages utilisés dans vos projets. Cette méthode garantit une cohérence dans les environnements de développement et de production. 

Surveiller activement les dépendances : le Dependency Firewall 

Face à cette menace croissante, les entreprises doivent impérativement adopter des solutions de protection adaptées pour sécuriser la gestion de leurs dépendances. C’est là qu’interviennent des outils comme le Dependency Firewall.  

Un Dependency Firewall est une solution de sécurité qui agit comme un bouclier entre les environnements de développement et les registres de dépendances publics. Ce type de produit fonctionne en filtrant et en validant toutes les dépendances externes avant qu’elles ne soient téléchargées ou intégrées dans un projet. Les Dependency Firewalls comparent les paquets à des bases de données de sources sûres et vérifiées et peuvent empêcher l’intégration des paquets non autorisés ou malveillants. Ils peuvent également forcer l’utilisation des registres privés en première instance, ce qui permet de ne pas laisser le choix au gestionnaire de paquets.

Par exemple, des solutions comme Sonatype Repository Firewall permettent aux équipes de développement de sécuriser leurs chaînes d’approvisionnement logicielles en contrôlant de manière stricte les paquets qui peuvent être téléchargés. En utilisant un tel outil, les entreprises peuvent réduire le risque d’attaque de type Dependency Confusion, tout en conservant la meilleure flexibilité pour les équipes de développement.

Au final 

Le Dependency Confusion représente une menace sérieuse pour la cybersécurité. L’utilisation de dépendances étant grandissante en entreprise, le risque associé grandit lui aussi.

Cependant, avec des pratiques rigoureuses de gestion des dépendances et l’adoption de solutions de sécurité comme les Dependency Firewalls, il est possible de prévenir efficacement ces attaques.

En garantissant que seules des dépendances vérifiées et sécurisées sont utilisées dans le développement logiciel, les entreprises peuvent renforcer leur posture de sécurité et réduire les risques d’infiltration par des paquets malveillants.

Le Dependency Confusion n’est qu’une illustration de la complexité croissante des défis de sécurité associés au développement applicatif.

Et si on parle pipeline CI/CD, l’intégration des tests de type SCA (Software Composition Analysis) restent un incontournable pour la détection des vulnérabilités sur les dépendances, d’autant que la plupart des outils viennent avec une fonction d’inventaire. Demandez aux responsables sécurité comment un inventaire des applications utilisant des versions identifiées de Log4j ou de Spring a rendu leur tâche bien moins complexe durant l’épisode de la CVE-2021-44228 (Log4j) ou de la CVE-2022-22965 (Spring4Shell).   

Partager sur :

Partager

Échangeons sur vos besoins en AppSec

Échangeons sur vos besoins en AppSec

Prenez contact avec nous, et intégrez dès maintenant l’AppSec et la méthodologie Amiltone dans vos processus de développement

© 2025 Amiltone tous droits réservés

Mentions légales

Gestions des cookies

© 2025 Amiltone tous droits réservés

Mentions légales

Gestions des cookies

© 2025 Amiltone tous droits réservés

Mentions légales

Gestions des cookies