veilletech.fr
31 août Feed du jour
#04 SÉCURITÉ Faille

Accelerate : un index de poids lit vos fichiers

Pas de correctif : la validation, c'est vous qui l'écrivez.

Hugging Face Accelerate ne vérifie pas les chemins listés dans la table weight_map d'un index de checkpoint découpé. Un index piégé fait lire un fichier arbitraire du système, ou bloque le chargement en pointant vers un tube nommé. Toutes les versions jusqu'à 1.14.0 sont touchées et aucun correctif n'existe encore.

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

Ce qui se passe

CVE-2026-69112 vise Hugging Face Accelerate jusqu'à la 1.14.0 incluse. Un modèle volumineux est livré en morceaux, et un fichier d'index — model.safetensors.index.json ou pytorch_model.bin.index.json — décrit dans sa table weight_map quel fichier contient quel tenseur.

Accelerate transmet ces noms de fichiers à l'ouverture sans les canoniser ni vérifier qu'ils restent sous le dossier du checkpoint. Une valeur comme ../../../../etc/passwd est donc ouverte, et son contenu chargé comme s'il s'agissait de poids. Un chemin absolu fonctionne également.

Les deux points d'entrée concernés sont load_checkpoint_in_model et load_checkpoint_and_dispatch, c'est-à-dire les deux fonctions par lesquelles passe le chargement d'un checkpoint découpé.

Second vecteur, plus discret : un tube nommé (FIFO). Sous Linux, l'ouverture d'un FIFO bloque jusqu'à l'arrivée d'un écrivain. Une entrée weight_map qui pointe vers un tube suspend indéfiniment le chargement — déni de service sans aucune élévation de privilège.

Pourquoi ça compte

Accelerate n'est pas une bibliothèque de niche : elle s'intercale entre PyTorch et Transformers pour l'entraînement multi-GPU, la précision mixte et le découpage de modèle, et pèse environ 27 millions de téléchargements PyPI par mois. Elle est présente par transitivité dans quantité de piles où personne ne l'a installée volontairement.

Les situations réellement exposées sont celles où l'index vient d'ailleurs :

Autrement dit : partout où le chemin du checkpoint n'est pas entièrement sous contrôle de l'application.

Ce qu'il faut faire

Vérifier d'abord la version installée :

Terminal
pip show accelerate

Aucune version corrigée n'est publiée à ce jour. La validation est donc à écrire soi-même, en amont de l'appel à Accelerate :

Python
import json
from pathlib import Path

def valider_index(chemin_index):
    with open(chemin_index) as f:
        index = json.load(f)
    base = Path(chemin_index).resolve().parent
    for tenseur, fichier in index.get("weight_map", {}).items():
        cible = (base / fichier).resolve()
        if not str(cible).startswith(str(base)):
            raise ValueError(f"chemin hors du checkpoint : {tenseur} -> {fichier}")
    return index

Le point important est resolve() : c'est lui qui écrase les .. avant la comparaison. Un filtre sur la chaîne brute se contourne par encodage.

Source : HOL — CVE-2026-69112