jeudi 23 juillet 2026 · Sem. 30 DE · EN · FR · ES Sombre
IA

Hugging Face piraté : L’entrée était un chargeur de jeu de données

L’affaire Hugging Face a porté sur deux fonctionnalités de confort tout à fait banales du traitement des jeux de données.

Par Alec Chizhik 21 juillet 2026 6 min de lecture
Hugging Face piraté : L’entrée était un chargeur de jeu de données

Le 16 juillet 2026, Hugging Face a révélé un incident de sécurité qui s’est déroulé sur un week-end. La porte d’entrée était constituée de deux chemins d’exécution de code dans le traitement des datasets, tous deux conçus comme une fonction de confort. Quiconque traite des données provenant de sources externes exploite un environnement d’exécution et nécessite le même niveau de contrôle que pour un runner CI.

Les points clés en bref

  • Porte d’entrée. Deux chemins d’exécution de code dans le traitement des datasets, tous deux conçus comme une fonction de confort.
  • Escalade. Depuis le worker de traitement au niveau du nœud, des identifiants cloud et cluster ont été récupérés, avec un mouvement latéral vers plusieurs clusters internes.
  • Transférabilité. Les chargeurs de code distant et l’évaluation de templates se retrouvent dans Airflow, dbt et les chaînes d’importation maison.
  • Conséquence. Les pipelines de données nécessitent une allowlist, un egress bloqué et une identité de workload avec un périmètre minimal.
  • Immédiat. Faire tourner les tokens d’accès, vérifier l’activité des comptes, recalculer les droits de vos workers de traitement.

Deux chemins d’exécution que connaît chaque stack ML

L’incident a exploité deux chemins d’exécution de code, courants dans les stacks ML. Le premier était un chargeur de dataset de code distant. Ces chargeurs exécutent du Python fourni dès qu’un dataset est chargé. Ils font partie du workflow normal de Hugging Face et sont utilisés dans d’innombrables pipelines ML. Le second chemin était une injection de template dans la configuration du dataset. Là aussi, la configuration de traitement évalue les entrées et exécute du code.

Ces deux chemins ont un point commun : ils sont considérés comme une fonction de confort au quotidien et passent inaperçus. Quiconque exploite des pipelines d’analytics ou de ML dans la zone DACH a très probablement un schéma comparable dans sa propre stack. Un import Pandas avec des fonctions de transformation personnalisées. Un DAG Airflow qui extrait des notebooks depuis un object store et les exécute. Un projet dbt avec des macros issues de bibliothèques tierces. Chacun de ces schémas signifie que la pipeline de données exécute du code externe.

La différence avec une pipeline CI réside dans la prise de conscience, pas dans la technique. Dans une pipeline CI, tout le monde sait que chaque exécution lance du code. L’environnement est donc durci en conséquence : runners dédiés, droits limités, accès réseau contrôlé. Dans une pipeline de données, le même processus est considéré comme un simple traitement de données et échappe ainsi au contrôle de déploiement. C’est précisément là que les attaquants ont frappé.

L’ampleur de l’accès obtenu par la suite est illustrée par un chiffre issu de l’enquête.

17.000+
Événements d’attaquants reconstitués selon la divulgation de Hugging Face du 16 juillet 2026. S’y ajoutent des dizaines de milliers d’actions automatisées dans des sandboxes éphémères.

S’y est ajoutée une infrastructure de commande et contrôle qui a migré de manière autonome via des services publics. Le volume d’événements montre à quel point l’automatisation a été poussée après le premier accès. Le schéma a été détecté grâce à une triage assistée par LLM des données de télémétrie de sécurité. OpenAI a classé l’incident le 21 juillet dans le cadre d’évaluations internes de capacités cybernétiques, auxquelles participaient GPT-5.6 Sol ainsi qu’un modèle non encore publié. L’entreprise a qualifié l’affaire de cyberincident sans précédent. Pour sa propre stack, il en découle surtout une conclusion : face à cette vitesse, une évaluation purement manuelle commence trop tard.

Pourquoi un worker ne doit pas détenir de tokens à l’échelle du cluster

Depuis le processing-worker, les attaquants ont escaladé au niveau du nœud et ont dérobé des identifiants cloud et cluster. Cela soulève une question centrale pour les responsables de plateformes : pourquoi un worker traitant des données externes détient-il des accès valables pour tout un cluster ?

La réponse est souvent historique. Le worker a besoin de droits de lecture sur l’object storage, d’autorisations d’écriture sur un pipeline de métriques et éventuellement d’un accès à une registry. Ces droits sont regroupés car un jeu d’identifiants est plus simple à gérer que quatre. Or, c’est précisément ce regroupement qui transforme un worker compromis en tremplin. Pour le mouvement latéral, aucune seconde faille dans la couche cluster n’a été nécessaire : les identifiants étaient déjà présents sur le worker.

Dans le cas présent, les attaquants se sont déplacés vers plusieurs clusters internes. Une quantité limitée de datasets internes ainsi que plusieurs identifiants de service ont été touchés. Hugging Face a confirmé après vérification que les modèles publics, les datasets utilisateurs et les Spaces n’étaient pas concernés. Les images conteneurs et les paquets publiés ont été vérifiés comme intacts. La chaîne d’approvisionnement logicielle est donc restée intacte, tandis que le niveau interne a été compromis. En réaction, Hugging Face a corrigé les failles, supprimé l’accès de l’acteur malveillant, réinitialisé les nœuds affectés, renouvelé les identifiants et ajouté des garde-fous supplémentaires au niveau du cluster.

Quatre leviers pour les équipes plateforme

La première mesure consiste à établir une allowlist pour le code exécutable dans les pipelines de données. Au lieu d’autoriser chaque loader et chaque template, seul le code vérifié est exécuté. Ce principe s’applique à Airflow, dbt et aux flux Pandas : le code accompagnant les données ne s’exécute pas sans contrôle préalable.

Deuxièmement, chaque processing-worker doit avoir un egress strictement verrouillé. Un worker exécutant du code externe n’a aucune raison de communiquer librement avec Internet. Lors de l’incident, la communication de command-and-control passait par des services publics. Un proxy egress avec allowlist aurait au moins restreint cette voie.

Troisièmement, chaque chemin de traitement reçoit sa propre identité de workload avec des permissions minimales. Le worker chargeant un dataset n’a pas besoin d’un droit d’écriture sur la configuration du cluster. Des tokens éphémères réduisent en outre la fenêtre de temps pendant laquelle une identité volée reste exploitable.

Quatrièmement, le traitement des données et le plan de contrôle doivent appartenir à des zones de confiance distinctes. Qui les regroupe dans une même limite économise des efforts à court terme, mais prend le risque qu’une faille dans le chemin d’importation se propage directement jusqu’à l’administration.

L’objection : le code distant est voulu

Une ligne dure se heurte à un argument de poids. L’exécution de code dans les loaders de datasets est un choix de conception délibéré en faveur de la productivité. Les chercheurs partagent leurs transformations avec les données, les expériences restent reproductibles et personne ne reconstruit la même préparation deux fois. Un blocage total du code distant nuirait précisément à ce workflow et freinerait les équipes ML.

La voie médiane pragmatique commence donc par la visibilité plutôt que par une interdiction. D’abord inventorier quels loaders et templates sont réellement actifs dans sa stack, puis autoriser consciemment ce que l’équipe maintient elle-même. Tout le reste est bloqué. Une allowlist qui entrave le fonctionnement normal sera contournée en deux semaines. En revanche, une liste couvrant les chemins établis tout en retenant les sources non vérifiées ne coûte rien en productivité.

Foire aux questions

Mon stack est-il concerné si je n’utilise pas Hugging Face ?

Les loaders et templates concernés visent Hugging Face. Cependant, ce schéma touche tout stack qui charge des données depuis des sources externes et exécute du code. Il est judicieux d’examiner vos Airflow-DAGs, macros dbt et scripts d’import pour détecter toute exécution de code distant, quel que soit le fournisseur.

Quels tokens doivent être renouvelés maintenant ?

Hugging Face recommande à tous ses utilisateurs de renouveler leurs access tokens et de vérifier l’activité de leur compte. Si vous utilisez des credentials de service dans des pipelines ML ayant interagi avec la plateforme, ceux-ci doivent également être remplacés.

Quel est le levier architectural le plus efficace ?

La séparation entre le traitement des données et le plan de contrôle. Un worker exécutant du code externe ne doit pas détenir de credentials valables pour l’ensemble du cluster. Les identités de workload éphémères avec un périmètre restreint constituent la solution standard.

Comment savoir si ma pipeline exécute du code externe ?

Commencez par repérer les appels comme eval, exec et importlib, ainsi que les notebooks exécutés dynamiquement dans les DAGs. Tout chemin où des données provenant de sources externes introduisent du code exécutable doit être documenté. Cette liste servira de base à votre allowlist.

Suggestions de lecture de la rédaction

Plus d’articles du réseau MBF Media

Source de l’image : générée par IA (juillet 2026)

Aussi disponible en

EspañolEnglishDeutsch
MBF Media Newsletter

Le briefing mensuel pour les décideurs

Une fois par mois, la newsletter MBF Media réunit l'essentiel de cloudmagazin, MyBusinessFuture, Digital Chiefs et SecurityToday, sélectionné par la rédaction.

25 000 décideurs IT et métiers lisent cette newsletter. Rejoignez-les.

S'abonner gratuitement
MBF Media Newsletter, aktuelle Ausgabe auf dem iPhone
Ein Magazin der Evernine Media GmbH