Удалённо эксплуатируемая уязвимость в SQLite, затрагивающая браузеры на базе Chromium

Во встраиваемой СУБД SQLite выявлена критическая уязвимость, которую можно использовать для совершения удалённой атаки на приложения для выполнения кода злоумышленника. Уязвимость может быть эксплуатирована в случае если приложение допускает передачу в SQLite SQL-конструкций, поступающих извне, или когда приложение допускает обработку подготовленных пользователем бинарных файлов с базой SQLite (например, когда файл с базой используется как формат для переноса данных).

Наибольшую опасность уязвимость представляет для пользователей браузера Chrome и приложений, использующих движок Chromium. Атака на Chromium возможна через манипуляцию с API WebSQL, который реализован поверх SQLite и подразумевает использование данной СУБД для обработки SQL-запросов из web-приложений. Для атаки достаточно создать страницу с вредоносным JavaScript-кодом и добиться чтобы пользователь открыл её в браузере на базе движка Chromium.

Firefox удалённой уязвимости не подвержен так как разработчики Mozilla в своё время отказались от реализации WebSQL в пользу API IndexedDB. SQLite используется в Firefox для хранения внутренних БД на диске, которые недоступны для отправки в них произвольных SQL-запросов из Web. Эксплуатации уязвимости в Firefox можно добиться только через замену этих БД или внесения повреждений на низком уровне, но подобная атака бессмысленна, так как должна быть совершена пользователем, уже имеющим доступ на запись к локальной файловой системе.

Детали уязвимости и метод эксплуатации пока не раскрываются чтобы дать пользователям время на установку обновлений. Наличие уязвимости подтверждено компанией Google. Более того, подготовлен работающий эксплоит для атаки на смартдинамик Google Home. Проблема уже исправлена в недавно сформированных выпусках Chrome/Chromium 71.0.3578.80 и SQLite 3.26. Особенно важно проконтролировать обновление сторонних браузеров на базе движка Chromium, которые не всегда оперативно доводят исправления до пользователей. Идентификатор CVE пока не назначен, но проблеме уже присвоено кодовое имя Magellan.

Судя по недавним изменениям в SQLite предполагается (подтверждено создателем SQLite), что уязвимость вызвана устранённым в выпуске 3.25.3 целочисленным переполнением в реализации движка полнотекстового поиска FTS3, которое могло привести к переполнению буфера в случае повреждения индекса. Для повреждения индекса могли использоваться манипуляции с теневыми таблицами (shadow tables), особым видом виртуальных таблиц с возможностью записи. В SQLite 3.26.0 обеспечен запрет на запись в теневые таблицы, действующий при включении режима SQLITE_DBCONFIG_DEFENSIVE (запрещает возможности, которые могут привести к повреждению БД через SQL, и рекомендуется для включения в случае, если SQLite должен обрабатывать непроверенные внешние SQL-запросы).

Источник: OpenNET