The issue is in onnx.load — the code checks for symlinks to prevent path traversal, but completely misses hardlinks, which is the problem, since a hardlink looks exactly like a regular file on the filesystem.
The validator in onnx/checker.cc only calls is_symlink() and never checks the inode or st_nlink, so a hardlink walks right through every security check without any issues.
Especially dangerous in AI supply chain scenarios like HuggingFace — a single malicious model is enough to silently steal secrets from the victim's machine without them noticing anything.
| Score | Percentile |
|---|---|
| 0.01% | 1.10% |
| Base score | Version | Severity | Vector |
|---|---|---|---|
| 4.7 | 3.1 | — |
|
| Type | Value |
|---|---|
| GHSA | GHSA-cmw6-hcpp-c6jp ↗ |
| CVE | CVE-2026-34446 ↗ |
Vulnerable version ranges and first patched releases as published by GitHub.
| Ecosystem | Package | Vulnerable range | First patched | Vulnerable functions |
|---|---|---|---|---|
| pip | onnx | <= 1.20.1 | 1.21.0 | — |