Un faux client m'a glissé un dépôt GitHub malveillant dans ma boîte de réception cette semaine, et le simple fait d'exécuter le script de démarrage a effacé deux jours de travail et exposé tous les mots de passe que je conserve dans mon navigateur.

Le « client » a publié une offre pour un poste d'ingénieur senior bien rémunéré, a communiqué rapidement et a envoyé un dépôt d'apparence soignée. La demande était simple : cloner, exécuter npm run dev et envoyer une capture d'écran pour prouver que la démo fonctionne — sans contrat, sans vérification d'antécédents. Dès que le serveur de développement a démarré, un code caché dans un fichier de configuration a contacté un serveur de commande et de contrôle (C2), a récupéré une charge utile de second niveau et a commencé à siphonner les identifiants de la machine locale.

Comment l'attaque s'est déroulée

La charge utile malveillante se trouvait dans postcss.config.js, un fichier que la plupart des développeurs survolent car il ne contient généralement que quelques règles simples de traitement CSS. Dans ce cas, l'attaquant a ajouté une ligne de JavaScript obfusqué loin à droite d'une instruction légitime, comblée par des espaces pour se fondre dans la masse. Lorsque la commande npm run dev a exécuté le pipeline PostCSS, la ligne cachée s'est exécutée sans être remarquée.

Le malware a effectué trois étapes en succession rapide :

  • Contact C2 – il a ouvert une connexion réseau vers un serveur contrôlé par l'attaquant et a signalé l'hôte compromis.
  • Téléchargement de la seconde étape – il a récupéré du code supplémentaire contenant la véritable logique d'exfiltration de données.
  • Vol d'identifiants du navigateur – sur macOS, il a interrogé la clé Chrome Safe Storage stockée dans le trousseau d'accès (keychain) du système. Si l'utilisateur approuvait la demande du trousseau, l'attaquant récupérait tous les mots de passe enregistrés dans Chrome.

Au-delà du vol immédiat, la charge utile s'est inscrite dans plusieurs outils de développement courants — VS Code, npm, Discord — de sorte que tout lancement futur de ces applications réinstanciait le code malveillant. Un simple redémarrage n'a pas éliminé l'infection ; le prochain npm install ou l'ouverture de l'éditeur a réactivé la porte dérobée (backdoor).

Signaux d'alerte qui passent souvent inaperçus

  • Demandes d'exécution de code avant la signature d'un contrat. Les processus de recrutement légitimes impliquent généralement un accord formel avant que tout travail propriétaire ne soit partagé.
  • Fichiers compressés se faisant passer pour des « briefs de projet ». Les archives Zip ou RAR peuvent cacher des scripts exécutables ou des binaires malveillants.
  • Demandes d'adresses e-mail personnelles pour « contourner les filtres de la plateforme ». Cette ruse vise à déplacer la conversation hors de la plateforme protégée, où les abus peuvent être signalés.
  • Descriptions de poste demandant au candidat de financer un portefeuille crypto ou d'acheter des jetons de test. De telles exigences sont atypiques pour un véritable travail de développement.

Mesures pratiques pour rester en sécurité

  1. N'exécutez jamais le code d'un inconnu sans l'inspecter. Ouvrez le dépôt en mode lecture seule (par exemple, via la vue 'raw' sur GitHub) et examinez chaque script, en particulier les fichiers de configuration et les entrées scripts de package.json.
  2. Considérez toutes les pièces jointes comme du texte brut. Si un fichier zip est envoyé, extrayez-le dans un environnement sécurisé (sandbox) et examinez le contenu avant d'ouvrir quoi que ce soit.
  3. Utilisez un gestionnaire de mots de passe dédié plutôt que le stockage du navigateur. Même si le trousseau d'accès d'un navigateur est compromis, le coffre-fort du gestionnaire reste isolé.
  4. Exécutez le code non fiable dans une machine virtuelle ou un conteneur isolé sans accès au réseau. Cela empêche l'attaquant de contacter un serveur C2.
  5. Activez l'authentification à deux facteurs (2FA) sur tous vos comptes. Si un mot de passe est volé, le second facteur empêche les connexions non autorisées.
  6. Maintenez vos outils de développement à jour et activez les vérifications d'intégrité automatiques lorsque cela est possible. Certains éditeurs signalent désormais lorsque des fichiers de base sont modifiés de manière inattendue.

Si vous soupçonnez avoir exécuté du code malveillant, partez du principe que le système est compromis. Sauvegardez vos données essentielles, effacez le disque et réinstallez le système d'exploitation. Un simple redémarrage n'éradiquera pas un mécanisme de persistance qui réécrit des fichiers dans des applications courantes.

En résumé : une seule ligne de JavaScript cachée peut transformer une démo de routine en une véritable opération de vol d'identifiants. Considérez chaque dépôt comme non fiable jusqu'à ce que vous l'ayez vérifié, et faites de l'isolation une partie intégrante de votre flux de travail par défaut. Le coût d'un moment d'inattention est bien supérieur à l'effort nécessaire pour vérifier un fichier.