Tesseract — это механизм оптического распознавания символов с открытым исходным кодом. В версии 5.5.3 и более ранних версиях Classify::ReadNormProtos в src/classify/normmatch.cpp анализирует компонент NORMPROTO файла .traineddata и использует std::istream::operator>>(char*) для извлечения токена, разделенного пробелами, в фиксированный 61-байтовый буфер стека без установки ширины потока. 100-байтовый строковый буфер может содержать токен длиной до 99 символов, поэтому токен длиной более 60 символов записывает до 39 байтов, контролируемых злоумышленником, за пределы буфера во время TessBaseAPI::Init устаревшего механизма, что приводит к повреждению стека, отказу в обслуживании и потенциальному перехвату потока управления в затронутых реализациях стандартной библиотеки. Сборки, использующие перегрузку ограниченного массива libc++ C++20 от Apple, случайно защищены, в то время как типичные сборки libstdc++ остаются затронутыми.
На момент написания этого обзора фиксированная версия недоступна.
Показать оригинальное описание (EN)
Tesseract 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>>(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'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.
Характеристики атаки
Последствия
Строка CVSS v4.0