coreml-dos-poc / README.md
WolfpackArmy's picture
Upload folder using huggingface_hub
0ef7e97 verified
# Core ML Model DoS PoC
Proof-of-concept Core ML model files (`.mlmodel`) demonstrating denial-of-service vectors in protobuf-based model parsers.
Core ML models use Protocol Buffers format as defined by Apple's [coremltools](https://github.com/apple/coremltools) specification.
## Files
| File | Size | Vector |
|------|------|--------|
| `poc_oom_weights.mlmodel` | ~43 B | OOM via huge tensor shape declaration (innerProduct: 1M x 1M = ~4TB if allocated) |
| `poc_many_layers.mlmodel` | ~321 KB | 10,000 neural network layers causing parser overhead and memory pressure |
| `benign.mlmodel` | ~56 B | Minimal valid model for baseline comparison |
| `generate_pocs.py` | - | Generator script for reproducibility |
## Attack Vectors
### 1. OOM via Huge Tensor Shapes (`poc_oom_weights.mlmodel`)
A crafted protobuf declares a neural network `innerProduct` layer with `inputChannels=1000000` and `outputChannels=1000000`. If a parser naively pre-allocates the weight matrix, this requires 10^12 float32 values (~4 TB of memory), causing an out-of-memory condition.
### 2. Many Layers Parsing Overhead (`poc_many_layers.mlmodel`)
A neural network spec containing 10,000 activation layers. Parsers that build full graph representations or validate layer connectivity may experience significant overhead or memory pressure when processing this many layers.
## Reproduction
```bash
python generate_pocs.py
```
Then load the generated `.mlmodel` files with any Core ML parser (e.g., `coremltools.utils.load_spec()`).
## Impact
- Denial of service in any application that loads untrusted `.mlmodel` files
- Applicable to model hosting platforms, ML pipelines, and iOS/macOS apps accepting user-provided models