veilletech.fr
20 août Feed du jour
#03 SÉCURITÉ Faille

Rust : 86 minutes de porte dérobée dans arrayref

Votre Cargo.lock a-t-il bougé ce matin ?

Le paquet Rust arrayref, 245 millions de téléchargements, a été compromis pendant 86 minutes. Sa version 0.3.10 ajoutait une dépendance vers un typosquat dont le script de compilation exécutait un binaire distant : compiler suffisait à être infecté.

3 min de lecturevidéo 1:13
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Pourquoi ça compte
  3. Ce qu'il faut faire
  4. À retenir

Ce qui se passe

Le 20 août 2026, la version 0.3.10 du paquet Rust arrayref ajoute la première dépendance de son histoire — le paquet existe depuis une décennie. Cette dépendance s'appelle proc-macro1 : un typosquat de proc-macro2, la bibliothèque omniprésente de David Tolnay.

La chronologie tient en quelques heures. Un compte GitHub nommé dtolney est créé, à une lettre du vrai dtolnay. Le compte crates.io correspondant suit. Une première version de proc-macro1 est publiée : une copie conforme et inoffensive de l'original, pure mise en scène. Puis vient la version qui ajoute des dépendances de compilation qu'aucune bibliothèque de macros n'a de raison d'utiliser.

Quatre minutes plus tard, arrayref 0.3.10 sort du compte de son propriétaire légitime, mainteneur en règle depuis 2009 et présumé compromis. Dans la même minute, les cinq versions précédentes sont retirées en rafale, à quelques secondes d'intervalle : l'avertissement « version retirée » de Cargo pousse alors les utilisateurs à monter — droit dans le piège.

L'exposition aura duré environ 86 minutes avant que crates.io ne retire les deux paquets.

Pourquoi ça compte

Le mécanisme est ce qui rend cette attaque redoutable. Le code malveillant vit dans build.rs, le script de compilation. Compiler suffit à l'exécuter — aucune fonction du paquet n'a besoin d'être appelée. Pendant ce temps, la bibliothèque elle-même reste l'authentique proc-macro2 : les compilations réussissent, et rien n'apparaît dans la sortie.

Le script reconstruit son infrastructure depuis des fragments encodés, récupère un binaire de seconde étape en TLS avec la validation de certificat explicitement désactivée, le dépose dans un répertoire temporaire et le lance détaché — en s'échappant du groupe de processus de Cargo pour que la compilation se termine sans attendre.

La portée est le second problème. arrayref cumule environ 245 millions de téléchargements. La chaîne remonte jusqu'aux applications graphiques Rust via winit, et l'analyse des dépendances inverses ajoute blake3, les variantes de blake2, ainsi que des paquets de l'écosystème Ethereum et Solana.

Toute machine — poste de développeur ou agent d'intégration continue — ayant résolu arrayref ^0.3 à neuf pendant la fenêtre a exécuté la charge avec les privilèges de son utilisateur.

Ce qu'il faut faire

Vérifier les fichiers de verrouillage. Cherchez arrayref dans votre Cargo.lock : la version 0.3.10, ou toute entrée nommée proc-macro1, signifie que la charge s'est exécutée sur cette machine.

Chercher les traces. Un fichier rust-setup en zone temporaire, et tout trafic sortant vers l'adresse IP documentée par StepSecurity.

En cas de doute, traiter la machine comme compromise. Rotation de tous les identifiants, jetons et clés qu'elle pouvait atteindre — secrets d'intégration continue et clés de signature compris — puis reconstruction depuis des sources saines de tout artefact produit après l'exposition.

Si vous êtes indemne, épinglez la dernière version saine. Et surtout, ne résolvez jamais un avertissement de version retirée par une montée aveugle : c'est exactement le réflexe que l'attaquant a exploité.

À retenir

Une attaque de chaîne d'approvisionnement n'a pas besoin que son code soit appelé. Ici, build.rs s'exécute à la compilation, et la mise en scène — compte imitant un mainteneur connu, version de rodage inoffensive, retrait en rafale des versions saines — a transformé un garde-fou de Cargo en levier d'attaque.

Source : StepSecurity