{"id":"CVE-2026-88052","aliases":["ALSA-2026:95085","ALSA-2026:95086","ALSA-2026:95725","DEBIAN-CVE-2026-88052","EUVD-2026-75629","GHSA-2hm8-q5c7-c373","MGASA-2026-0470","OESA-2026-4107","OESA-2026-4108","OESA-2026-4109","OESA-2026-4110","RLSA-2026:95085","RLSA-2026:95086","RLSA-2026:95725","UBUNTU-CVE-2026-88052","USN-8882-1","openSUSE-SU-2026:11887-1","openSUSE-SU-2026:21957-1"],"status":"published","title":"Tesseract: Heap out-of-bounds write in UNICHARSET::load_via_fgets via count/insert desynchronization","description":"Tesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.","severity":{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.00174,"percentile":0.0698,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-129","CWE-787"],"published":"2026-09-10T17:38:04Z","modified":"2026-11-07T12:30:02Z","fixes":[{"ecosystem":"Ubuntu:Pro:14.04:LTS","package":"tesseract","fixed_in":["3.03.02-3ubuntu0.1~esm1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:16.04:LTS","package":"tesseract","fixed_in":["3.04.01-4ubuntu0.1~esm1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:18.04:LTS","package":"tesseract","fixed_in":["4.00~git2288-10f4998a-2ubuntu0.1~esm1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:20.04:LTS","package":"tesseract","fixed_in":["4.1.1-2ubuntu0.1~esm1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:22.04:LTS","package":"tesseract","fixed_in":["4.1.1-2.1ubuntu0.1~esm1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:24.04:LTS","package":"tesseract","fixed_in":["5.3.4-1ubuntu0.1~esm1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:26.04:LTS","package":"tesseract","fixed_in":["5.5.0-1ubuntu0.1~esm1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"AlmaLinux:10","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.3.4-11.el10_2"}]}],"bundled":6},{"source":"osv","ecosystem":"AlmaLinux:10","package":"tesseract-devel","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.3.4-11.el10_2"}]}],"bundled":6},{"source":"osv","ecosystem":"AlmaLinux:9","package":"tesseract-devel","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.1-11.el9_8"}]}],"bundled":6},{"source":"osv","ecosystem":"AlmaLinux:8","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.1-7.el8_10"}]}],"bundled":6},{"source":"osv","ecosystem":"AlmaLinux:8","package":"tesseract-devel","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.1-7.el8_10"}]}],"bundled":6},{"source":"osv","ecosystem":"Debian:12","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.3.0-2","5.3.3-1","5.3.4-1","5.3.4-1.1","5.3.4-1.2","5.3.4-1.3","5.3.4-1.4","5.5.0-1","5.5.0-1.1"]},{"source":"osv","ecosystem":"Debian:13","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.5.0-1","5.5.0-1.1"]},{"source":"osv","ecosystem":"Debian:14","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.5.0-1","5.5.0-1.1"]},{"source":"osv","ecosystem":"Mageia:10","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.3-1.mga10"}]}],"bundled":9},{"source":"osv","ecosystem":"openEuler:22.03-LTS-SP4","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.3-3.oe2203sp4"}]}],"bundled":8},{"source":"osv","ecosystem":"openEuler:24.03-LTS-SP1","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.3-3.oe2403sp1"}]}],"bundled":8},{"source":"osv","ecosystem":"openEuler:24.03-LTS-SP3","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.3-3.oe2403sp3"}]}],"bundled":8},{"source":"osv","ecosystem":"openEuler:24.03-LTS-SP4","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.3-3.oe2403sp4"}]}],"bundled":8},{"source":"osv","ecosystem":"Rocky Linux:10","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:5.3.4-11.el10_2"}]}],"bundled":6},{"source":"osv","ecosystem":"Rocky Linux:9","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:4.1.1-11.el9_8"}]}],"bundled":6},{"source":"osv","ecosystem":"Rocky Linux:8","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:4.1.1-7.el8_10"}]}],"bundled":6},{"source":"osv","ecosystem":"Ubuntu:Pro:14.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.03.02-3ubuntu0.1~esm1"}]}],"versions":["3.02.02-1","3.03.02-3"]},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.04.01-4ubuntu0.1~esm1"}]}],"versions":["3.04.00-5ubuntu1","3.04.01-2","3.04.01-4"]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.00~git2288-10f4998a-2ubuntu0.1~esm1"}]}],"versions":["3.04.01-6","3.04.01-6build1","3.04.01-6build2","4.00~git2188-cdc35338-4build1","4.00~git2188-cdc35338-5","4.00~git2207-766b7bd6-3.1","4.00~git2219-40f43111-1.2","4.00~git2288-10f4998a-2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.1-2ubuntu0.1~esm1"}]}],"versions":["4.1.0-1","4.1.0-2","4.1.1-1","4.1.1-2","4.1.1-2build1","4.1.1-2build2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:22.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.1-2.1ubuntu0.1~esm1"}]}],"versions":["4.1.1-2.1","4.1.1-2.1build1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:24.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.3.4-1ubuntu0.1~esm1"}]}],"versions":["5.3.0-2build1","5.3.3-1","5.3.3-1build1","5.3.4-1","5.3.4-1build3","5.3.4-1build4","5.3.4-1build5"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.5.0-1build1","5.5.0-1.1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:26.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.0-1ubuntu0.1~esm1"}]}],"versions":["5.5.0-1","5.5.0-1build1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:14.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.03.02-3ubuntu0.1~esm1"}]}],"versions":["3.02.02-1","3.03.02-3"],"bundled":10},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.04.01-4ubuntu0.1~esm1"}]}],"versions":["3.04.00-5ubuntu1","3.04.01-2","3.04.01-4"],"bundled":10},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.00~git2288-10f4998a-2ubuntu0.1~esm1"}]}],"versions":["3.04.01-6","3.04.01-6build1","3.04.01-6build2","4.00~git2188-cdc35338-4build1","4.00~git2188-cdc35338-5","4.00~git2207-766b7bd6-3.1","4.00~git2219-40f43111-1.2","4.00~git2288-10f4998a-2"],"bundled":10},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.1-2ubuntu0.1~esm1"}]}],"versions":["4.1.0-1","4.1.0-2","4.1.1-1","4.1.1-2","4.1.1-2build1","4.1.1-2build2"],"bundled":10},{"source":"osv","ecosystem":"Ubuntu:Pro:22.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.1-2.1ubuntu0.1~esm1"}]}],"versions":["4.1.1-2.1","4.1.1-2.1build1"],"bundled":10},{"source":"osv","ecosystem":"Ubuntu:Pro:24.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.3.4-1ubuntu0.1~esm1"}]}],"versions":["5.3.0-2build1","5.3.3-1","5.3.3-1build1","5.3.4-1","5.3.4-1build3","5.3.4-1build4","5.3.4-1build5"],"bundled":10},{"source":"osv","ecosystem":"Ubuntu:Pro:26.04:LTS","package":"tesseract","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.0-1ubuntu0.1~esm1"}]}],"versions":["5.5.0-1","5.5.0-1build1"],"bundled":10},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"tesseract-ocr","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.3-2.1"}]}],"bundled":9},{"source":"osv","ecosystem":"openSUSE:Leap 16.0","package":"tesseract-ocr","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.5.3-bp160.1.1"}]}],"bundled":9}],"products":[{"vendor":"tesseract-ocr","product":"tesseract"},{"vendor":"tesseract-ocr","product":"tesseract_ocr"}],"references":[{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-2hm8-q5c7-c373","tags":["x_refsource_CONFIRM","Exploit","Mitigation","Vendor Advisory","advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/commit/2d04d640db2e8c7e3bab2369d599343b5a8b8443","tags":["x_refsource_MISC","Patch","fix"]},{"url":"https://access.redhat.com/errata/RHSA-2026:95085","tags":["advisory"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-88047","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-88048","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-88049","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-88051","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-88052","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-88053","tags":["report"]},{"url":"https://bugzilla.redhat.com/2531546","tags":["report"]},{"url":"https://bugzilla.redhat.com/2531550","tags":["report"]},{"url":"https://bugzilla.redhat.com/2531554","tags":["report"]},{"url":"https://bugzilla.redhat.com/2531566","tags":["report"]},{"url":"https://bugzilla.redhat.com/2531573","tags":["report"]},{"url":"https://bugzilla.redhat.com/2531579","tags":["report"]},{"url":"https://errata.almalinux.org/10/ALSA-2026-95085.html","tags":["advisory"]},{"url":"https://access.redhat.com/errata/RHSA-2026:95086","tags":["advisory"]},{"url":"https://errata.almalinux.org/9/ALSA-2026-95086.html","tags":["advisory"]},{"url":"https://access.redhat.com/errata/RHSA-2026:95725","tags":["advisory"]},{"url":"https://errata.almalinux.org/8/ALSA-2026-95725.html","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/88xxx/CVE-2026-88052.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88052","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-88052","tags":["advisory"]},{"url":"https://advisories.mageia.org/MGASA-2026-0470.html","tags":["advisory"]},{"url":"https://bugs.mageia.org/show_bug.cgi?id=36427","tags":["report"]},{"url":"https://github.com/tesseract-ocr/tesseract/releases/tag/5.5.3","tags":["web"]},{"url":"https://osv.dev/vulnerability/openSUSE-SU-2026:21957-1","tags":["web"]},{"url":"https://lists.opensuse.org/archives/list/security-announce@lists.opensuse.org/message/25OCRCHOE46S5WTJZC25DVGO7KC2KVWO/","tags":["web"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-x3vq-7rr7-5x3h","tags":["advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/pull/4581","tags":["web"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-7j76-5rq5-5jg8","tags":["advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/pull/4588","tags":["web"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-5j2p-r5vc-q7f3","tags":["advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-q44c-23p6-5mw6","tags":["advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-jgq8-pprg-vc68","tags":["advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-7v9h-3q3m-w68g","tags":["advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-88qp-4g94-3rf3","tags":["advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-rphx-x795-5qjv","tags":["advisory"]},{"url":"https://github.com/tesseract-ocr/tesseract/security/advisories/GHSA-f6h7-cqr4-6fx4","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-4107","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88047","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88048","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88049","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88050","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88051","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88053","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88054","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-4108","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-4109","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-4110","tags":["advisory"]},{"url":"https://errata.rockylinux.org/RLSA-2026:95085","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2531546","tags":["report"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2531550","tags":["report"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2531554","tags":["report"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2531566","tags":["report"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2531573","tags":["report"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2531579","tags":["report"]},{"url":"https://errata.rockylinux.org/RLSA-2026:95086","tags":["advisory"]},{"url":"https://errata.rockylinux.org/RLSA-2026:95725","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-88052","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-88052","tags":["report"]},{"url":"https://ubuntu.com/security/notices/USN-8882-1","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-73066","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-73067","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-88047","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-88048","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-88049","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-88050","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-88051","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-88053","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-88054","tags":["report"]},{"url":"","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2026-73067","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-88047","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-88048","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-88049","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-88050","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-88051","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-88052","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-88053","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-88054","tags":["web"]},{"url":"https://bugzilla.suse.com/1275623","tags":["report"]},{"url":"https://bugzilla.suse.com/1280925","tags":["report"]},{"url":"https://bugzilla.suse.com/1280929","tags":["report"]},{"url":"https://bugzilla.suse.com/1280930","tags":["report"]},{"url":"https://bugzilla.suse.com/1280931","tags":["report"]},{"url":"https://bugzilla.suse.com/1280932","tags":["report"]},{"url":"https://bugzilla.suse.com/1280933","tags":["report"]},{"url":"https://bugzilla.suse.com/1280934","tags":["report"]},{"url":"https://bugzilla.suse.com/1280935","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-88052","title":"Tesseract: Heap out-of-bounds write in UNICHARSET::load_via_fgets via count/insert desynchronization","description":"Tesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.","status":"published","published":"2026-09-10T17:38:04.675Z","modified":"2026-09-11T20:33:04.012Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-129","CWE-787"],"updated_at":"2026-11-02T13:41:53.237769Z"}],"euvd":[{"id":"EUVD-2026-75629","description":"Tesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.","status":"published","published":"2026-09-10T17:38:04Z","modified":"2026-09-11T20:33:04Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T17:28:21.886667Z"}],"nvd":[{"id":"CVE-2026-88052","description":"Tesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.","status":"published","published":"2026-09-10T18:18:14.317Z","modified":"2026-09-16T16:21:10.677Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-129","CWE-787"],"updated_at":"2026-11-02T14:12:46.271848Z"}],"osv":[{"id":"CVE-2026-88052","title":"Tesseract: Heap out-of-bounds write in UNICHARSET::load_via_fgets via count/insert desynchronization","description":"Tesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.","status":"published","published":"2026-09-10T17:38:04.675Z","modified":"2026-11-06T10:57:01.954764677Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high"}],"cwes":["CWE-129","CWE-787"],"updated_at":"2026-11-06T11:08:47.346964Z"},{"id":"DEBIAN-CVE-2026-88052","description":"Tesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.","status":"published","published":"2026-09-10T18:18:14.317Z","modified":"2026-10-01T03:03:53.336369264Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:46:05.506112Z"},{"id":"OESA-2026-4107","title":"tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.\r\n\r\nSecurity Fix(es):\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Classify::ReadNormProtos in src/classify/normmatch.cpp parses the NORMPROTO component of a .traineddata file and uses std::istream::operator\u0026gt;\u0026gt;(char*) to extract a whitespace-delimited token into a fixed 61-byte stack buffer without setting a stream width. The 100-byte line buffer can carry a token of up to 99 characters, so a token longer than 60 characters writes up to 39 attacker-controlled bytes past the buffer during TessBaseAPI::Init of the legacy engine, causing stack corruption, denial of service, and potentially control-flow hijacking on affected standard-library implementations. Builds using Apple\u0026apos;s libc++ C++20 bounded array overload are incidentally protected, while typical libstdc++ builds remain affected. No fixed release is available as of this review.(CVE-2026-88047)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, FullyConnected::DeSerialize in src/lstm/fullyconnected.cpp does not validate the deserialized layer scalars ni_ and no_ against the weight-matrix dimensions. During FullyConnected::Forward, MatrixDotVector in src/lstm/weightmatrix.cpp writes w.dim1() results into temp_line, which is sized from no_, and reads w.dim2() minus one inputs from curr_input, which is sized from ni_. A crafted .traineddata NT_SOFTMAX layer can therefore use inconsistent dimensions to cause a heap out-of-bounds write and read on the default LSTM engine, resulting in heap corruption, a crash, information disclosure, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88048)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, prior .traineddata hardening added bounds checks to NetworkIO::CopyTimeStepGeneral and NetworkIO::Randomize in src/lstm/networkio.cpp but left NetworkIO::WriteTimeStepPart and NetworkIO::AddTimeStepPart unchecked. In LSTM::Forward in src/lstm/lstm.cpp, source_ is sized from the independently deserialized na_ field while the WriteTimeStepPart count is ns_, which comes from the CI gate WeightMatrix dim1() value. A crafted NT_LSTM layer can make ns_ much larger than na_, causing a heap out-of-bounds write during the first recognition step on the default LSTM engine and resulting in heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88049)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, RecodedCharID::DeSerialize in src/ccutil/unicharcompress.h validates length_ but accepts negative code_ values from a crafted .traineddata recoder component. UnicharCompress::ComputeCodeRange in src/ccutil/unicharcompress.cpp can consequently produce code_range_ equal to zero, after which SetupDecoder indexes is_valid_start_ with the negative code on a size-zero vector. The resulting out-of-bounds bit write uses a large wrapped index and reliably causes a wild-address crash or allocation failure on the default LSTM engine. No fixed release is available as of this review.(CVE-2026-88050)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, the callback form of GenericVector::read in src/ccutil/genericvector.h reads the independent int32 fields reserved and size_used_ from a .traineddata model without a cap or an invariant check. reserve(reserved) allocates the backing array, but the callback loop writes size_used_ elements. A crafted TESSDATA_INTTEMP component with version_id 4 or later can therefore set reserved to a small value and size_used_ to a large value when fontinfo_table_.read(fp, read_info) is called from src/classify/intproto.cpp, causing a heap out-of-bounds write of FontInfo structures, heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88051)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88052)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Classify::ReadIntTemplates in src/classify/intproto.cpp reads NumClassPruners, NumClasses, and NumProtoSets from the TESSDATA_INTTEMP component of a crafted .traineddata file and uses those values as loop bounds without validating them against MAX_NUM_CLASS_PRUNERS, MAX_NUM_CLASSES, and MAX_NUM_PROTO_SETS. The loops store heap pointers into fixed-capacity ClassPruners and ProtoSets arrays in INT_TEMPLATES_STRUCT and INT_CLASS_STRUCT, so an oversized count causes heap out-of-bounds pointer writes during legacy-classifier initialization before OCR begins, resulting in heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88053)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Plumbing::DeSerialize in src/lstm/plumbing.cpp rejects excessively large network stacks but accepts a zero-length stack for NT_SERIES, NT_PARALLEL, or NT_REVERSED layers in a crafted .traineddata model. During LSTMRecognizer initialization in src/lstm/lstmrecognizer.cpp, CacheXScaleFactor(XScaleFactor()) reaches Series::CacheXScaleFactor in src/lstm/series.cpp, which dereferences stack_[0] on the empty vector and invokes a virtual method through an invalid Network pointer. This causes a deterministic crash and denial of service at model load. No fixed release is available as of this review.(CVE-2026-88054)","status":"published","published":"2026-09-25T01:28:28Z","modified":"2026-09-25T01:45:09.209376342Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:52:47.643553Z"},{"id":"OESA-2026-4108","title":"tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.\r\n\r\nSecurity Fix(es):\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Classify::ReadNormProtos in src/classify/normmatch.cpp parses the NORMPROTO component of a .traineddata file and uses std::istream::operator\u0026gt;\u0026gt;(char*) to extract a whitespace-delimited token into a fixed 61-byte stack buffer without setting a stream width. The 100-byte line buffer can carry a token of up to 99 characters, so a token longer than 60 characters writes up to 39 attacker-controlled bytes past the buffer during TessBaseAPI::Init of the legacy engine, causing stack corruption, denial of service, and potentially control-flow hijacking on affected standard-library implementations. Builds using Apple\u0026apos;s libc++ C++20 bounded array overload are incidentally protected, while typical libstdc++ builds remain affected. No fixed release is available as of this review.(CVE-2026-88047)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, FullyConnected::DeSerialize in src/lstm/fullyconnected.cpp does not validate the deserialized layer scalars ni_ and no_ against the weight-matrix dimensions. During FullyConnected::Forward, MatrixDotVector in src/lstm/weightmatrix.cpp writes w.dim1() results into temp_line, which is sized from no_, and reads w.dim2() minus one inputs from curr_input, which is sized from ni_. A crafted .traineddata NT_SOFTMAX layer can therefore use inconsistent dimensions to cause a heap out-of-bounds write and read on the default LSTM engine, resulting in heap corruption, a crash, information disclosure, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88048)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, prior .traineddata hardening added bounds checks to NetworkIO::CopyTimeStepGeneral and NetworkIO::Randomize in src/lstm/networkio.cpp but left NetworkIO::WriteTimeStepPart and NetworkIO::AddTimeStepPart unchecked. In LSTM::Forward in src/lstm/lstm.cpp, source_ is sized from the independently deserialized na_ field while the WriteTimeStepPart count is ns_, which comes from the CI gate WeightMatrix dim1() value. A crafted NT_LSTM layer can make ns_ much larger than na_, causing a heap out-of-bounds write during the first recognition step on the default LSTM engine and resulting in heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88049)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, RecodedCharID::DeSerialize in src/ccutil/unicharcompress.h validates length_ but accepts negative code_ values from a crafted .traineddata recoder component. UnicharCompress::ComputeCodeRange in src/ccutil/unicharcompress.cpp can consequently produce code_range_ equal to zero, after which SetupDecoder indexes is_valid_start_ with the negative code on a size-zero vector. The resulting out-of-bounds bit write uses a large wrapped index and reliably causes a wild-address crash or allocation failure on the default LSTM engine. No fixed release is available as of this review.(CVE-2026-88050)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, the callback form of GenericVector::read in src/ccutil/genericvector.h reads the independent int32 fields reserved and size_used_ from a .traineddata model without a cap or an invariant check. reserve(reserved) allocates the backing array, but the callback loop writes size_used_ elements. A crafted TESSDATA_INTTEMP component with version_id 4 or later can therefore set reserved to a small value and size_used_ to a large value when fontinfo_table_.read(fp, read_info) is called from src/classify/intproto.cpp, causing a heap out-of-bounds write of FontInfo structures, heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88051)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88052)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Classify::ReadIntTemplates in src/classify/intproto.cpp reads NumClassPruners, NumClasses, and NumProtoSets from the TESSDATA_INTTEMP component of a crafted .traineddata file and uses those values as loop bounds without validating them against MAX_NUM_CLASS_PRUNERS, MAX_NUM_CLASSES, and MAX_NUM_PROTO_SETS. The loops store heap pointers into fixed-capacity ClassPruners and ProtoSets arrays in INT_TEMPLATES_STRUCT and INT_CLASS_STRUCT, so an oversized count causes heap out-of-bounds pointer writes during legacy-classifier initialization before OCR begins, resulting in heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88053)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Plumbing::DeSerialize in src/lstm/plumbing.cpp rejects excessively large network stacks but accepts a zero-length stack for NT_SERIES, NT_PARALLEL, or NT_REVERSED layers in a crafted .traineddata model. During LSTMRecognizer initialization in src/lstm/lstmrecognizer.cpp, CacheXScaleFactor(XScaleFactor()) reaches Series::CacheXScaleFactor in src/lstm/series.cpp, which dereferences stack_[0] on the empty vector and invokes a virtual method through an invalid Network pointer. This causes a deterministic crash and denial of service at model load. No fixed release is available as of this review.(CVE-2026-88054)","status":"published","published":"2026-09-25T01:28:29Z","modified":"2026-09-25T01:45:13.759703007Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:52:47.643553Z"},{"id":"OESA-2026-4109","title":"tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.\r\n\r\nSecurity Fix(es):\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Classify::ReadNormProtos in src/classify/normmatch.cpp parses the NORMPROTO component of a .traineddata file and uses std::istream::operator\u0026gt;\u0026gt;(char*) to extract a whitespace-delimited token into a fixed 61-byte stack buffer without setting a stream width. The 100-byte line buffer can carry a token of up to 99 characters, so a token longer than 60 characters writes up to 39 attacker-controlled bytes past the buffer during TessBaseAPI::Init of the legacy engine, causing stack corruption, denial of service, and potentially control-flow hijacking on affected standard-library implementations. Builds using Apple\u0026apos;s libc++ C++20 bounded array overload are incidentally protected, while typical libstdc++ builds remain affected. No fixed release is available as of this review.(CVE-2026-88047)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, FullyConnected::DeSerialize in src/lstm/fullyconnected.cpp does not validate the deserialized layer scalars ni_ and no_ against the weight-matrix dimensions. During FullyConnected::Forward, MatrixDotVector in src/lstm/weightmatrix.cpp writes w.dim1() results into temp_line, which is sized from no_, and reads w.dim2() minus one inputs from curr_input, which is sized from ni_. A crafted .traineddata NT_SOFTMAX layer can therefore use inconsistent dimensions to cause a heap out-of-bounds write and read on the default LSTM engine, resulting in heap corruption, a crash, information disclosure, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88048)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, prior .traineddata hardening added bounds checks to NetworkIO::CopyTimeStepGeneral and NetworkIO::Randomize in src/lstm/networkio.cpp but left NetworkIO::WriteTimeStepPart and NetworkIO::AddTimeStepPart unchecked. In LSTM::Forward in src/lstm/lstm.cpp, source_ is sized from the independently deserialized na_ field while the WriteTimeStepPart count is ns_, which comes from the CI gate WeightMatrix dim1() value. A crafted NT_LSTM layer can make ns_ much larger than na_, causing a heap out-of-bounds write during the first recognition step on the default LSTM engine and resulting in heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88049)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, RecodedCharID::DeSerialize in src/ccutil/unicharcompress.h validates length_ but accepts negative code_ values from a crafted .traineddata recoder component. UnicharCompress::ComputeCodeRange in src/ccutil/unicharcompress.cpp can consequently produce code_range_ equal to zero, after which SetupDecoder indexes is_valid_start_ with the negative code on a size-zero vector. The resulting out-of-bounds bit write uses a large wrapped index and reliably causes a wild-address crash or allocation failure on the default LSTM engine. No fixed release is available as of this review.(CVE-2026-88050)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, the callback form of GenericVector::read in src/ccutil/genericvector.h reads the independent int32 fields reserved and size_used_ from a .traineddata model without a cap or an invariant check. reserve(reserved) allocates the backing array, but the callback loop writes size_used_ elements. A crafted TESSDATA_INTTEMP component with version_id 4 or later can therefore set reserved to a small value and size_used_ to a large value when fontinfo_table_.read(fp, read_info) is called from src/classify/intproto.cpp, causing a heap out-of-bounds write of FontInfo structures, heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88051)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88052)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Classify::ReadIntTemplates in src/classify/intproto.cpp reads NumClassPruners, NumClasses, and NumProtoSets from the TESSDATA_INTTEMP component of a crafted .traineddata file and uses those values as loop bounds without validating them against MAX_NUM_CLASS_PRUNERS, MAX_NUM_CLASSES, and MAX_NUM_PROTO_SETS. The loops store heap pointers into fixed-capacity ClassPruners and ProtoSets arrays in INT_TEMPLATES_STRUCT and INT_CLASS_STRUCT, so an oversized count causes heap out-of-bounds pointer writes during legacy-classifier initialization before OCR begins, resulting in heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88053)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Plumbing::DeSerialize in src/lstm/plumbing.cpp rejects excessively large network stacks but accepts a zero-length stack for NT_SERIES, NT_PARALLEL, or NT_REVERSED layers in a crafted .traineddata model. During LSTMRecognizer initialization in src/lstm/lstmrecognizer.cpp, CacheXScaleFactor(XScaleFactor()) reaches Series::CacheXScaleFactor in src/lstm/series.cpp, which dereferences stack_[0] on the empty vector and invokes a virtual method through an invalid Network pointer. This causes a deterministic crash and denial of service at model load. No fixed release is available as of this review.(CVE-2026-88054)","status":"published","published":"2026-09-25T01:28:30Z","modified":"2026-09-25T01:45:09.302751439Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:52:47.643553Z"},{"id":"OESA-2026-4110","title":"tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.\r\n\r\nSecurity Fix(es):\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Classify::ReadNormProtos in src/classify/normmatch.cpp parses the NORMPROTO component of a .traineddata file and uses std::istream::operator\u0026gt;\u0026gt;(char*) to extract a whitespace-delimited token into a fixed 61-byte stack buffer without setting a stream width. The 100-byte line buffer can carry a token of up to 99 characters, so a token longer than 60 characters writes up to 39 attacker-controlled bytes past the buffer during TessBaseAPI::Init of the legacy engine, causing stack corruption, denial of service, and potentially control-flow hijacking on affected standard-library implementations. Builds using Apple\u0026apos;s libc++ C++20 bounded array overload are incidentally protected, while typical libstdc++ builds remain affected. No fixed release is available as of this review.(CVE-2026-88047)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, FullyConnected::DeSerialize in src/lstm/fullyconnected.cpp does not validate the deserialized layer scalars ni_ and no_ against the weight-matrix dimensions. During FullyConnected::Forward, MatrixDotVector in src/lstm/weightmatrix.cpp writes w.dim1() results into temp_line, which is sized from no_, and reads w.dim2() minus one inputs from curr_input, which is sized from ni_. A crafted .traineddata NT_SOFTMAX layer can therefore use inconsistent dimensions to cause a heap out-of-bounds write and read on the default LSTM engine, resulting in heap corruption, a crash, information disclosure, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88048)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, prior .traineddata hardening added bounds checks to NetworkIO::CopyTimeStepGeneral and NetworkIO::Randomize in src/lstm/networkio.cpp but left NetworkIO::WriteTimeStepPart and NetworkIO::AddTimeStepPart unchecked. In LSTM::Forward in src/lstm/lstm.cpp, source_ is sized from the independently deserialized na_ field while the WriteTimeStepPart count is ns_, which comes from the CI gate WeightMatrix dim1() value. A crafted NT_LSTM layer can make ns_ much larger than na_, causing a heap out-of-bounds write during the first recognition step on the default LSTM engine and resulting in heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88049)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, RecodedCharID::DeSerialize in src/ccutil/unicharcompress.h validates length_ but accepts negative code_ values from a crafted .traineddata recoder component. UnicharCompress::ComputeCodeRange in src/ccutil/unicharcompress.cpp can consequently produce code_range_ equal to zero, after which SetupDecoder indexes is_valid_start_ with the negative code on a size-zero vector. The resulting out-of-bounds bit write uses a large wrapped index and reliably causes a wild-address crash or allocation failure on the default LSTM engine. No fixed release is available as of this review.(CVE-2026-88050)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, the callback form of GenericVector::read in src/ccutil/genericvector.h reads the independent int32 fields reserved and size_used_ from a .traineddata model without a cap or an invariant check. reserve(reserved) allocates the backing array, but the callback loop writes size_used_ elements. A crafted TESSDATA_INTTEMP component with version_id 4 or later can therefore set reserved to a small value and size_used_ to a large value when fontinfo_table_.read(fp, read_info) is called from src/classify/intproto.cpp, causing a heap out-of-bounds write of FontInfo structures, heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88051)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88052)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Classify::ReadIntTemplates in src/classify/intproto.cpp reads NumClassPruners, NumClasses, and NumProtoSets from the TESSDATA_INTTEMP component of a crafted .traineddata file and uses those values as loop bounds without validating them against MAX_NUM_CLASS_PRUNERS, MAX_NUM_CLASSES, and MAX_NUM_PROTO_SETS. The loops store heap pointers into fixed-capacity ClassPruners and ProtoSets arrays in INT_TEMPLATES_STRUCT and INT_CLASS_STRUCT, so an oversized count causes heap out-of-bounds pointer writes during legacy-classifier initialization before OCR begins, resulting in heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.(CVE-2026-88053)\n\nTesseract is an open source OCR engine. In version 5.5.3 and earlier, Plumbing::DeSerialize in src/lstm/plumbing.cpp rejects excessively large network stacks but accepts a zero-length stack for NT_SERIES, NT_PARALLEL, or NT_REVERSED layers in a crafted .traineddata model. During LSTMRecognizer initialization in src/lstm/lstmrecognizer.cpp, CacheXScaleFactor(XScaleFactor()) reaches Series::CacheXScaleFactor in src/lstm/series.cpp, which dereferences stack_[0] on the empty vector and invokes a virtual method through an invalid Network pointer. This causes a deterministic crash and denial of service at model load. No fixed release is available as of this review.(CVE-2026-88054)","status":"published","published":"2026-09-25T01:28:30Z","modified":"2026-09-25T01:45:14.614814928Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:52:47.643553Z"},{"id":"RLSA-2026:95085","title":"Important: tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.\n\nSecurity Fix(es):\n\n* tesseract: Tesseract: Heap out-of-bounds write/read leading to information disclosure via crafted data (CVE-2026-88048)\n\n* tesseract: Tesseract: Stack buffer overflow via crafted .traineddata file (CVE-2026-88047)\n\n* tesseract: Tesseract: Heap out-of-bounds write allows arbitrary code execution or denial of service (CVE-2026-88049)\n\n* tesseract: Tesseract: Heap out-of-bounds write via crafted .traineddata model (CVE-2026-88051)\n\n* tesseract: Tesseract: Heap out-of-bounds write leads to heap corruption via crafted data file (CVE-2026-88053)\n\n* tesseract: Tesseract: Heap out-of-bounds write can lead to arbitrary code execution (CVE-2026-88052)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.","status":"published","published":"2026-11-05T09:10:39.399064Z","modified":"2026-11-05T09:45:02.581433109Z","cvss":[{"version":"3.1","score":8.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-05T13:31:49.170436Z"},{"id":"RLSA-2026:95086","title":"Important: tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.\n\nSecurity Fix(es):\n\n* tesseract: Tesseract: Heap out-of-bounds write/read leading to information disclosure via crafted data (CVE-2026-88048)\n\n* tesseract: Tesseract: Stack buffer overflow via crafted .traineddata file (CVE-2026-88047)\n\n* tesseract: Tesseract: Heap out-of-bounds write allows arbitrary code execution or denial of service (CVE-2026-88049)\n\n* tesseract: Tesseract: Heap out-of-bounds write via crafted .traineddata model (CVE-2026-88051)\n\n* tesseract: Tesseract: Heap out-of-bounds write leads to heap corruption via crafted data file (CVE-2026-88053)\n\n* tesseract: Tesseract: Heap out-of-bounds write can lead to arbitrary code execution (CVE-2026-88052)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.","status":"published","published":"2026-11-06T12:04:35.356087Z","modified":"2026-11-06T12:30:02.70953836Z","cvss":[{"version":"3.1","score":8.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-06T12:43:06.926783Z"},{"id":"RLSA-2026:95725","title":"Important: tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.\n\nSecurity Fix(es):\n\n* tesseract: Tesseract: Heap out-of-bounds write/read leading to information disclosure via crafted data (CVE-2026-88048)\n\n* tesseract: Tesseract: Stack buffer overflow via crafted .traineddata file (CVE-2026-88047)\n\n* tesseract: Tesseract: Heap out-of-bounds write allows arbitrary code execution or denial of service (CVE-2026-88049)\n\n* tesseract: Tesseract: Heap out-of-bounds write via crafted .traineddata model (CVE-2026-88051)\n\n* tesseract: Tesseract: Heap out-of-bounds write leads to heap corruption via crafted data file (CVE-2026-88053)\n\n* tesseract: Tesseract: Heap out-of-bounds write can lead to arbitrary code execution (CVE-2026-88052)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.","status":"published","published":"2026-11-07T12:01:16.797592Z","modified":"2026-11-07T12:30:02.601079432Z","cvss":[{"version":"3.1","score":8.4,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-07T12:46:22.715173Z"},{"id":"UBUNTU-CVE-2026-88052","description":"Tesseract is an open source OCR engine. In version 5.5.3 and earlier, UNICHARSET::load_via_fgets in src/ccutil/unicharset.cpp trusts the declared unichar count as a loop bound and uses id as an unchecked index into the unichars vector. unichar_insert_backwards_compatible can leave the vector unchanged for an empty, duplicate, or already-encodable representation, causing id to become larger than unichars.size(). Subsequent set_* calls and the write to unichars[id].properties.enabled then write UNICHAR_PROPERTIES beyond the vector during initialization in both the default LSTM and legacy engines, causing heap corruption, a crash, or potentially controlled corruption. No fixed release is available as of this review.","status":"published","published":"2026-09-10T18:18:00Z","modified":"2026-10-17T13:01:15.494596845Z","cvss":[{"version":"3.1","score":7.8,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T16:57:24.828975Z"},{"id":"ALSA-2026:95085","title":"Important: tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.  \n\nSecurity Fix(es):  \n\n  * tesseract: Tesseract: Heap out-of-bounds write/read leading to information disclosure via crafted data (CVE-2026-88048)\n  * tesseract: Tesseract: Stack buffer overflow via crafted .traineddata file (CVE-2026-88047)\n  * tesseract: Tesseract: Heap out-of-bounds write allows arbitrary code execution or denial of service (CVE-2026-88049)\n  * tesseract: Tesseract: Heap out-of-bounds write via crafted .traineddata model (CVE-2026-88051)\n  * tesseract: Tesseract: Heap out-of-bounds write leads to heap corruption via crafted data file (CVE-2026-88053)\n  * tesseract: Tesseract: Heap out-of-bounds write can lead to arbitrary code execution (CVE-2026-88052)\n\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.\n","status":"published","published":"2026-11-04T00:00:00Z","modified":"2026-11-05T20:15:03.815059004Z","updated_at":"2026-11-05T20:29:32.587702Z"},{"id":"ALSA-2026:95086","title":"Important: tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.  \n\nSecurity Fix(es):  \n\n  * tesseract: Tesseract: Heap out-of-bounds write/read leading to information disclosure via crafted data (CVE-2026-88048)\n  * tesseract: Tesseract: Stack buffer overflow via crafted .traineddata file (CVE-2026-88047)\n  * tesseract: Tesseract: Heap out-of-bounds write allows arbitrary code execution or denial of service (CVE-2026-88049)\n  * tesseract: Tesseract: Heap out-of-bounds write via crafted .traineddata model (CVE-2026-88051)\n  * tesseract: Tesseract: Heap out-of-bounds write leads to heap corruption via crafted data file (CVE-2026-88053)\n  * tesseract: Tesseract: Heap out-of-bounds write can lead to arbitrary code execution (CVE-2026-88052)\n\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.\n","status":"published","published":"2026-11-04T00:00:00Z","modified":"2026-11-05T00:00:02.268455592Z","updated_at":"2026-11-05T00:11:21.164934Z"},{"id":"ALSA-2026:95725","title":"Important: tesseract security update","description":"A commercial quality OCR engine originally developed at HP between 1985 and 1995. In 1995, this engine was among the top 3 evaluated by UNLV. It was open-sourced by HP and UNLV in 2005.  \n\nSecurity Fix(es):  \n\n  * tesseract: Tesseract: Heap out-of-bounds write/read leading to information disclosure via crafted data (CVE-2026-88048)\n  * tesseract: Tesseract: Stack buffer overflow via crafted .traineddata file (CVE-2026-88047)\n  * tesseract: Tesseract: Heap out-of-bounds write allows arbitrary code execution or denial of service (CVE-2026-88049)\n  * tesseract: Tesseract: Heap out-of-bounds write via crafted .traineddata model (CVE-2026-88051)\n  * tesseract: Tesseract: Heap out-of-bounds write leads to heap corruption via crafted data file (CVE-2026-88053)\n  * tesseract: Tesseract: Heap out-of-bounds write can lead to arbitrary code execution (CVE-2026-88052)\n\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.\n","status":"published","published":"2026-11-05T00:00:00Z","modified":"2026-11-06T10:45:02.06481089Z","updated_at":"2026-11-06T11:09:15.319489Z"},{"id":"MGASA-2026-0470","title":"Updated tesseract packages fix security vulnerabilities","description":"This is a security update. It fixes nine vulnerabilities in tesseract,\nthe OCR (text recognition) engine. All nine can be triggered only by\nfeeding tesseract a maliciously crafted input file: either a specially\ncrafted recognition/language data file (.traineddata) or a crafted\nword-list file. Depending on the specific flaw, this can cause a crash\n(denial of service) or memory corruption.\n  CVE-2026-73067: out-of-bounds read when loading a crafted word-list\n                  file.\n  CVE-2026-73066: out-of-bounds write when loading a crafted\n                  recognition model file.\n  CVE-2026-88047: stack buffer overflow when loading a crafted\n                  language-normalisation file.\n  CVE-2026-88048: out-of-bounds read/write from a crafted neural-network\n                  layer in a recognition model file.\n  CVE-2026-88049: out-of-bounds write from a crafted neural-network\n                  layer in a recognition model file.\n  CVE-2026-88050: out-of-bounds write from invalid character-encoding\n                  values in a crafted recognition model file.\n  CVE-2026-88051: out-of-bounds write when loading a malformed internal\n                  data structure from a crafted recognition model file.\n  CVE-2026-88052: out-of-bounds write when loading a crafted\n                  character-set file.\n  CVE-2026-88053: out-of-bounds write when loading a crafted legacy\n                  recognition template file.\n  CVE-2026-88054: crash (denial of service) when loading a crafted\n                  recognition model with an empty internal network.\nThe tesseract package is updated to version 5.5.3, which on its own\nfixes CVE-2026-73067 and CVE-2026-73066. The remaining seven issues\n(CVE-2026-88047 to CVE-2026-88054) are not yet fixed in any upstream\nrelease, so nine patches taken from upstream's main development branch\nare also applied.\nReported by Tristan Madani (CVE-2026-88047) and Zhixi \"Jace\" Sun\n(CVE-2026-88048 to CVE-2026-88054); see the individual advisories below\nfor full credits, including CVE-2026-73067 and CVE-2026-73066.\n","status":"published","published":"2026-10-07T17:19:47Z","modified":"2026-10-07T17:23:04.41548501Z","updated_at":"2026-11-02T15:49:43.795591Z"},{"id":"openSUSE-SU-2026:11887-1","title":"libtesseract5-5.5.3-2.1 on GA media","description":"These are all security issues fixed in the libtesseract5-5.5.3-2.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-09-24T00:00:00Z","modified":"2026-09-25T18:23:09.675133116Z","updated_at":"2026-11-02T16:58:40.245664Z"},{"id":"openSUSE-SU-2026:21957-1","title":"Security update for tesseract-ocr","description":"This update for tesseract-ocr fixes the following issues:\n\nChanges in tesseract-ocr:\n\n- Update to version 5.5.3 (sync with Factory):\n  * CVE-2026-73067: heap out-of-bounds read in SquishedDawg on crafted model (boo#1275623)\n  * CVE-2026-88047: stack buffer overflow in Classify::ReadNormProtos on crafted traineddata (boo#1280925)\n  * CVE-2026-88048: heap out-of-bounds write/read in FullyConnected::Forward via dimension mismatch (boo#1280929)\n  * CVE-2026-88049: heap out-of-bounds write in LSTM::Forward via na_/gate-matrix dimension mismatch (boo#1280930)\n  * CVE-2026-88050: out-of-bounds write in UnicharCompress via unvalidated recoder code values (boo#1280931)\n  * CVE-2026-88051: heap out-of-bounds write in GenericVector\u003cT\u003e::read via reserved/size_used_ mismatch\n    (boo#1280932)\n  * CVE-2026-88052: heap out-of-bounds write in UNICHARSET::load_via_fgets via count/insert\n    desynchronization (boo#1280933)\n  * CVE-2026-88053: heap out-of-bounds write in Classify::ReadIntTemplates via unvalidated counts in\n    crafted traineddata (boo#1280934)\n  * CVE-2026-88054: denial of service via empty-stack dereference at model load (boo#1280935)\n","status":"published","published":"2026-09-24T15:02:59Z","modified":"2026-09-25T17:30:04.151324931Z","updated_at":"2026-11-02T16:58:42.426393Z"},{"id":"USN-8882-1","title":"tesseract vulnerabilities","description":"It was discovered that Tesseract incorrectly handled crafted .traineddata\nmodels. An attacker could possibly use this issue to cause Tesseract to\ncrash, resulting in a denial of service. (CVE-2026-73067)\n\nIt was discovered that Tesseract did not properly validate dimensions in\ncrafted .traineddata models. An attacker could possibly use this issue to\nexecute arbitrary code. (CVE-2026-73066)\n\nIt was discovered that Tesseract did not properly limit token lengths in\ncrafted .traineddata models. An attacker could possibly use this issue to\nexecute arbitrary code. (CVE-2026-88047)\n\nIt was discovered that Tesseract did not properly validate layer dimensions\nin crafted .traineddata models. An attacker could possibly use this issue to\nexecute arbitrary code. (CVE-2026-88048)\n\nIt was discovered that Tesseract did not properly validate layer sizes in\ncrafted .traineddata models. An attacker could possibly use this issue to\nexecute arbitrary code. (CVE-2026-88049)\n\nIt was discovered that Tesseract incorrectly handled negative character\ncodes in crafted .traineddata models. An attacker could possibly use this\nissue to cause Tesseract to crash, resulting in a denial of service.\n(CVE-2026-88050)\n\nIt was discovered that Tesseract did not properly validate vector sizes in\ncrafted .traineddata models. An attacker could possibly use this issue to\nexecute arbitrary code. (CVE-2026-88051)\n\nIt was discovered that Tesseract did not properly validate character IDs in\ncrafted .traineddata models. An attacker could possibly use this issue to\nexecute arbitrary code. (CVE-2026-88052)\n\nIt was discovered that Tesseract did not properly validate classifier\ncounts in crafted .traineddata models. An attacker could possibly use this\nissue to execute arbitrary code. (CVE-2026-88053)\n\nIt was discovered that Tesseract incorrectly handled empty network layers\nin crafted .traineddata models. An attacker could possibly use this issue to\ncause Tesseract to crash, resulting in a denial of service.\n(CVE-2026-88054)","status":"published","published":"2026-10-06T12:50:47Z","modified":"2026-10-06T23:42:37.816054047Z","updated_at":"2026-11-02T16:58:26.907654Z"}]}}
