{"id":"CVE-2026-59156","aliases":["DEBIAN-CVE-2026-59156","EUVD-2026-83121","GHSA-xvwr-x6ch-v2fq","UBUNTU-CVE-2026-59156"],"status":"published","title":"OpenImageIO: Unbounded recursion in FITS header parser leads to stack overflow","description":"OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, A crafted fits stream containing consecutive 2880-byte header blocks without the mandatory end keyword makes fitsinput::read_fits_header() call itself without a depth bound. repeated recursive parsing exhausts the application stack, resulting in denial of service. The affected implementation is identified by src/fits.imageio/fitsinput.cpp, FitsInput::read_fits_header(), END keyword, and 2880-byte FITS header blocks, which define the relevant source path, functions, state, and trigger. This issue is fixed in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.","severity":{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00363,"percentile":0.30534,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-674"],"published":"2026-09-18T15:34:19Z","modified":"2026-10-28T11:10:03Z","fixes":[{"ecosystem":"Debian:14","package":"openimageio","fixed_in":["3.1.18.0+dfsg-2"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Debian:12","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.4.12.0+dfsg-1","2.4.13.0+dfsg-1","2.4.14.0+dfsg-1","2.4.16.0+dfsg-1","2.4.17.0+dfsg-1","2.4.17.0+dfsg-1.1","2.4.7.1+dfsg-2","2.4.9.0+dfsg-1","2.5.10.1+dfsg-1","2.5.12.0+dfsg-1","2.5.12.0+dfsg-2","2.5.14.0+dfsg-1","2.5.15.0+dfsg-1","2.5.16.0+dfsg-1","2.5.18.0+dfsg-1","2.5.19.1+dfsg-1","2.5.19.1+dfsg-2","2.5.7.0+dfsg-1","3.1.18.0+dfsg-1","3.1.18.0+dfsg-2"]},{"source":"osv","ecosystem":"Debian:13","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.5.18.0+dfsg-1","2.5.19.1+dfsg-1","2.5.19.1+dfsg-2","3.1.18.0+dfsg-1","3.1.18.0+dfsg-2"]},{"source":"osv","ecosystem":"Debian:14","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.1.18.0+dfsg-2"}]}],"versions":["2.5.18.0+dfsg-1","2.5.19.1+dfsg-1","2.5.19.1+dfsg-2","3.1.18.0+dfsg-1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.5.17~dfsg0-1ubuntu2","1.5.20~dfsg0-1ubuntu2","1.5.23~dfsg0-1ubuntu1","1.6.9~dfsg0-4ubuntu1","1.6.10~dfsg0-1ubuntu1","1.6.10~dfsg0-2ubuntu1","1.6.11~dfsg0-1ubuntu1","1.6.11~dfsg0-1ubuntu1+esm2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.6.17~dfsg0-1ubuntu5","1.7.17~dfsg0-1ubuntu2","1.7.17~dfsg0-1ubuntu2+esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.0.10~dfsg0-1","2.0.11~dfsg0-1","2.0.12~dfsg0-1","2.0.12~dfsg0-1build1","2.0.12~dfsg0-1build2","2.1.10.1~dfsg0-5ubuntu4","2.1.10.1~dfsg0-5ubuntu5","2.1.12.0~dfsg0-1","2.1.12.0~dfsg0-1ubuntu0.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.2.10.1+dfsg-1build1","2.2.18.0+dfsg-1","2.2.18.0+dfsg-1build2","2.2.18.0+dfsg-1ubuntu2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:24.04:LTS","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.4.14.0+dfsg-1","2.4.16.0+dfsg-1","2.4.16.0+dfsg-1build1","2.4.17.0+dfsg-1","2.4.17.0+dfsg-1build1","2.4.17.0+dfsg-1.1build3","2.4.17.0+dfsg-1.1build4","2.4.17.0+dfsg-1.1ubuntu0.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.5.19.1+dfsg-2","2.5.19.1+dfsg-2build1","2.5.19.1+dfsg-2build2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:26.04:LTS","package":"openimageio","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.5.18.0+dfsg-1build2","2.5.19.1+dfsg-1build1","2.5.19.1+dfsg-1build3","2.5.19.1+dfsg-1build5","2.5.19.1+dfsg-2","2.5.19.1+dfsg-2ubuntu0.1~esm1"]}],"products":[{"vendor":"academysoftwarefoundation","product":"openimageio"},{"vendor":"openimageio","product":"openimageio"}],"references":[{"url":"https://github.com/AcademySoftwareFoundation/OpenImageIO/security/advisories/GHSA-xvwr-x6ch-v2fq","tags":["x_refsource_CONFIRM","exploit","Exploit","Mitigation","Vendor Advisory","advisory","report"]},{"url":"https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/5248","tags":["x_refsource_MISC","Issue Tracking","Patch","fix","report"]},{"url":"https://github.com/AcademySoftwareFoundation/OpenImageIO/commit/b0de7d40d06eb4abc7ef14c1321a1a2a976d8c1c","tags":["x_refsource_MISC","Patch","fix","report"]},{"url":"https://github.com/AcademySoftwareFoundation/OpenImageIO/releases/tag/v3.0.20.0","tags":["x_refsource_MISC","Release Notes","web","report"]},{"url":"https://github.com/AcademySoftwareFoundation/OpenImageIO/releases/tag/v3.1.15.0","tags":["x_refsource_MISC","Release Notes","web","report"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/59xxx/CVE-2026-59156.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-59156","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-59156","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-59156","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-59156","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-59156","title":"OpenImageIO: Unbounded recursion in FITS header parser leads to stack overflow","description":"OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, A crafted fits stream containing consecutive 2880-byte header blocks without the mandatory end keyword makes fitsinput::read_fits_header() call itself without a depth bound. repeated recursive parsing exhausts the application stack, resulting in denial of service. The affected implementation is identified by src/fits.imageio/fitsinput.cpp, FitsInput::read_fits_header(), END keyword, and 2880-byte FITS header blocks, which define the relevant source path, functions, state, and trigger. This issue is fixed in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.","status":"published","published":"2026-09-18T15:34:19.593Z","modified":"2026-09-24T20:55:49.717Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H","level":"medium","assessor":"cna"}],"cwes":["CWE-674"],"updated_at":"2026-11-02T14:19:58.560602Z"}],"euvd":[{"id":"EUVD-2026-83121","description":"OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, A crafted fits stream containing consecutive 2880-byte header blocks without the mandatory end keyword makes fitsinput::read_fits_header() call itself without a depth bound. repeated recursive parsing exhausts the application stack, resulting in denial of service. The affected implementation is identified by src/fits.imageio/fitsinput.cpp, FitsInput::read_fits_header(), END keyword, and 2880-byte FITS header blocks, which define the relevant source path, functions, state, and trigger. This issue is fixed in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.","status":"published","published":"2026-09-18T15:34:19Z","modified":"2026-09-24T20:55:49Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H","level":"medium"}],"updated_at":"2026-11-02T17:27:56.296478Z"}],"nvd":[{"id":"CVE-2026-59156","description":"OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, A crafted fits stream containing consecutive 2880-byte header blocks without the mandatory end keyword makes fitsinput::read_fits_header() call itself without a depth bound. repeated recursive parsing exhausts the application stack, resulting in denial of service. The affected implementation is identified by src/fits.imageio/fitsinput.cpp, FitsInput::read_fits_header(), END keyword, and 2880-byte FITS header blocks, which define the relevant source path, functions, state, and trigger. This issue is fixed in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.","status":"published","published":"2026-09-18T16:17:06.98Z","modified":"2026-09-29T18:57:22.51Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H","level":"medium","assessor":"secondary"}],"cwes":["CWE-674"],"updated_at":"2026-11-02T14:12:49.70655Z"}],"osv":[{"id":"CVE-2026-59156","title":"OpenImageIO: Unbounded recursion in FITS header parser leads to stack overflow","description":"OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, A crafted fits stream containing consecutive 2880-byte header blocks without the mandatory end keyword makes fitsinput::read_fits_header() call itself without a depth bound. repeated recursive parsing exhausts the application stack, resulting in denial of service. The affected implementation is identified by src/fits.imageio/fitsinput.cpp, FitsInput::read_fits_header(), END keyword, and 2880-byte FITS header blocks, which define the relevant source path, functions, state, and trigger. This issue is fixed in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.","status":"published","published":"2026-09-18T15:34:19.593Z","modified":"2026-10-28T11:10:03.199749069Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H","level":"medium"}],"cwes":["CWE-674"],"updated_at":"2026-11-02T15:45:12.496548Z"},{"id":"DEBIAN-CVE-2026-59156","description":"OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, A crafted fits stream containing consecutive 2880-byte header blocks without the mandatory end keyword makes fitsinput::read_fits_header() call itself without a depth bound. repeated recursive parsing exhausts the application stack, resulting in denial of service. The affected implementation is identified by src/fits.imageio/fitsinput.cpp, FitsInput::read_fits_header(), END keyword, and 2880-byte FITS header blocks, which define the relevant source path, functions, state, and trigger. This issue is fixed in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.","status":"published","published":"2026-09-18T16:17:06.98Z","modified":"2026-10-13T05:00:14.700746116Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H","level":"medium"}],"updated_at":"2026-11-02T15:45:57.590991Z"},{"id":"UBUNTU-CVE-2026-59156","description":"OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, A crafted fits stream containing consecutive 2880-byte header blocks without the mandatory end keyword makes fitsinput::read_fits_header() call itself without a depth bound. repeated recursive parsing exhausts the application stack, resulting in denial of service. The affected implementation is identified by src/fits.imageio/fitsinput.cpp, FitsInput::read_fits_header(), END keyword, and 2880-byte FITS header blocks, which define the relevant source path, functions, state, and trigger. This issue is fixed in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.","status":"published","published":"2026-09-18T16:17:00Z","modified":"2026-10-17T12:59:14.254738339Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H","level":"medium"}],"updated_at":"2026-11-02T16:56:41.911783Z"}]}}
