Views
No views yet
| Field | Value |
|---|---|
| Target | ARM-software/armnn |
| Version | v26.01 (HEAD f8beb5a) |
| CWE | CWE-122 Heap-Based Buffer Overflow |
| CVSS | 8.8 HIGH (AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H) |
| Platform | huntr.com |
| Status | SUBMITTED |
vector<unsigned int> (4 bytes/elem) allocated by GetNumElements(), then memcpy(GetNumBytes()) — diverge when attacker sets auxiliary tensor type = INT64 (8 bytes/elem), producing heap overflow of GetNumElements() * 4 bytes.ITfLiteParser::CreateNetworkFromBinaryFile("malicious.tflite")
-> ParseTranspose / ParseBatchToSpaceNd / ParseSlice / ParseStridedSlice / ParsePad
-> ValidateBuffer passes (checks file buffer size, not element type)
-> vector<unsigned int>(N) allocated (16 bytes for N=4)
-> memcpy(dest, src, GetNumBytes()) copies N*8=32 bytes
-> HEAP BUFFER OVERFLOW (16 bytes past end)1g++ -std=c++14 -fsanitize=address -g -O0 poc_tflite_type_confusion.cpp -o poc_tflite
2./poc_tflite 1 # Transpose -> ASAN: heap-buffer-overflow at TfLiteParser.cpp:1666
3./poc_tflite 2 # BatchToSpaceNd -> ASAN: heap-buffer-overflow at TfLiteParser.cpp:1906
4./poc_tflite 3 # StridedSlice -> ASAN: heap-buffer-overflow at TfLiteParser.cpp:2650
5./poc_tflite 4 # Pad -> ASAN: heap-buffer-overflow at TfLiteParser.cpp:3107ERROR: AddressSanitizer: heap-buffer-overflow
WRITE of size 32 at ... (0 bytes after 16-byte region)
SUMMARY: AddressSanitizer: heap-buffer-overflow ...| Operation | File:Line | Vector type |
|---|---|---|
| ParseTranspose | TfLiteParser.cpp:1666 | vector<unsigned int> |
| ParseBatchToSpaceNd blockShape | TfLiteParser.cpp:1906 | vector<unsigned int> |
| ParseBatchToSpaceNd cropsVector | TfLiteParser.cpp:1909 | vector<unsigned int> |
| ParseSlice begin | TfLiteParser.cpp:2206 | vector<unsigned int> |
| ParseSlice signedSize | TfLiteParser.cpp:2220 | vector<int> |
| ParseStridedSlice begin/end/stride | TfLiteParser.cpp:2650-2682 | vector<int> x3 |
| ParsePad | TfLiteParser.cpp:3107 | vector<unsigned int> |
DataType::Signed32 guard at line 2388.1if (auxTensorInfo.GetDataType() != armnn::DataType::Signed32)
2 throw ParseException("Auxiliary tensor must be of type INT32.");| File | Purpose |
|---|---|
poc_tflite_type_confusion.cpp | ASAN harness — 4 cases, all confirmed |
submission.md | Full markdown writeup (attachment) |
report.md | Plain prose — huntr form paste target |
poc-evidence.html | Dark terminal evidence page |
README.md | This file |