Chaîne d'approvisionnement
Qu'est-ce que le typosquatting ?
Le typosquatting est une attaque qui consiste à enregistrer un nom proche d'un nom populaire et à attendre qu'une personne fasse une faute de frappe. Il a commencé avec les domaines de sites web. Dans le logiciel, les attaquants publient des paquets malveillants portant des noms comme crossenv au lieu de cross-env, et une seule faute de frappe dans une commande d'installation exécute leur code sur la machine d'un développeur ou dans un pipeline CI.
Mis à jour le
Comment fonctionne le typosquatting de paquets
- Choisir une cible. L'attaquant choisit un paquet populaire, où même un faible taux de fautes de frappe finit par compter.
- Enregistrer un nom proche. Il diffère d'une lettre, d'un tiret manquant, d'un caractère interverti ou d'un suffixe plausible.
- Dissimuler la charge utile. Le paquet enveloppe souvent le vrai paquet : tout continue de fonctionner et rien ne paraît anormal.
- S'exécuter à l'installation. Les gestionnaires de paquets peuvent lancer des scripts pendant l'installation : le code s'exécute donc avant que quiconque ne l'appelle, avec accès aux variables d'environnement et aux tokens.
- Voler et se propager. Les identifiants volés permettent à l'attaquant de publier d'autres paquets ou d'atteindre d'autres systèmes.
Techniques courantes de typosquatting
| Technique | Vrai paquet | Imitation |
|---|---|---|
| Séparateur manquant | cross-env |
crossenv |
| Suffixe ajouté | jquery |
jquery.js |
| Lettres interverties | ffmpeg |
ffmepg |
| Lettre supprimée | mongoose |
mongose |
| Préfixe ajouté | sqlite |
node-sqlite |
Toutes ces imitations proviennent d'une seule campagne réelle, décrite ci-dessous.
Un exemple réel : crossenv
En 2017, un utilisateur npm nommé hacktask a publié crossenv, imitant le populaire
cross-env. Le paquet conservait le comportement du vrai et envoyait en plus les variables d'environnement de ceux qui
l'installaient au serveur de l'attaquant. Dans un build, c'est dans les variables d'environnement que se trouvent les tokens.
L'analyse de Snyk a révélé qu'il faisait partie de plus de
30 paquets malveillants provenant du même compte, et qu'il était passé inaperçu pendant environ deux semaines, jusqu'à ce qu'un ingénieur le
repère.
Pourquoi les assistants de code IA aggravent le problème
Un assistant IA peut suggérer un paquet qui n'existe pas. Si un attaquant enregistre ce nom, la prochaine personne qui accepte la suggestion installe le malware. C'est ce qu'on appelle parfois le slopsquatting. Les agents automatisés qui installent des dépendances sans qu'un humain lise le nom augmentent encore les enjeux.
Typosquatting vs confusion de dépendances
Les deux exploitent la façon dont les noms de paquets sont résolus, mais l'erreur est différente.
| Typosquatting | Confusion de dépendances | |
|---|---|---|
| De qui vient l'erreur | Une personne saisit mal un nom | Un système de build choisit le mauvais registre |
| Le nom | Proche de celui d'un paquet public | Identique à celui d'un paquet privé interne |
| Comment l'attaque réussit | Quelqu'un l'installe par accident | Une version publique portant un numéro plus élevé est prioritaire |
| Principale défense | Les lockfiles et la revue des nouvelles dépendances | Les paquets à scope et une configuration de registre qui garde les noms internes privés |
La confusion de dépendances s'est fait connaître en 2021, lorsque le chercheur Alex Birsan s'en est servi pour exécuter du code au sein de plus de 35 organisations, dont Apple, Microsoft et PayPal, dans le cadre de programmes de bug bounty ou avec leur autorisation.
Comment prévenir le typosquatting
-
Installez à partir d'un lockfile en CI. Utilisez
npm ciet ses équivalents. Une faute de frappe ne peut alors arriver que par un changement relu. Voir ce qu'un lockfile fait et ne fait pas. - Relisez les nouvelles dépendances dans les pull requests. Regardez le nom lui-même, et lisez le diff du lockfile au lieu de le sauter.
- Vérifiez avant d'installer. Comparez le nom avec la documentation du projet, et méfiez-vous d'un paquet qui a peu de téléchargements, une première publication récente ou aucun lien vers un dépôt.
- Limitez les scripts d'installation. Désactivez-les quand votre build le permet.
- Attendez avant d'adopter de nouveaux paquets. Les paquets malveillants sont souvent repérés et retirés peu après leur apparition.
- Limitez ce qu'un build peut joindre. Un build qui ne peut communiquer qu'avec des hôtes connus ne peut pas envoyer vos secrets à un attaquant, même si un mauvais paquet s'exécute. Consultez la politique de trafic sortant GitHub Actions.
- Vérifiez chaque suggestion de l'IA. Confirmez qu'un paquet existe et qu'il s'agit bien de celui que vous vouliez avant de l'installer.
Gardez à l'esprit qu'un typosquat n'a pas de CVE le jour de son apparition : un scan SCA fondé sur les avis de sécurité ne le signalera donc pas. Pour aller plus loin, consultez les bonnes pratiques de sécurité de la chaîne d'approvisionnement logicielle.
Typosquatting de domaines
La forme d'origine de l'attaque, aussi appelée détournement d'URL, consiste à enregistrer un domaine, par exemple le nom mal orthographié d'une banque ou d'une page de connexion. Les visiteurs qui font une faute de frappe dans l'adresse arrivent sur une copie du site conçue pour voler des identifiants ou diffuser des malwares. Les défenses sont différentes : enregistrez les fautes d'orthographe courantes de vos propres domaines, surveillez les enregistrements de domaines ressemblants et utilisez un gestionnaire de mots de passe, qui ne remplit pas automatiquement les champs sur le mauvais domaine.
Comment CRACI limite les dégâts
CRACI ne détecte pas les nouveaux paquets malveillants par leur comportement ou leur réputation : utilisez pour cela un pare-feu de paquets ou un outil d'analyse comportementale. Ce qu'il fait, c'est les contenir. En tant que runner GitHub Actions, il applique une politique de trafic sortant qui bloque les connexions dont votre build n'a pas besoin : un paquet qui vole des secrets n'a donc nulle part où les envoyer, même quand personne n'a encore vu l'attaque. Chaque paquet récupéré par un job est enregistré : une fois l'attaque connue, vous pouvez donc voir quels builds l'ont récupéré, et les releases dotées d'une CVE publiée sont signalées et peuvent être bloquées par les gates de politique. Voir qu'est-ce qu'une attaque de la chaîne d'approvisionnement.
Typosquatting : questions fréquentes
Qu'est-ce que le typosquatting, en termes simples ?
C'est le fait d'enregistrer un nom qui ressemble presque à un nom populaire, comme celui d'un paquet ou d'un site web, et d'attendre qu'une personne fasse une faute de frappe. L'imitation diffuse alors un malware ou vole des identifiants.
Quel exemple de typosquatting peut-on citer ?
En 2017, le paquet npm crossenv imitait le populaire cross-env. Il fonctionnait comme le vrai paquet et envoyait en plus les variables d'environnement des utilisateurs au serveur de l'attaquant.
Quelle est la différence entre typosquatting et confusion de dépendances ?
Le typosquatting repose sur une personne qui saisit mal le nom d'un paquet public. La confusion de dépendances utilise le nom exact d'un paquet privé et repose sur un système de build qui récupère une version publique à la place.
Le typosquatting est-il illégal ?
Publier un malware ou voler des identifiants est illégal dans la plupart des pays. Le typosquatting de domaines peut aussi enfreindre le droit des marques, comme l'Anticybersquatting Consumer Protection Act américain.
Qu'est-ce que le slopsquatting ?
Une variante dans laquelle un attaquant enregistre un nom de paquet que les assistants IA ont tendance à inventer. Quiconque installe le paquet suggéré obtient le code de l'attaquant.
Comment détecter le typosquatting ?
Examinez le nom et les métadonnées des nouvelles dépendances, et utilisez un outil qui compare les noms de paquets aux noms populaires ou qui analyse le comportement. Les scanners fondés sur les avis de sécurité n'aident qu'une fois le paquet signalé.
Contenez le paquet qui vous a échappé
Bloquez les connexions sortantes dont vos builds n'ont pas besoin, et gardez un enregistrement de chaque paquet qu'ils ont récupéré.
Réserver une démo