Tyrėjai iš „Check Point“.
Kad ataka būtų sėkminga, būtina turėti galimybę modifikuoti užpultų programų duomenų bazės failus, o tai apriboja atakas prieš programas, kurios naudoja SQLite duomenų bazę kaip tranzito ir įvesties duomenų formatą. Šis metodas taip pat gali būti naudojamas išplėsti esamą vietinę prieigą, pavyzdžiui, integruoti paslėptas užpakalines duris į naudojamas programas, taip pat apeiti saugos mechanizmus, kai saugumo tyrinėtojai analizuoja kenkėjiškas programas. Operacija po failo pakeitimo atliekama tuo metu, kai programa vykdo pirmąją SELECT užklausą pagal pakeistos duomenų bazės lentelę.
Kaip pavyzdį pademonstravome galimybę paleisti kodą iOS atidarant adresų knygą, failas su „AddressBook.sqlitedb“ duomenų baze buvo pakeistas siūlomu metodu. Atakoje buvo naudojamas funkcijos fts3_tokenizer pažeidžiamumas (CVE-2019-8602, rodyklės nukrypimo galimybė), ištaisytas balandžio mėn. SQLite 2.28 naujinime, kartu su kitu
Atakos metodas yra pagrįstas dviejų metodų „Užklausos užgrobimas“ ir „Užklausa orientuotas programavimas“ naudojimu, leidžiančiomis išnaudoti savavališkas problemas, dėl kurių SQLite variklyje pažeidžiama atmintis. „Užklausos užgrobimo“ esmė yra pakeisti „sql“ lauko turinį „sqlite_master“ paslaugų lentelėje, kuri lemia duomenų bazės struktūrą. Nurodytame lauke yra DDL (Data Definition Language) blokas, naudojamas duomenų bazės objektų struktūrai apibūdinti. Aprašymas nurodomas naudojant standartinę SQL sintaksę, t.y. naudojama konstrukcija „CREATE TABLE“,
kuris vykdomas duomenų bazės inicijavimo proceso metu (pirmojo paleidimo metu
sqlite3LocateTable funkcijos, skirtos sukurti su lentele susijusias vidines struktūras atmintyje.
Idėja yra ta, kad pakeitus „CREATE TABLE“ į „CREATE VIEW“, tampa įmanoma valdyti bet kokią prieigą prie duomenų bazės nustatant savo vaizdą. Naudojant „CREATE VIEW“, „SELECT“ operacija susieta su lentele, kuri bus vadinama vietoj „CREATE TABLE“ ir leidžia pasiekti skirtingas SQLite interpretatoriaus dalis. Be to, paprasčiausias atakos būdas būtų iškviesti funkciją „load_extension“, kuri leidžia įkelti savavališką biblioteką su plėtiniu, tačiau ši funkcija pagal numatytuosius nustatymus yra išjungta.
Norint įvykdyti ataką, kai galima atlikti operaciją „SELECT“, siūloma „Užklausos orientuoto programavimo“ technika, kuri leidžia išnaudoti SQLite problemas, kurios sukelia atminties sugadinimą. Ši technika primena į grąžą orientuotą programavimą (
Šaltinis: opennet.ru