CVE-2020-11655: уязвимость в SQLite до 3.31.1 позволяет вызвать отказ в обслуживании
В SQLite версий до 3.31.1 обнаружена уязвимость, позволяющая злоумышленнику вызвать отказ в обслуживании (segmentation fault) с помощью специально сформированного запроса с оконными функциями. Проблема связана с некорректной инициализацией объекта AggInfo. Уязвимость затрагивает приложения и сервисы, использующие уязвимые версии библиотеки.
Подробности
Уязвимость затрагивает SQLite вплоть до версии 3.31.1 включительно. Причиной является некорректная обработка инициализации объекта AggInfo при выполнении запросов, содержащих оконные функции (window functions). Злоумышленник, способный передать в СУБД специально сформированный запрос, может вызвать ошибку сегментации (segmentation fault), что приводит к аварийному завершению процесса и, как следствие, к отказу в обслуживании (denial of service). Тип уязвимости — CWE-476 (разыменование нулевого указателя) в контексте обработки агрегатной информации. Оконные функции появились в SQLite начиная с версии 3.25.0 (2018 год), поэтому уязвимыми могут оказаться приложения, которые принимают SQL-запросы от внешних источников и работают на затронутых версиях библиотеки. Значение CVSS в исходной записи CVE не указано, однако с учётом характера воздействия (только нарушение доступности, без выполнения кода или утечки данных) уязвимость обычно оценивается как средняя по критичности. Практическая опасность зависит от сценария использования: если приложение не позволяет недоверенным пользователям формировать произвольные SQL-запросы, эксплуатация затруднена. В противном случае возможен целенаправленный вывод сервиса из строя — например, через публичный API, транслирующий пользовательский ввод в SQL.Что делать
Основная рекомендация — обновить SQLite до версии выше 3.31.1. Патч был включён в состав релиза 3.32.0, выпущенного в мае 2020 года, поэтому безопасными являются версии 3.32.0 и более поздние, включая актуальные ветки 3.4x и выше. Если обновление библиотеки невозможно в короткие сроки, следует применить компенсирующие меры: - ограничить возможность передачи произвольных SQL-запросов от недоверенных источников; - использовать параметризованные запросы и строгую валидацию пользовательского ввода на уровне приложения; - изолировать процессы, работающие с SQLite, чтобы аварийное завершение не затрагивало критичные сервисы; - отслеживать аномальные перезапуски процессов, взаимодействующих с базой данных. Также стоит проверить сторонние компоненты и зависимости, которые содержат встроенную копию SQLite (например, мобильные SDK, десктопные приложения, ORM-библиотеки), и убедиться, что в них используется пропатченная версия. Итог: CVE-2020-11655 — умеренно опасная уязвимость отказа в обслуживании, эксплуатация которой требует возможности влиять на выполняемые SQL-запросы. Несмотря на отсутствие риска выполнения произвольного кода, игнорировать обновление не стоит: своевременный переход на SQLite 3.32.0+ устраняет проблему полностью и не требует дополнительных митигаций.Источник: CVE Project (cvelistV5)
