2 points par GN⁺ 4 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Cas d’attaque par ingénierie sociale où un recruteur a approché la cible par message LinkedIn, sous prétexte de recruter un lead engineer, en demandant de relire un dépôt GitHub public
  • Le code soumis à revue contenait une porte dérobée déguisée en suite de tests, et la demande de "vérifier un problème de modules Node obsolètes" servait d’appât pour pousser à exécuter npm install
  • Après avoir eu des soupçons, le code a été inspecté non pas en local mais sur un VPS jetable, avec un agent en lecture seule ; le fichier problématique a été détecté en quelques secondes
  • Les commits du dépôt comme le profil du recruteur usurpaient l’identité de personnes réelles, se faisant passer respectivement pour un vrai développeur et une journaliste du milieu artistique
  • L’auteur en tire des enseignements de défense concrets : le doute, une bonne hygiène de sécurité et l’usage d’un agent en lecture seule se sont révélés plus efficaces qu’une lecture manuelle directe du code

Déroulement de l’approche

  • La semaine dernière, l’auteur a reçu un message LinkedIn d’un recruteur d’une petite startup crypto
    • Ils ont échangé plusieurs messages sur quelques jours, au sujet d’un proof of concept défaillant nécessitant un lead engineer
    • Le recruteur a transmis un dépôt GitHub public à examiner, en demandant de « vérifier le problème des modules Node obsolètes »
  • Les demandes de revue de code existant sont courantes, mais cette fois une impression étrange a poussé à renforcer la vigilance

Méthode d’inspection

  • Au lieu de cloner puis d’installer les dépendances, l’auteur a lancé un VPS jetable chez Hetzner et y a cloné le dépôt
  • Pi a été configuré en mode lecture seule, avec uniquement les outils de lecture de fichiers activés
    • Commande utilisée : pi --tools read,grep,find,ls
  • En demandant à l’agent de relire la base de code et de signaler les éléments suspects, il s’est presque immédiatement arrêté sur app/test/index.js

Structure de la porte dérobée

  • Le dépôt se présentait comme un frontend React + backend Node
  • Le piège se trouvait dans app/test/index.js, un fichier d’environ 250 lignes, déguisé en suite de tests
  • À l’intérieur, une URL était recomposée à partir de fragments pour être dissimulée
  • La charge utile était cachée parmi des brouillons de tests commentés, et permettait d’exécuter sur la machine de l’utilisateur tout ce que le serveur renvoyait
    • La charge utile se trouvait à la ligne 225

Mécanisme de déclenchement

  • Le fichier n’attendait même pas le lancement des tests
    • app/index.js exécutait const test = require('./test'), ce qui chargeait et lançait app/test/index.js
  • package.json reliait app/index.js à la phase de démarrage
  • L’élément clé était le script prepare : npm l’exécute automatiquement après npm install
    • Autrement dit, la simple installation des dépendances déclenchait la porte dérobée
  • La consigne de « vérifier le problème des modules Node obsolètes » n’était donc qu’un appât pour pousser à lancer npm install
  • Il aurait été possible d’exécuter la charge utile dans un bac à sable pour observer une charge utile de deuxième étape, mais la preuve qu’un code fourni par le serveur allait être exécuté a suffi pour s’arrêter là

Première identité usurpée

  • Les commits étaient signés du nom et de l’e-mail d’un véritable développeur full stack
    • Il dispose d’un profil LinkedIn ordinaire, d’un site personnel et d’un compte GitHub ancien
  • En prétendant avoir hérité de cette base de code, l’auteur l’a contacté
    • Le développeur a répondu n’avoir jamais travaillé pour cette entreprise, avoir déjà été usurpé sur GitHub par le passé avec suppression de dépôts, et n’avoir aucun lien avec ce dépôt-ci
    • Il a ajouté qu’il était lui-même en train de signaler ce type de dépôts
  • L’ensemble de l’historique, soit 39 commits, était attribué au nom d’un développeur qui n’avait jamais touché à ce dépôt

Deuxième identité usurpée

  • Le profil du recruteur appartenait en réalité à une véritable journaliste du monde de l’art, avec un parcours uniquement culturel et aucun élément technique
  • Quand l’auteur a répondu que l’installation ne fonctionnait pas, cette journaliste non technique s’est instantanément transformée en experte de npm et des versions de Node, insistant pour faire exécuter npm install

Cela peut arriver à n’importe qui

  • L’auteur connaissait déjà ce type d’attaque et en avait lu sur HN, mais s’est tout de même fait surprendre en étant directement ciblé
    • Il avait des doutes dès le premier message, mais un jour de fatigue ou d’urgence, il aurait pu lancer npm install sans y réfléchir davantage
  • Les messages LinkedIn demandant de relire un dépôt appellent à un minimum de méfiance et d’hygiène de sécurité
  • Relire le code avec un agent en lecture seule s’est révélé plus efficace qu’une inspection manuelle
    • La porte dérobée était déguisée en code maladroit de débutant, mais l’agent l’a repérée en quelques secondes
  • Le dépôt a été signalé à GitHub et le recruteur à LinkedIn, mais pour l’instant rien n’a changé et le code reste toujours en ligne

1 commentaires

 
GN⁺ 4 시간 전
Avis sur Hacker News
  • Un recruteur d’une petite startup crypto a envoyé un dépôt GitHub public en demandant d’examiner une preuve de concept cassée et de vérifier un « deprecated Node modules issue » : tout cela relevait en fait d’un phishing incitant à faire npm install
    Le script prepare s’exécutait automatiquement après npm install et servait de porte dérobée en lançant en local du code arbitraire fourni par un serveur ; le fait qu’on puisse se faire piéger ainsi sur LinkedIn paraît d’une gravité étonnante

    • LinkedIn ne fournit aucun moyen à une entreprise de démentir qu’un utilisateur prétend travailler chez $company, et il suffit que ce soit écrit sur le profil pour apparaître sur la page officielle de l’entreprise
      Notre société aussi a eu de faux recruteurs menant la même arnaque ; leurs profils semblaient assez crédibles, avec même beaucoup d’activité liée à LinkedIn Premium, mais ce n’étaient pas de vrais employés
      On a beau les signaler, ils ne sont pas retirés ; au final, le problème n’a été réglé qu’en payant un verre à une connaissance qui travaille chez LinkedIn, mais toutes les startups n’ont pas ce genre de relais
    • Si c’est un ami, il ne faut pas le laisser utiliser NPM
      Vu le nombre de gens qui continuent à se faire avoir, c’est incompréhensible qu’on n’utilise pas un outil comme PNPM pour bloquer cette faille évidente et si souvent exploitée : l’exécution de code arbitraire pendant le téléchargement du code
      Les outils qui exécutent du code arbitraire au moment même où l’on veut simplement télécharger du code doivent disparaître
    • Cette méthode était déjà une technique bien rodée sur Upwork, surtout pendant le boom crypto/NFT de 2021-2022, puis elle s’est propagée au-delà des seuls projets crypto à de nombreuses catégories
      Le dernier exemple dont je me souviens était un téléchargement déguisé en fichier d’écran de veille Windows .scr, et le fait que ça arrive maintenant sur LinkedIn marque une étape encore pire
      La plateforme s’en souciera sans doute peu, puisque cela ressemble à une « hausse des offres d’emploi », un peu comme les réseaux publicitaires de Google ou Meta se soucient peu des publicités frauduleuses
    • J’avais déjà vu du phishing visant à récupérer une adresse mail puis à envoyer des trucs du genre bullshitpowershellladendoucument.pdf.docx, mais l’envoyer directement en DM LinkedIn est une stratégie assez audacieuse
    • J’ai passé beaucoup d’entretiens récemment et je suis tombé plusieurs fois sur des escrocs évidents ; j’espère que ce n’est pas parce que j’ai l’air assez bête pour me faire avoir, mais simplement parce que ce genre d’arnaque devient plus courant
  • Ça relève clairement du crime, et je ne comprends pas pourquoi il n’existe pas de point de contact bien connu, une sorte de 911 de la cybercriminalité, pour signaler ce genre de choses et obtenir de l’aide
    La société doit rattraper les risques réels et mettre rapidement en place un réseau de soutien ; face au crime organisé, il faut une défense organisée

    • Malheureusement, les cybercriminels savent tous utiliser une étrange astuce : commettre leurs crimes depuis des pays qui ne s’intéressent pas à la criminalité
    • https://www.ic3.gov
      Vous n’aurez probablement jamais de réponse, mais pour les citoyens américains, et peut-être même pour tout le monde, c’est à ma connaissance ce qui se rapproche le plus d’un 911 d’Internet
    • Le problème fondamental, c’est qu’il n’existe pas de 911 mondial valable partout
      Le deuxième problème, c’est l’asymétrie : créer ce type d’arnaque demande un effort proche de zéro, tandis qu’identifier puis poursuivre les responsables demande énormément de travail et des coûts astronomiques
    • Pour le dire cyniquement, c’est une branche particulièrement haute et difficile à atteindre dans l’arbre des mauvaises choses que les gens font subir aux autres
      On est à peu près au même niveau que les appels d’escroquerie se faisant passer pour le support Microsoft et ciblant les personnes âgées, et il est presque impossible de mettre la main sur les suspects
      Soit ils cachent extrêmement bien leurs traces, soit, plus souvent, ils vivent dans des pays où les autorités ne se soucient pas des arnaques visant les Occidentaux, voire les tolèrent
    • Le FBI a bien IC3, mais la réponse à la cybercriminalité est lamentable et pratiquement inutile
      Même si vous signalez le crime, il y a de fortes chances qu’on ne vous aide pas et qu’on ne vous contacte pas
  • C’est désormais dangereusement proche d’un exercice technique d’entretien tout à fait ordinaire
    Quelqu’un qui vous envoie un dépôt en disant que l’installation est cassée et vous demande d’y jeter un œil, c’est une situation naturelle, et beaucoup de développeurs, fatigués ou en recherche d’emploi, peuvent lancer npm install sans trop réfléchir

    • Dans le contexte d’un entretien, c’est encore pire
      On ne veut pas avoir l’air lent, donc on saute l’étape qui consisterait à demander si l’on a seulement le droit d’exécuter cela
  • « J’ai signalé le dépôt à GitHub et le recruteur à LinkedIn, mais rien n’a encore changé et le code est toujours en ligne » : ah, Microsoft

    • J’ai déjà vu sur LinkedIn une publicité déguisée en reportage de CBC Canada News
      Elle menait vers une fausse vidéo où le Premier ministre canadien annonçait un plan d’investissement crypto pour tous les Canadiens, avec même un lien d’inscription ; après signalement, on m’a répondu qu’aucune violation des règles n’avait été constatée
    • N’est-ce pas étrange ? Microsoft possède LinkedIn, GitHub et NPM
      Les trois ont des problèmes de sécurité ou de fiabilité, et plus Microsoft s’enfonce dans l’IA, plus la situation semble empirer au lieu de s’améliorer
      Je ne sais pas où passe cette fameuse productivité interne dopée à l’IA, parfois présentée comme multipliée par 10
    • Il aurait fallu le signaler comme une violation du DMCA
      Là, ça aurait été retiré immédiatement
  • Il semble qu’ils utilisent le même domaine pour plusieurs cibles
    Un fil Reddit d’il y a 3 mois mentionne quelque chose de similaire : https://www.reddit.com/r/openclaw/comments/1rlet0h/someone_t...

  • Je ne comprends pas pourquoi tous les systèmes d’exploitation du monde n’ont pas encore bloqué npm
    Ces gens-là n’apprendront jamais

    • Cela n’a rien à voir avec npm en soi
      Cette arnaque aurait été possible avec de nombreuses autres technologies, et même avec un Makefile
  • J’aimerais qu’il existe enfin un vrai framework de virtualisation correct sur Mac
    Télécharger au hasard des scripts sur Internet sans protection, comme en 1995, commence sérieusement à me lasser
    Quand on rencontre des inconnus et qu’on fait entrer leurs affaires au plus profond de son ordinateur, il ne faut pas oublier de porter un équipement de protection

    • Exécuter au hasard des scripts curl | bash venant de GitHub, AUR ou NPM, c’est tout aussi mauvais, mais beaucoup de développeurs ici gardent encore des présupposés douteux sur cette mauvaise pratique
      Les divers petits incidents de type Shai-Hulud qui ont circulé ces dernières semaines montrent bien à quel point c’est problématique
    • Il existe déjà une méthode convenable sur Mac
      Dans IntelliJ, on peut configurer l’exécution des commandes npm à l’intérieur d’un conteneur Docker
  • Toutes les propositions d’emploi que j’ai reçues sur LinkedIn semblaient extrêmement suspectes
    Elles demandaient de postuler via la plateforme, d’enregistrer une vidéo de présentation ou de passer un test de code de calibrage caché derrière une plateforme de code

    • Mon frère est resté longtemps sans emploi à cause d’une maladie, puis il a reçu sur LinkedIn une « offre d’emploi » qui semblait crédible
      On lui a demandé d’émettre un chèque pour la caution d’un ordinateur portable professionnel ; même si, vu de l’extérieur, cela n’avait aucun sens, après une longue période de recherche il était désespéré et vraiment heureux d’avoir enfin trouvé un travail
      Les personnes durablement au chômage peuvent devenir si désespérées qu’elles ignorent des signaux d’alerte majeurs qui ne tromperaient jamais quelqu’un disposant d’une épargne suffisante ou déjà en poste et simplement en train de changer d’emploi
  • Est-ce que ce n’est pas comme ça que la plupart des auteurs de paquets NPM se font pirater ces jours-ci ?
    On dirait aussi que le responsable d’axios a subi la même approche via LinkedIn

    • On dirait qu’il s’est pris à son propre piège
  • Je n’utilise LinkedIn que pour les offres d’emploi, mais depuis quelques mois il y a beaucoup trop d’annonces inutiles
    On voit défiler des tonnes d’annonces d’entreprises du genre Ladders, Swooped, et j’ai l’impression qu’il est temps d’abandonner complètement LinkedIn