| --- |
| tags: |
| - security |
| - proof-of-concept |
| - vulnerability-disclosure |
| --- |
| |
| # Arm NN deserializer stack buffer overflow proof-of-concept (CWE-787) |
|
|
| This repository contains a single proof-of-concept file, `poc.armnn` (296 bytes), used for coordinated disclosure of a stack-based buffer overflow in the Arm NN deserializer (`armnnDeserializer::ToTensorInfo`). It is a security research artifact. Loading the file triggers a memory-safety crash during deserialization. It performs no code execution and has no effect other than crashing the process that loads it. |
|
|
| ## File |
|
|
| - `poc.armnn`: a serialized Arm NN graph (`armnnSerializer` flatbuffers schema) with a single `InputLayer` whose output tensor declares a `dimensionSpecificity` vector of length 64. The deserializer copies that vector into a fixed 5-element stack array (`bool[armnn::MaxNumOfTensorDimensions]`) without a bounds check. |
|
|
| ## Trigger |
|
|
| Loading the file through the public deserializer API crashes: |
|
|
| ```cpp |
| auto d = armnnDeserializer::IDeserializer::Create(); |
| d->CreateNetworkFromBinary(bytes_of_poc_armnn); // stack-buffer-overflow in ToTensorInfo |
| ``` |
|
|
| Under AddressSanitizer this reports a `stack-buffer-overflow` WRITE in `armnnDeserializer::ToTensorInfo` (`Deserializer.cpp:756`), reached from `CreateNetworkFromBinary -> CreateNetworkFromGraph -> SetupInputLayers -> ToTensorInfo`. The file is a structurally valid flatbuffers buffer and passes the deserializer's Verifier. |
|
|
| ## Scope and safety |
|
|
| This file only crashes the loader. Do not load it with an Arm NN build you depend on. It is intended for controlled reproduction of the vulnerability during disclosure. |
|
|