Изследователи от компания 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
