ONNX Model Zoo

Yash1106/onnx-inliner-mutual-recursion-dos

By Yash1106 · ↓ 0 · ♥ 0 · Updated 2026-01-28

What's in this repo

This page lists the files in Yash1106/onnx-inliner-mutual-recursion-dos, including mutual_recursion_poc.onnx.

  • 1 ONNX models (.onnx files)
  • 4 files, including 1 .md, 1 .onnx, 1 .py
  • Last updated 2026-01-28

ONNX files

File Size Download
mutual_recursion_poc.onnx — Download

How to use

These ONNX files can be loaded with ONNX Runtime. To inspect a model graph, upload the file to the Netron viewer. Download links point to the original files on Hugging Face.

README

ONNX Inliner Mutual Recursion DoS (SIGSEGV)

Vulnerability Summary

CWE-674: Uncontrolled Recursion

The ONNX library's function inliner (onnx.inliner.inline_local_functions()) crashes with SIGSEGV (stack overflow) when processing models containing mutually recursive functions.

Affected Component

  • Package: onnx (NOT onnxruntime)
  • Function: onnx.inliner.inline_local_functions()
  • Vulnerable Code: onnx/inliner/inliner.cc:606
  • Tested Version: onnx 1.18.0

Root Cause

In inliner.cc, the append_node() function (line 581-606) recursively processes function calls without:

  1. Cycle detection for mutual recursion
  2. Depth limit for recursion

When Function A calls Function B, and Function B calls Function A, the inliner infinitely recurses until stack overflow.

Reproduction

pip install onnx

# Download PoC
wget https://huggingface.co/Yash1106/onnx-inliner-mutual-recursion-dos/resolve/main/mutual_recursion_poc.onnx
wget https://huggingface.co/Yash1106/onnx-inliner-mutual-recursion-dos/resolve/main/poc_mutual_recursion.py

# Run PoC
python3 poc_mutual_recursion.py
# Expected: Exit code 139 (SIGSEGV)

Or minimal reproduction:

import onnx
from onnx import inliner

model = onnx.load("mutual_recursion_poc.onnx")
inliner.inline_local_functions(model)  # CRASHES with SIGSEGV

Impact

  • Denial of Service: Any application using inline_local_functions() on untrusted models can be crashed
  • Exit Code: 139 (SIGSEGV - Segmentation Fault)

Technical Details

The malicious model contains:

  • FunctionA which calls FunctionB
  • FunctionB which calls FunctionA
  • Main graph calls FunctionA

When inliner processes this:

  1. Encounters FunctionA call → inlines FunctionA
  2. FunctionA contains FunctionB call → inlines FunctionB
  3. FunctionB contains FunctionA call → inlines FunctionA
  4. ... infinite recursion → stack overflow → SIGSEGV

Note

The ONNX checker (onnx.checker.check_model()) does NOT detect mutual recursion - it passes validation.

Model info

onnx region:us
↓ 0 ♥ 0

Created: 2026-01-28

Updated: 2026-01-28

View on Hugging Face

Files (4)

.gitattributes
README.md
mutual_recursion_poc.onnx ONNX
poc_mutual_recursion.py

Related models