YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
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:
- Cycle detection for mutual recursion
- 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:
FunctionAwhich callsFunctionBFunctionBwhich callsFunctionA- Main graph calls
FunctionA
When inliner processes this:
- Encounters FunctionA call β inlines FunctionA
- FunctionA contains FunctionB call β inlines FunctionB
- FunctionB contains FunctionA call β inlines FunctionA
- ... infinite recursion β stack overflow β SIGSEGV
Note
The ONNX checker (onnx.checker.check_model()) does NOT detect mutual recursion - it passes validation.
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support