Уязвимость в SQLite 3.30.1: некорректная обработка pExpr->y.pTab (CVE-2019-19242)
В SQLite 3.30.1 обнаружена уязвимость, связанная с некорректной обработкой внутренней структуры выражения pExpr->y.pTab в функции sqlite3ExprCodeTarget. Проблема проявляется в сценарии TK_COLUMN и потенциально может приводить к неопределённому поведению при обработке SQL-запросов. Затрагивает приложения и сервисы, использующие встроенную библиотеку SQLite указанной версии.
Подробности
Согласно описанию CVE, проблема локализована в функции sqlite3ExprCodeTarget, размещённой в файле expr.c. Речь идёт о внутреннем механизме генерации байт-кода виртуальной машины SQLite, который отвечает за преобразование дерева разобранного выражения в исполняемые инструкции. Уязвимость проявляется в ветке обработки узла типа TK_COLUMN — то есть в случае, когда выражение ссылается на столбец таблицы. При определённых условиях поле pExpr->y.pTab (указатель на структуру таблицы, связанную с выражением-столбцом) обрабатывается некорректно, что приводит к нарушению ожидаемой логики работы парсера и кодогенератора. Затронутая версия — SQLite 3.30.1. Конкретные векторы эксплуатации, уровень критичности по шкале CVSS и наличие публичного эксплойта в записи CVE не указаны, поэтому оценку следует проводить индивидуально, исходя из сценариев использования библиотеки в конкретном продукте. Продукты и вендоры, в которых затронута библиотека, в записи обозначены как n/a. Потенциальная опасность подобных дефектов в SQLite обусловлена широтой применения этой СУБД: она встраивается в мобильные приложения, браузеры, десктопный софт, серверные сервисы и IoT-устройства. Если приложение принимает SQL-запросы или их фрагменты из недоверенных источников, некорректная обработка выражений может привести к аварийному завершению процесса, отказу в обслуживании или иным нежелательным эффектам. В ряде сценариев дефекты подобного класса способны создавать условия для более серьёзных последствий — вплоть до повреждения данных или выхода за пределы ожидаемой логики выполнения запроса.Что делать
Основная рекомендация — обновить SQLite до версии новее 3.30.1. Начиная с релизов, последовавших за 3.30.1, разработчики SQLite устранили ряд дефектов в кодогенераторе; использование актуальной стабильной версии библиотеки закрывает известные проблемы этого класса. Если немедленное обновление невозможно, стоит применить компенсирующие меры: — ограничить возможность передачи в SQLite произвольных SQL-запросов или их фрагментов из недоверенных источников; — использовать параметризованные запросы и строго валидировать входные данные на уровне приложения; — изолировать процессы, работающие с SQLite, чтобы потенциальный сбой не затрагивал критичные компоненты системы; — отслеживать аномальные завершения процессов, связанных с обработкой запросов к базе. Также рекомендуется провести инвентаризацию: определить, в каких компонентах инфраструктуры и продуктах используется встроенная библиотека SQLite, и зафиксировать её версии. Это позволит точно оценить масштаб влияния и спланировать обновление. Итог: CVE-2019-19242 — дефект в SQLite 3.30.1, связанный с некорректной обработкой pExpr->y.pTab в sqlite3ExprCodeTarget. Наиболее надёжное решение — переход на более актуальную версию библиотеки; при невозможности обновления помогут изоляция процессов и строгий контроль над поступающими SQL-запросами.Источник: CVE Project (cvelistV5)
