Pesquisadores da JFrog identificaram modelos de aprendizado de máquina maliciosos no repositório Hugging Face, cuja instalação pode levar à execução de código do atacante para obter controle sobre o sistema do usuário. O problema é causado pelo fato de que alguns formatos de distribuição de modelos permitem a incorporação de código executável, por exemplo, modelos que utilizam o formato 'pickle' podem incluir objetos serializados em Python, além de código que é executado durante o carregamento do arquivo, enquanto modelos do TensorFlow Keras podem executar código através do Lambda Layer.
Para evitar a disseminação de modelos maliciosos no Hugging Face, é aplicado um escaneamento para detectar a injeção de código serializado, mas os modelos maliciosos identificados mostram que as verificações existentes podem ser contornadas. Além disso, o Hugging Face, na maioria dos casos, apenas marca os modelos como perigosos, sem bloquear o acesso a eles. Foram identificados cerca de 100 modelos potencialmente maliciosos, dos quais 95% são destinados ao uso com o framework PyTorch e 5% com TensorFlow. As modificações maliciosas mais comuns incluem captura de objeto, organização de acesso remoto ao sistema (reverse shell), execução de aplicativos e gravação em arquivo.

Observa-se que, com base nas ações realizadas, a maioria dos modelos maliciosos identificados foi criada por pesquisadores de segurança que tentam obter recompensas por descobrir vulnerabilidades e métodos de contorno da proteção do Hugging Face (por exemplo, em vez de um ataque real, esses modelos tentam executar uma calculadora ou enviar uma solicitação de rede com informações sobre o sucesso do ataque). No entanto, também existem instâncias que acionam um reverse shell para conectar o atacante ao sistema.
Por exemplo, os modelos 'baller423/goober2' e 'star23/baller13' visam realizar ataques a sistemas que carregam arquivos de modelo no PyTorch através da função torch.load(). Para facilitar a execução do código, é usado o método '__reduce__' do módulo pickle, que permite inserir qualquer código Python no processo de desserialização que ocorre durante o carregamento do modelo.
Fonte: opennet.ru
