
Prova de conceito de exploit para CVE-2025-32434, uma vulnerabilidade de desserialização pickle no modo weights_only do PyTorch, demonstrando a geração e execução de arquivos tar maliciosos.
O ponto de entrada da vulnerabilidade é load() em torch/serialization.py
quando a proteção (weights_only) está habilitada: ao carregar um arquivo tar, estas funções seriam chamadas em cadeia:
load(): torch/serialization.py:1117_load_legacy(): de torch/serialization.py:1376 até torch/serialization.py:1406persistent_load(): torch/serialization.py:1474pickle_moudle.load(): torch/serialization.py:1487Unpickler.load(): torch/_weights_only_unpickler.py:214No modo weights_only_unpickler, tudo gira em torno da desserialização de pickle, então pesquisar o protocolo pickle pode ajudar. referência: https://rushter.com/blog/pickle-serialization-internals/
Este POC primeiro gera um arquivo tar malicioso. Observe que o nome do arquivo "storages" é exigido pelo pytorch; em seguida, ele carrega o arquivo tar para acionar a vulnerabilidade.
Agora o arquivo tar é executável em modo inseguro. O próximo passo é habilitar a proteção de segurança e contornar a verificação assim:
_pickle.UnpicklingError: Unsupported global: GLOBAL __builtin__.eval was not an allowed global by default. Please use `torch.serialization.add_safe_globals([eval])` to allowlist this global if you trust this class/function.