В СУБД SQLite нашли уязвимость, которой 22 года
Специалисты Trail of Bits выявили в СУБД SQLite серьёзную уязвимость, которая оказалась в коде ещё в октябре 2000 года. Она позволяла злоумышленникам вызывать сбои в работе программ или управлять ими.
Проблеме присвоили идентификатор CVE-2022–35737, её серьёзность оценили в 7,5 баллов по шкале CVSS.
Как отметили исследователи, баг можно эксплуатировать в 64-разрядных системах, и «возможность использования зависит от того, как скомпилирована программа». По их словам, выполнение произвольного кода возможно, когда «библиотека скомпилирована без стековых «канареек», но невозможно в случае их присутствия».
Проблема связана с целочисленным переполнением. Оно возникает, если чрезвычайно большой input строки передаётся в качестве параметров SQLite-имплементациям функций printf, которая, в свою очередь, использует другую функцию для обработки форматирования строки (sqlite3_str_vappendf).
Однако атака осуществима лишь при условии, что строка формата содержит подстановки %Q, %q или %w.
«Если строка формата содержит специальный символ '!' для включения сканирования на символы Unicode, то в худшем случае можно добиться выполнения произвольного кода или заставить программу зависнуть и зациклиться на (почти) неопределённый срок», — разъяснили эксперты.
Проблема затрагивала SQLite версий от 1.0.12 до 3.39.1 и была устранена с релизом версии 3.39.2 в июле 2022 года.