# 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