{"id":"CVE-2026-34446","aliases":["AZL-81986","DEBIAN-CVE-2026-34446","EUVD-2026-17987","GHSA-cmw6-hcpp-c6jp","PYSEC-2026-2241","UBUNTU-CVE-2026-34446"],"status":"published","title":"ONNX: Arbitrary File Read via ExternalData Hardlink Bypass in ONNX load","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","severity":{"version":"3.1","score":4.7,"vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00183,"percentile":0.07972,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-22","CWE-61"],"published":"2026-04-01T17:37:54Z","modified":"2026-11-05T05:40:51Z","fixes":[{"ecosystem":"PyPI","package":"onnx","fixed_in":["1.21.0"],"sources":["ghsa","osv"]},{"ecosystem":"Azure Linux:3","package":"pytorch","fixed_in":["2.2.2-14"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"1.20.1"},{"fixed":"1.21.0"}]}]},{"source":"osv","ecosystem":"Azure Linux:3","package":"pytorch","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.2.2-14"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.12.0-2","1.13.1-1","1.13.1-2","1.13.1-3","1.14.1-1","1.14.1-2","1.14.1-2.1","1.14.1-2.1~exp1","1.16.1-1","1.16.2-1","1.17.0-1","1.17.0-2","1.17.0-3","1.19.1-1~exp1","1.20.0-1","1.20.0-1~exp1","1.20.0-3","1.20.0-4","1.20.0-5","1.20.0-6","1.21.0-1"]},{"source":"osv","ecosystem":"Debian:13","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.17.0-3","1.19.1-1~exp1","1.20.0-1","1.20.0-1~exp1","1.20.0-3","1.20.0-4","1.20.0-5","1.20.0-6","1.21.0-1"]},{"source":"osv","ecosystem":"Debian:14","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.17.0-3","1.19.1-1~exp1","1.20.0-1","1.20.0-1~exp1","1.20.0-3","1.20.0-4","1.20.0-5","1.20.0-6","1.21.0-1"]},{"source":"osv","ecosystem":"PyPI","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.21.0"}]}],"versions":["0.1","0.2","0.2.1","1.0.0","1.0.1","1.1.0","1.1.1","1.1.2","1.10.0","1.10.1","1.10.2","1.11.0","1.12.0","1.13.0","1.13.1","1.14.0","1.14.1","1.15.0","1.16.0","1.16.1","1.16.2","1.17.0","1.18.0","1.19.0","1.19.1","1.19.1rc1","1.2.1","1.2.2","1.2.3","1.20.0","1.20.0rc1","1.20.0rc2","1.20.1","1.20.1rc1","1.21.0rc1","1.21.0rc2","1.21.0rc3","1.21.0rc4","1.3.0","1.4.0","1.4.1","1.5.0","1.6.0","1.7.0","1.8.0","1.8.1","1.9.0"]},{"source":"osv","ecosystem":"PyPI","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.21.0"}]}],"versions":["0.1","0.2","0.2.1","1.0.0","1.0.1","1.1.0","1.1.1","1.1.2","1.10.0","1.10.1","1.10.2","1.11.0","1.12.0","1.13.0","1.13.1","1.14.0","1.14.1","1.15.0","1.16.0","1.16.1","1.16.2","1.17.0","1.18.0","1.19.0","1.19.1","1.19.1rc1","1.2.1","1.2.2","1.2.3","1.20.0","1.20.0rc1","1.20.0rc2","1.20.1","1.20.1rc1","1.21.0rc1","1.21.0rc2","1.21.0rc3","1.21.0rc4","1.3.0","1.4.0","1.4.1","1.5.0","1.6.0","1.7.0","1.8.0","1.8.1","1.9.0"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.7.0+dfsg-3build1","1.7.0+dfsg-3build2","1.7.0+dfsg-3ubuntu1","1.7.0+dfsg-3ubuntu2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:24.04:LTS","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.13.1-3","1.13.1-3build1","1.14.1-2","1.14.1-2.1","1.14.1-2.1build1","1.14.1-2.1build2","1.14.1-2.1ubuntu0.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:25.10","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.17.0-3build1"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.20.0-1","1.20.0-6"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"onnx","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.17.0-3build1","1.20.0-1"]}],"products":[{"vendor":"linuxfoundation","product":"onnx"},{"vendor":"onnx","product":"onnx"}],"references":[{"url":"https://github.com/onnx/onnx/security/advisories/GHSA-cmw6-hcpp-c6jp","tags":["x_refsource_CONFIRM","Vendor Advisory","advisory","web"]},{"url":"https://github.com/onnx/onnx/commit/4755f8053928dce18a61db8fec71b69c74f786cb","tags":["x_refsource_MISC","Patch","fix","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-34446","tags":["web","advisory"]},{"url":"https://github.com/advisories/GHSA-cmw6-hcpp-c6jp"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/34xxx/CVE-2026-34446.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-34446","tags":["advisory"]},{"url":"https://github.com/onnx/onnx","tags":["package"]},{"url":"https://ubuntu.com/security/CVE-2026-34446","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-34446","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-34446","title":"ONNX: Arbitrary File Read via ExternalData Hardlink Bypass in ONNX load","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","status":"published","published":"2026-04-01T17:37:54.737Z","modified":"2026-04-02T14:10:36.637Z","cvss":[{"version":"3.1","score":4.7,"vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-22","CWE-61"],"updated_at":"2026-11-02T14:20:14.302133Z"}],"euvd":[{"id":"EUVD-2026-17987","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","status":"published","published":"2026-04-01T17:37:54Z","modified":"2026-04-02T14:10:36Z","cvss":[{"version":"3.1","score":4.7,"vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T19:25:23.121433Z"}],"ghsa":[{"id":"GHSA-cmw6-hcpp-c6jp","title":"ONNX: Arbitrary File Read via ExternalData Hardlink Bypass in ONNX load","description":"### Summary\nThe 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.\n\n### The Real Problem\nThe 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.\n\n### Impact\nEspecially 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.","status":"published","published":"2026-04-01T21:13:37Z","modified":"2026-04-01T21:13:39Z","cvss":[{"version":"3.1","score":4.7,"vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-22","CWE-61"],"updated_at":"2026-11-02T14:39:47.075804Z"}],"nvd":[{"id":"CVE-2026-34446","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","status":"published","published":"2026-04-01T18:16:30.66Z","modified":"2026-06-17T10:39:03.783Z","cvss":[{"version":"3.1","score":4.7,"vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"secondary"},{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-22","CWE-61"],"updated_at":"2026-11-02T14:12:12.73929Z"}],"osv":[{"id":"CVE-2026-34446","title":"ONNX: Arbitrary File Read via ExternalData Hardlink Bypass in ONNX load","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","status":"published","published":"2026-04-01T17:37:54.737Z","modified":"2026-10-28T10:49:33.568168671Z","cvss":[{"version":"3.1","score":4.7,"vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-22","CWE-61"],"updated_at":"2026-11-02T15:45:02.247031Z"},{"id":"DEBIAN-CVE-2026-34446","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","status":"published","published":"2026-04-01T18:16:30.66Z","modified":"2026-10-01T03:03:03.869682085Z","cvss":[{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T15:45:54.587575Z"},{"id":"GHSA-cmw6-hcpp-c6jp","title":"ONNX: Arbitrary File Read via ExternalData Hardlink Bypass in ONNX load","description":"### Summary\nThe 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.\n\n### The Real Problem\nThe 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.\n\n### Impact\nEspecially 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.","status":"published","published":"2026-04-01T21:13:37Z","modified":"2026-09-10T03:50:43.899271555Z","cvss":[{"version":"3.1","score":4.7,"vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-22","CWE-61"],"updated_at":"2026-11-02T15:46:45.28161Z"},{"id":"PYSEC-2026-2241","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","status":"published","published":"2026-04-01T18:16:30.66Z","modified":"2026-07-13T07:15:50.564237717Z","cvss":[{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:55.537808Z"},{"id":"UBUNTU-CVE-2026-34446","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","status":"published","published":"2026-04-01T18:16:00Z","modified":"2026-10-17T12:58:11.856240575Z","cvss":[{"version":"3.1","score":4.7,"vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"},{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T16:56:16.036833Z"},{"id":"AZL-81986","title":"CVE-2026-34446 affecting package pytorch for versions less than 2.2.2-14","description":"Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to version 1.21.0, there is an issue in onnx.load, the code checks for symlinks to prevent path traversal, but completely misses hardlinks because a hardlink looks exactly like a regular file on the filesystem. This issue has been patched in version 1.21.0.","status":"published","published":"2026-04-01T18:16:30Z","modified":"2026-11-05T05:40:51Z","updated_at":"2026-11-05T16:41:24.988217Z"}]}}
