See how open neural network exchange compares to other vendors in security performance
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, unpack2bit() and unpack4bit() resize unpacked arrays according to attacker-controlled TensorProto.dims without verifying that rawdata or int32data encodes the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor through onnx.numpyhelper.toarray() or onnx.reference.ReferenceEvaluator can therefore expand a small packed payload into a disproportionately large allocation and exhaust memory. This issue is fixed in version 1.22.0.
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. From 1.4.0 until 1.22.0, ScanInferenceFunction, ScanInferenceFunctionopset8, and ScanInferenceFunctionopset9 do not safely validate the required numscaninputs attribute. A missing attribute is dereferenced as a null pointer, while a negative value is converted to sizet and can reach an exceptional oversized allocation path. An untrusted model can therefore terminate or disrupt shape inference, including a negative-value model that can pass onnx.checker.checkmodel(). This issue is fixed in version 1.22.0.
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. From 1.2.1 until 1.22.0, ConvTranspose shape inference processes a weight tensor with fewer than three dimensions without a kernelshape attribute by deriving an empty effectivekernelshape and indexing it for the input's spatial dimensions. The flaw affects convTransposeShapeInferenceopset11() and the current inference path, and an untrusted model that can pass onnx.checker.checkmodel() can crash onnx.shapeinference.infershapes(), causing denial of service without demonstrated confidentiality or integrity impact. This issue is fixed in version 1.22.0.
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, RNNShapeInferenceopset1to6() processes malformed RNN and LSTM nodes from opsets 1 through 6 and GRU nodes from opsets 3 through 6 without verifying that the first input has rank three. The function accesses dim(0) and dim(1) on an undersized protobuf shape, which can read outside the intended repeated field and terminate an application when onnx.shapeinference.infershapes() processes an untrusted model that can pass onnx.checker.checkmodel(). This issue is fixed in version 1.22.0.