Брешь в защите SQLite обнаружил и подробно описал ИБ-специалист Адреас Келлас. Ей присвоены идентификатор CVE-2022-35737 и оценка 7.5 из 10 по шкале CVSS. Уязвимость связана с переполнением целочисленного значения и затрагивает SQLite версий с 1.0.12 по 3.39.1.
Как говорится в описании CVE-2022-35737, SQLite 1.0.12 — 3.39.x до 3.39.2 иногда допускает переполнение границ массива, если миллиарды байт используются в строковом аргументе для C API. Злоумышленник может воспользоваться этим и выполнить произвольный код на пораженной системе.
Келлас пишет, что уязвимость возможно эксплуатировать только на 64-битных системах. Кроме того, последствия использования CVE-2022-35737 меняются в зависимости от того, как компилируется программа:
- Злоумышленник может выполнить произвольный код при компиляции библиотеки без стековых канареек;
- Произвольный код может быть не выполнен при наличии стековых канареек (Stack Canary);
- Отказ в обслуживании происходит во всех случаях.
Эксперт пояснил, что для использования уязвимости злоумышленники должны передать в функцию printf большие строковые входные данные, причем строка формата должна содержать тип подстановки: %Q, %q или %w. По словам Келласа, CVE-2022-35737 связана с переполнением целочисленного значения, которое возникает, когда функция sqlite3_str_vappendf получает большую строку и когда тип подстановки равен %q, %Q или %w.
Исследователь также обнаружил, что если строка формата содержит символ “!” – специальный символ, включающий сканирование символов юникода, то можно добиться выполнения произвольного кода или провести DoS-атаку.
Подводя итоги, Келлас сказал, что 22 года назад эта уязвимость, могла даже не казаться уязвимостью, так как почти все системы были 32-битными.