Des chercheurs de Check Point lors de la confĂ©rence DEF CON, dĂ©tails d'une nouvelle technique pour attaquer les applications utilisant des versions vulnĂ©rables de SQLite. La mĂ©thode Check Point considĂšre les fichiers de base de donnĂ©es comme une opportunitĂ© d'intĂ©grer des scĂ©narios d'exploitation de vulnĂ©rabilitĂ©s dans divers sous-systĂšmes internes de SQLite qui ne sont pas directement exploitables. Les chercheurs ont Ă©galement prĂ©parĂ© une technique pour exploiter les vulnĂ©rabilitĂ©s en codant l'exploit sous la forme d'une chaĂźne de requĂȘtes SELECT dans la base de donnĂ©es SQLite, ce qui permet de contourner l'ASLR.
Pour rĂ©ussir une attaque, il est nĂ©cessaire de pouvoir modifier les fichiers de base de donnĂ©es des applications attaquĂ©es, ce qui limite la mĂ©thode aux attaques sur les applications qui utilisent la base de donnĂ©es SQLite comme format de transit et d'entrĂ©e des donnĂ©es. La mĂ©thode peut Ă©galement ĂȘtre utilisĂ©e pour Ă©tendre l'accĂšs local existant, par exemple pour intĂ©grer des portes dĂ©robĂ©es cachĂ©es dans les applications utilisĂ©es, ainsi que pour contourner les mĂ©canismes de sĂ©curitĂ© lors de l'analyse des logiciels malveillants par les chercheurs en sĂ©curitĂ©. L'opĂ©ration aprĂšs la substitution de fichier est effectuĂ©e au moment oĂč l'application exĂ©cute la premiĂšre requĂȘte SELECT sur une table de la base de donnĂ©es modifiĂ©e.
A titre d'exemple, nous avons dĂ©montrĂ© la possibilitĂ© d'exĂ©cuter du code sous iOS lors de l'ouverture d'un carnet d'adresses, le fichier avec la base de donnĂ©es « AddressBook.sqlitedb » a Ă©tĂ© modifiĂ© Ă l'aide de la mĂ©thode proposĂ©e. L'attaque a utilisĂ© une vulnĂ©rabilitĂ© dans la fonction fts3_tokenizer (CVE-2019-8602, capacitĂ© de dĂ©rĂ©fĂ©rencement de pointeur), corrigĂ©e dans la mise Ă jour SQLite 2.28 d'avril, ainsi qu'une autre dans l'implĂ©mentation des fonctions de fenĂȘtre. De plus, lâutilisation dâune mĂ©thode de prise de contrĂŽle Ă distance du serveur backend dâun attaquant Ă©crite en PHP, qui accumule les mots de passe interceptĂ©s lors du fonctionnement dâun code malveillant (les mots de passe interceptĂ©s ont Ă©tĂ© transmis sous la forme dâune base de donnĂ©es SQLite), a Ă©tĂ© dĂ©montrĂ©e.
La méthode d'attaque est basée sur l'utilisation de deux techniques « Query Hijacking » et « Query Oriented Programming », qui permettent d'exploiter des problÚmes arbitraires conduisant à une corruption de la mémoire dans le moteur SQLite. L'essence du « Query Hijacking » est de remplacer le contenu du champ « sql » dans la table de service sqlite_master, qui détermine la structure de la base de données. Le champ spécifié contient un bloc DDL (Data Definition Language) utilisé pour décrire la structure des objets dans la base de données. La description est spécifiée à l'aide de la syntaxe SQL standard, c'est-à -dire la construction « CREATE TABLE » est utilisée,
qui est exécuté lors du processus d'initialisation de la base de données (lors du premier lancement
Fonctions sqlite3LocateTable pour créer des structures internes liées aux tables en mémoire.
L'idée est qu'en remplaçant « CREATE TABLE » par « CREATE VIEW », il devient possible de contrÎler tout accÚs à la base de données en définissant votre propre vue. En utilisant "CREATE VIEW", une opération "SELECT" est liée à la table, qui sera appelée à la place de "CREATE TABLE" et vous permettra d'accéder à différentes parties de l'interpréteur SQLite. Ensuite, la méthode d'attaque la plus simple serait d'appeler la fonction « load_extension », qui permet de charger une bibliothÚque arbitraire avec une extension, mais cette fonction est désactivée par défaut.
Pour mener une attaque lorsqu'il est possible d'effectuer l'opĂ©ration « SELECT », la technique « Query Oriented Programming » est proposĂ©e, qui permet d'exploiter des problĂšmes dans SQLite conduisant Ă une corruption de mĂ©moire. La technique rappelle la programmation orientĂ©e retour (, Programmation orientĂ©e retour), mais n'utilise pas d'extraits de code machine existants pour construire une chaĂźne d'appels (« gadgets »), mais les insĂšre dans un ensemble de sous-requĂȘtes Ă l'intĂ©rieur de SELECT.
Source: opennet.ru
