File size: 958 Bytes
7c4f1d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# llama.cpp torch.load() RCE PoC

## Vulnerability
Multiple conversion scripts in llama.cpp use `torch.load()` without `weights_only=True`, allowing arbitrary code execution.

## Affected Files
- `tools/mtmd/legacy-models/glmedge-convert-image-encoder-to-gguf.py`
- `tools/mtmd/legacy-models/minicpmv-convert-image-encoder-to-gguf.py`
- `tools/mtmd/legacy-models/convert_image_encoder_to_gguf.py`

## PoC
`malicious_projector.pt` contains a pickle payload that executes `touch /tmp/llama_cpp_rce_poc` when loaded.

## Reproduction
```bash
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

python tools/mtmd/legacy-models/convert_image_encoder_to_gguf.py \
    --llava-projector path/to/malicious_projector.pt \
    --model-dir /tmp

ls /tmp/llama_cpp_rce_poc  # File created = RCE
```

## Impact
RCE when users convert untrusted PyTorch models to GGUF format.

## Fix
```python
projector = torch.load(args.llava_projector, weights_only=True)
```