CVE-2026-115922
ONNX: Denial of service via unchecked expansion of packed sub-byte tensors in ONNX Python APIs
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, _unpack_2bit() and _unpack_4bit() resize unpacked arrays according to attacker-controlled TensorProto.dims without verifying that raw_data or int32_data encodes the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor through onnx.numpy_helper.to_array() 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.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
6.2
ONNX: Denial of service via unchecked expansion of packed sub-byte tensors in ONNX Python APIs
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, _unpack_2bit() and _unpack_4bit() resize unpacked arrays according to attacker-controlled TensorProto.dims without verifying that raw_data or int32_data encodes the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor through onnx.numpy_helper.to_array() 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.
- Record
CVE-2026-115922- CVSS 3.1
- 6.2 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-789
- Updated
- 2026-11-02
EUVDEUVD-2026-110049
6.2
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, _unpack_2bit() and _unpack_4bit() resize unpacked arrays according to attacker-controlled TensorProto.dims without verifying that raw_data or int32_data encodes the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor through onnx.numpy_helper.to_array() 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.
- Record
EUVD-2026-110049- CVSS 3.1
- 6.2 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-q69g-f4f5-v8m7
6.2
ONNX: Denial of service via unchecked expansion of packed sub-byte tensors in ONNX Python APIs
Summary
ONNX's Python tensor-materialization helpers could allocate memory according to attacker-controlled tensor dimensions without verifying that a packed sub-byte payload contained the declared number of elements.
A very small model could therefore cause a disproportionately large allocation when an application called onnx.numpy_helper.to_array() or constructed onnx.reference.ReferenceEvaluator with the model. The issue affected UINT2, INT2, UINT4, INT4, and FLOAT4E2M1 tensors stored in either raw_data or packed int32_data.
Technical details
The vulnerable _unpack_2bit() and _unpack_4bit() paths first allocated a small array based on the available packed bytes, then resized it to the shape declared in TensorProto.dims. They did not first confirm that the payload encoded enough logical elements for that shape.
For example, the reporter demonstrated a 66-byte model containing one packed byte and a declared dimension of 700,000,000. The model passed onnx.checker.check_model() and allocated approximately 700 MB while materializing the initializer, followed by another large allocation when executing the reference evaluator.
Loading, checking, or running shape inference on the serialized model alone did not trigger the allocation. The vulnerable tensor had to be materialized.
Impact
An application that materializes packed tensors from an untrusted model can exhaust available memory, causing denial of service. Memory corruption and code execution were not demonstrated.
Affected versions
- Affected: ONNX through 1.21.0
- Patched: ONNX 1.22.0
Remediation
Upgrade to ONNX 1.22.0 or later.
The primary fix validates the logical element count before resizing the unpacked NumPy array. A complementary checker change rejects an undersized packed payload before materialization.
- Materialization fix: onnx/onnx#8033
- Checker defense-in-depth: onnx/onnx#8038
The five affected tensor types and both storage formats were re-tested against the published ONNX 1.23.2 wheel and are rejected before the oversized allocation.
To verify the behavior using a released vulnerable package in an isolated environment, install onnx==1.21.0 with python -m pip install "onnx==1.21.0". Run memory-exhaustion demonstrations only with an appropriate process memory limit.
Severity
The vulnerable ONNX component processes the malicious model through a local library API or file boundary and is not itself bound to a network stack. Applications that expose ONNX model processing over a network should calculate an Environmental score with Modified Attack Vector set to Network.
- Record
GHSA-q69g-f4f5-v8m7- CVSS 3.1
- 6.2 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-789
- Updated
- 2026-11-02
NVD
6.2
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, _unpack_2bit() and _unpack_4bit() resize unpacked arrays according to attacker-controlled TensorProto.dims without verifying that raw_data or int32_data encodes the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor through onnx.numpy_helper.to_array() 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.
- Record
CVE-2026-115922- CVSS 3.1
- 6.2 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-789
- Updated
- 2026-11-02
OSV
6.2
ONNX: Denial of service via unchecked expansion of packed sub-byte tensors in ONNX Python APIs
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, _unpack_2bit() and _unpack_4bit() resize unpacked arrays according to attacker-controlled TensorProto.dims without verifying that raw_data or int32_data encodes the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor through onnx.numpy_helper.to_array() 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.
- Record
CVE-2026-115922- CVSS 3.1
- 6.2 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-789
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-115922
6.2
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, _unpack_2bit() and _unpack_4bit() resize unpacked arrays according to attacker-controlled TensorProto.dims without verifying that raw_data or int32_data encodes the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor through onnx.numpy_helper.to_array() 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.
- Record
DEBIAN-CVE-2026-115922- CVSS 3.1
- 6.2 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVGHSA-q69g-f4f5-v8m7
6.2
ONNX: Denial of service via unchecked expansion of packed sub-byte tensors in ONNX Python APIs
Summary
ONNX's Python tensor-materialization helpers could allocate memory according to attacker-controlled tensor dimensions without verifying that a packed sub-byte payload contained the declared number of elements.
A very small model could therefore cause a disproportionately large allocation when an application called onnx.numpy_helper.to_array() or constructed onnx.reference.ReferenceEvaluator with the model. The issue affected UINT2, INT2, UINT4, INT4, and FLOAT4E2M1 tensors stored in either raw_data or packed int32_data.
Technical details
The vulnerable _unpack_2bit() and _unpack_4bit() paths first allocated a small array based on the available packed bytes, then resized it to the shape declared in TensorProto.dims. They did not first confirm that the payload encoded enough logical elements for that shape.
For example, the reporter demonstrated a 66-byte model containing one packed byte and a declared dimension of 700,000,000. The model passed onnx.checker.check_model() and allocated approximately 700 MB while materializing the initializer, followed by another large allocation when executing the reference evaluator.
Loading, checking, or running shape inference on the serialized model alone did not trigger the allocation. The vulnerable tensor had to be materialized.
Impact
An application that materializes packed tensors from an untrusted model can exhaust available memory, causing denial of service. Memory corruption and code execution were not demonstrated.
Affected versions
- Affected: ONNX through 1.21.0
- Patched: ONNX 1.22.0
Remediation
Upgrade to ONNX 1.22.0 or later.
The primary fix validates the logical element count before resizing the unpacked NumPy array. A complementary checker change rejects an undersized packed payload before materialization.
- Materialization fix: onnx/onnx#8033
- Checker defense-in-depth: onnx/onnx#8038
The five affected tensor types and both storage formats were re-tested against the published ONNX 1.23.2 wheel and are rejected before the oversized allocation.
To verify the behavior using a released vulnerable package in an isolated environment, install onnx==1.21.0 with python -m pip install "onnx==1.21.0". Run memory-exhaustion demonstrations only with an appropriate process memory limit.
Severity
The vulnerable ONNX component processes the malicious model through a local library API or file boundary and is not itself bound to a network stack. Applications that expose ONNX model processing over a network should calculate an Environmental score with Modified Attack Vector set to Network.
- Record
GHSA-q69g-f4f5-v8m7- CVSS 3.1
- 6.2 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-789
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-115922
6.2
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, _unpack_2bit() and _unpack_4bit() resize unpacked arrays according to attacker-controlled TensorProto.dims without verifying that raw_data or int32_data encodes the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor through onnx.numpy_helper.to_array() 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.
- Record
UBUNTU-CVE-2026-115922- CVSS 3.1
- 6.2 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
onnxPyPI |
through 1.21.0 | 1.22.0 |
onnxDebian:12 |
All versions, plus listed versions 1.12.0-21.13.1-11.13.1-21.13.1-31.14.1-1 Show 16 moreShow less1.14.1-21.14.1-2.11.14.1-2.1~exp11.16.1-11.16.2-11.17.0-11.17.0-21.17.0-31.19.1-1~exp11.20.0-11.20.0-1~exp11.20.0-31.20.0-41.20.0-51.20.0-61.21.0-1 |
None known |
onnxDebian:13 |
All versions, plus listed versions 1.17.0-31.19.1-1~exp11.20.0-11.20.0-1~exp11.20.0-3 Show 4 moreShow less1.20.0-41.20.0-51.20.0-61.21.0-1 |
None known |
onnxDebian:14 |
All versions, plus listed versions 1.17.0-31.19.1-1~exp11.20.0-11.20.0-1~exp11.20.0-3 Show 4 moreShow less1.20.0-41.20.0-51.20.0-61.21.0-1 |
None known |
onnxPyPI |
before 1.22.0, plus listed versions 0.10.20.2.11.0.01.0.1 Show 45 moreShow less1.1.01.1.11.1.21.10.01.10.11.10.21.11.01.12.01.13.01.13.11.14.01.14.11.15.01.16.01.16.11.16.21.17.01.18.01.19.01.19.11.19.1rc11.2.11.2.21.2.31.20.01.20.0rc11.20.0rc21.20.11.20.1rc11.21.01.21.0rc11.21.0rc21.21.0rc31.21.0rc41.22.0rc11.22.0rc21.3.01.4.01.4.11.5.01.6.01.7.01.8.01.8.11.9.0 |
1.22.0 |
onnxUbuntu:22.04:LTS |
All versions, plus listed versions 1.7.0+dfsg-3build11.7.0+dfsg-3build21.7.0+dfsg-3ubuntu11.7.0+dfsg-3ubuntu2 |
None known |
onnxUbuntu:Pro:24.04:LTS |
All versions, plus listed versions 1.13.1-31.13.1-3build11.14.1-21.14.1-2.11.14.1-2.1build11.14.1-2.1build21.14.1-2.1ubuntu0.1~esm1 |
None known |
onnxUbuntu:26.10 |
All versions, plus listed versions 1.20.0-11.20.0-6 |
None known |
onnxUbuntu:26.04:LTS |
All versions, plus listed versions 1.17.0-3build11.20.0-1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-115922 is a medium vulnerability (CVSS 6.2) in Onnx, published October 26, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.13%, the 2nd percentile. Fixed in onnx 1.22.0.
References
github.com/onnx/onnx/security/advisories/GHSA-q69g-f4f5-v8m7
github.com/onnx/onnx/pull/8033
github.com/onnx/onnx/pull/8038
github.com/onnx/onnx/pull/8066
github.com/onnx/onnx/commit/05c1bc3bceceb8d3cf11e9e7fc7f19f971c44988
github.com/onnx/onnx/commit/8de2cf6aa47928e6515ac6d9e1a8b4758886a7df
Show 13 moreShow less
github.com/onnx/onnx/commit/dce5876d6cc6cc30157af7d26a752ef44976da8e
github.com/onnx/onnx/releases/tag/v1.22.0
nvd.nist.gov/vuln/detail/CVE-2026-115922
github.com/advisories/GHSA-q69g-f4f5-v8m7
github.com/CVEProject/cvelistV5/tree/main/cves/2026/115xxx/CVE-2026-115922.json
security-tracker.debian.org/tracker/CVE-2026-115922
github.com/onnx/onnx
ubuntu.com/security/CVE-2026-115922
cve.org/CVERecord?id=CVE-2026-115922
github.com/cveproject/cvelistv5/tree/main/cves/2026/115xxx/cve-2026-115922.json
github.com/onnx/onnx/security/advisories/ghsa-q69g-f4f5-v8m7
nvd.nist.gov/vuln/detail/cve-2026-115922
security-tracker.debian.org/tracker/cve-2026-115922