Osegi
Sécurité·2 min de lecture

Fausse offre d'emploi : un ZIP lance un malware via git status

Un faux recruteur de Cryptic Heaven a envoyé à un développeur un ZIP au dossier .git piégé. Un simple git status peut suffire à télécharger du code malveillant.

A developer's laptop screen showing a terminal running git status next to a ZIP archive named Contract-2026.zip.
Image: Хабр

Un développeur a reçu sur LinkedIn un message d'un recruteur de Cryptic Heaven, société censée bâtir un système financier pour les cartes de crédit crypto. L'offre semblait banale. L'archive ZIP qui suivait l'était beaucoup moins : un simple git status dans le mauvais dossier peut déclencher le piège.

Après sa demande de précisions, le recruteur a envoyé un lien vers un contrat, une fiche de poste et un projet. Il menait à Contract-2026.zip, qui contenait un README.md, un contract.docx et un répertoire .git complet, avec historique, plusieurs branches et réglages locaux. Le README invitait à parcourir trois branches dans l'ordre : le poste, le contrat, puis le code. Le contrat était un modèle vide, sans entité juridique, rémunération ni juridiction. L'annonce de Smart Contract Developer était elle aussi largement incomplète.

Comment fonctionne le piège Git ?

Git peut lancer des programmes externes, et l'attaquant a préparé deux déclencheurs. D'abord, core.hooksPath dans .git/config désigne un autre dossier pour les hooks (des scripts exécutés lors d'événements). Il contenait un script post-checkout, lancé après un changement de branche. D'où la consigne du README de passer d'une branche à l'autre.

Ensuite, un filtre « clean » personnalisé nommé ltr, que Git utilise pour transformer le contenu des fichiers avant de les stocker. Une règle d'attributs avec un joker l'applique à tous les fichiers. Pour savoir si des fichiers ont changé, git status peut les faire passer par ce filtre. Un git status ordinaire, que certains éditeurs exécutent seuls, peut donc lancer le script .git/ltr.

L'auteur l'a vérifié sur un dépôt de test inoffensif : git status a bien appelé le filtre, et un changement de branche a aussi appelé post-checkout.

Que fait le script ?

C'est un script shell avec un mécanisme de debounce : chaque appel du filtre met à jour un horodatage, et un processus en arrière-plan attend deux secondes sans nouvel appel pour n'agir qu'une fois. Un répertoire créé avec mkdir sert de verrou. Le script détecte ensuite le système, télécharge du code depuis un sous-domaine de vercelscript.vercel.app et l'exécute, via sh sous Linux et macOS ou PowerShell sous Windows. Sorties et erreurs partent dans /dev/null, l'utilisateur peut ne rien remarquer.

Ce que fait le code téléchargé reste impossible à établir avec le seul ZIP. Il pourrait s'agir d'un chargeur d'étape suivante, d'un vol de données ou d'autre chose.

À retenir : un dépôt reçu en archive avec son dossier .git n'équivaut pas à un clone depuis GitHub ou GitLab, et l'ouvrir dans un IDE peut être risqué.

Des apps à découvrir

SUMO : le puzzle de nombres

Touche les bonnes cases, additionne, atteins l'objectif. Facile à apprendre, difficile à maîtriser. Gratuit, pour tous les âges.

Mots-clés:gitmalwarelinkedinjob scamcryptic heavendeveloper security

Plus d'actus de ce jour

Tout voir →

Plus dans: Sécurité

Tout voir →