Byla představena nová technika pro zneužívání zranitelností v SQLite.

Výzkumníci z Check Pointu odkryté na konferenci DEF CON podrobnosti o nové technice napadání aplikací pomocí zranitelných verzí SQLite. Metoda Check Point považuje databázové soubory za příležitost k integraci scénářů pro zneužití zranitelností v různých interních subsystémech SQLite, které nejsou přímo zneužitelné. Výzkumníci také připravili techniku ​​pro zneužití zranitelnosti zakódováním exploitu ve formě řetězce SELECT dotazů v databázi SQLite, což umožňuje obejít ASLR.

Pro úspěšný útok je nutné mít možnost modifikovat databázové soubory napadených aplikací, což omezuje metodu na útoky na aplikace využívající SQLite databázi jako formát pro přenos a vstupní data. Metodu lze také použít k rozšíření stávajícího místního přístupu, například k integraci skrytých zadních vrátek do používaných aplikací, a také k obcházení bezpečnostních mechanismů při analýze malwaru bezpečnostními výzkumníky. Operace po nahrazení souboru je provedena v okamžiku, kdy aplikace provede první SELECT dotaz na tabulku v upravené databázi.

Jako příklad jsme demonstrovali schopnost spouštět kód v iOS při otevírání adresáře, soubor s databází „AddressBook.sqlitedb“ byl upraven pomocí navržené metody. Útok použil zranitelnost ve funkci fts3_tokenizer (CVE-2019-8602, schopnost dereference ukazatele), opravenou v dubnové aktualizaci SQLite 2.28, spolu s další zranitelnost při implementaci okenních funkcí. Dále bylo ukázáno použití metody vzdáleného převzetí kontroly nad backendovým serverem útočníka napsaným v PHP, který shromažďuje hesla zachycená při provozu škodlivého kódu (zachycená hesla byla přenášena ve formě SQLite databáze).

Metoda útoku je založena na použití dvou technik „Query Hijacking“ a „Query Oriented Programming“, které umožňují využít libovolné problémy, které vedou k poškození paměti v enginu SQLite. Podstatou „Query Hijacking“ je nahrazení obsahu pole „sql“ v tabulce služeb sqlite_master, která určuje strukturu databáze. Zadané pole obsahuje blok DDL (Data Definition Language) používaný k popisu struktury objektů v databázi. Popis je specifikován pomocí standardní syntaxe SQL, tzn. je použita konstrukce „CREATE TABLE“,
který se provádí během procesu inicializace databáze (při prvním spuštění
Funkce sqlite3LocateTable k vytvoření vnitřních struktur souvisejících s tabulkami v paměti.

Myšlenka je taková, že v důsledku nahrazení „CREATE TABLE“ „CREATE VIEW“ bude možné řídit jakýkoli přístup k databázi definováním vlastního pohledu. Pomocí "CREATE VIEW" je s tabulkou navázána operace "SELECT", která bude volána místo "CREATE TABLE" a umožní vám přístup k různým částem interpretru SQLite. Dále by nejjednodušší metodou útoku bylo zavolat funkci „load_extension“, která vám umožňuje načíst libovolnou knihovnu s příponou, ale tato funkce je ve výchozím nastavení zakázána.

Pro provedení útoku, když je možné provést operaci „SELECT“, je navržena technika „Query Oriented Programming“, která umožňuje využít problémy v SQLite vedoucí k poškození paměti. Tato technika připomíná návratově orientované programování (ROP, návratově orientované programování), ale nepoužívá existující úryvky strojového kódu k vytvoření řetězce volání („gadgetů“), ale vkládá do sady poddotazů uvnitř SELECT.

Byla představena nová technika pro zneužívání zranitelností v SQLite.

Byla představena nová technika pro zneužívání zranitelností v SQLite.

Zdroj: opennet.ru

Přidat komentář