Изследователи от компанията Check Point на конференцията DEF CON представиха детайли за нова техника за атаки на приложения, използващи уязвими версии на SQLite. Методът на Check Point разглежда файловете с бази данни като възможност за интегриране на сценарии за експлоатация на уязвимости в различни вътрешни системи на SQLite, недостъпни за пряка експлоатация. Изследователите също подготвиха техника за експлоатация на уязвимости, прилагана чрез кодиране на експлоита във формата на верига от SELECT заявки в базата данни SQLite, позволяваща да се заобиколи ASLR.
За успешната атака е необходимо наличие на възможност за модификация на файловете на базите данни на атакуваните приложения, което ограничава метода до атаки на приложения, използващи SQLite в качеството на формат за транзитни и входни данни. Методът може също да се прилага за разширяване на вече придобит локален достъп, например за интегриране на скрити бекдори в използваните приложения, както и за заобикаляне на защитните механизми при анализ на злонамерен софтуер. Експлоатацията след замяната на файла се осъществява в момента на изпълнение на първата SELECT заявка от приложението към таблицата в модифицираната база данни.
Като пример беше демонстрирана възможността за стартиране на код в iOS при отваряне на адресната книга, файлът с базата данни "AddressBook.sqlitedb", който е бил променен с използването на предложената техника. За атаката е използвана уязвимост във функцията fts3_tokenizer (CVE-2019-8602, възможност за разыменуване на указателя), коригирана в априлската актуализация на SQLite 2.28, наред с друга в реализацията на оконни функции. Освен това беше демонстрирано използването на метода за отдалечено поемане на управление над PHP бекенд сървър, управляван от злонамерени лица, който извършва натрупване на пароли, прихванати по време на работа на злонамерен код (прихванатите пароли се предаваха под формата на база данни SQLite).
Методът на атака се основава на използването на две техники «Query Hijacking» и «Query Oriented Programming», които позволяват експлоатация на произволни проблеми, водещи до повреда на паметта в движка SQLite. Същността на «Query Hijacking» е подмяната на съдържанието на полето «sql» в служебната таблица sqlite_master, определяща структурата на базата данни. Посоченото поле съдържа блок DDL (Data Definition Language), използван за описание на структурата на обектите в базата данни. Описанието се задава с използване на стандартен SQL синтаксис, т.е. използва се конструкция «CREATE TABLE»,
която се изпълнява в процеса на инициализация на базата данни (по време на първото стартиране
на функцията sqlite3LocateTable) за създаване на свързани с таблицата вътрешни структури в паметта.
Идеята е, че в резултат на замяна на «CREATE TABLE» с «CREATE VIEW» се появява възможност чрез определението на собственото си представление да се контролира всяко обращение към базата данни. С помощта на «CREATE VIEW» към таблицата се привързва операция «SELECT», която ще бъде извикана вместо «CREATE TABLE» и позволява достъп до различни части на интерпретатора на SQLite. По-нататък най-простият начин на атака би бил извикването на функцията «load_extension», която позволява зареждане на произволна библиотека с разширение, но тази функция е деактивирана по подразбиране.
За осъществяване на атака при условия на възможност за изпълнение на операция «SELECT» е предложена техниката «Query Oriented Programming», която дава възможност за експлоатация на проблеми в SQLite, водещи до повреда на паметта. Техниката напомня на програмирането с ориентация на върнати резултати (, Return-Oriented Programming), но използва за изграждане на верига от извиквания («гаджетите») не съществуващи откъси от машинен код, а вложения в набор от подзапроси в рамките на SELECT.
Източник: opennet.ru
