В библиотеке баз данных SQLite обнаружена критичная уязвимость, которая была внесена в код в октябре 2000 года и может позволить злоумышленникам нарушить работу или управление программами.
Отслеживаемая как CVE-2022-35737 (рейтинг CVSS: 7.5), проблема 22-летней давности затрагивает SQLite версий от 1.0.12 до 3.39.1, и была устранена в версии 3.39.2, выпущенной 21 июля 2022 года.
«CVE-2022-35737 эксплуатируется на 64-битных системах, и возможность эксплуатации зависит от способа компиляции программы» - сообщил исследователь Trail of Bits Андреас Келлас.
«Выполнение произвольного кода подтверждено при компиляции библиотеки без стековых канавок, но неподтверждено при наличии стековых канавок, а отказ в обслуживании подтвержден во всех случаях».
SQLite, написанный на языке C, является наиболее широко используемым движком баз данных, который по умолчанию включен в Android, iOS, Windows и macOS, а также в популярные веб-браузеры, такие как Google Chrome, Mozilla Firefox и Apple Safari.
Уязвимость, обнаруженная Trail of Bits, касается ошибки целочисленного переполнения, которая возникает, когда очень большие строковые данные передаются в качестве параметров реализации функций printf в SQLite, которые, в свою очередь, используют другую функцию для обработки форматирования строк («sqlite3_str_vappendf»).
Однако успешное использование этого бага в кибератаке зависит от обязательного условия, что строка содержит типы подстановки формата %Q, %q или %w, что потенциально может привести к аварийному завершению программы, когда данные, контролируемые пользователем, записываются за пределы буфера, выделенного стеком.
«Если строка формата содержит специальный символ '!', позволяющий сканировать символы юникода, то в худшем случае можно добиться выполнения произвольного кода или вызвать зависание программы и зацикливание (почти) до бесконечности» - пояснил Келлас.
Уязвимость также является примером сценария, который несколько десятилетий назад считался непрактичным - выделение 1 ГБ строк в качестве входных данных - и который стал возможным с появлением 64-битных вычислительных систем.
«Это ошибка, которая, возможно, не казалась ошибкой в то время, когда был написан код (датируется 2000 годом в исходном коде SQLite), когда системы были преимущественно 32-битной архитектуры» - заявил Келлас.
Источник: https://thehackernews.com