L'erreur de Magellan: dépassement de tampon ou expédition autour du monde avec SQLite FTS

J'ai en quelque sorte contourné la récente erreur Magellan sur Habré et les vulnérabilités qui y sont liées, je vais essayer de corriger cette omission.


Un peu d'histoire


  • Le 1er novembre 2018, un rapport de bogue numéro 900910 a volé dans Chromium: «Plusieurs problèmes dans SQLite via WebSQL». L'erreur est signalée par Wenxiang Qian de l'équipe Tencent Blade.
  • Le 5 novembre 2018, l' erreur est corrigée dans le cœur de la bibliothèque SQLite (FTS3), où elle vit en fait presque depuis la création du module, c'est-à-dire depuis novembre 2009.
  • 28 novembre 2018, il fusionne avec Chromium
  • Un peu plus tard, la Tencent Blade Team publie un message d'erreur, lui donnant le nom de Magellan, surtout sans révéler de détails, et indiquant que la publication d'exploits prêts à l'emploi et de PoC n'est pas encore prévue.
  • Une semaine plus tard, Internet regorge de PoC, de crash de Chrome, de Dev-framework Electron, etc. Les preuves et toute autre information indiquant que la vulnérabilité a été utilisée à des fins malveillantes ne le sont toujours pas.
  • DRH , a confirmé des soupçons à Hacker News que la vulnérabilité existe (au moins si l'exécution d'une requête SQL «étrangère» est autorisée, ou une injection SQL d'un scénario similaire).

Qu'est-ce qui pourrait être vulnérable?


Potentiellement, tous les appareils et programmes utilisant SQLite (avec FTS activé) ou utilisant ou basé sur des applications basées sur lui (comme Chromium). La mesure dans laquelle ils peuvent être affectés et l'effet d'une éventuelle «perte» dépendent de la découverte d'un vecteur d'attaque approprié.


Un peu plus sur Magellan SQLite BUG


L'erreur est associée au débordement de la somme des nombres entiers aka débordement d'entier , qui peut être provoqué dans le sous- système FTS3 / 4 en modifiant l'index FTS de la table, ce qui peut entraîner une réécriture de la mémoire ou une terminaison à une exception près.


L'application artificielle ciblée de ce débordement d'entier, par le biais d'un "découpage" compétent des tampons d'écriture, conduit à un débordement de mémoire et peut être utilisée à l'avenir par des requêtes SQL spécialement créées.


Par conséquent, en théorie, de nombreuses applications qui utilisent SQLite (avec des tables FTS virtuelles) et, en particulier, les navigateurs populaires qui prennent en charge SQLite basé sur SQLite avec FTS activé (par exemple, Google Chrome, Chromium, Opera, Slimjet Browser, SRWare Iron, Torch, peuvent être vulnérables). Comodo Dragon, CoolNovo, navigateur Yandex, Vivaldi, etc.).


Les bases de données SQLite sont généralement très populaires, elles sont fournies au moyen de plus d'une douzaine de langages de programmation, chaîne d'outils, frameworks, etc., sont utilisées par les applications pour les appareils mobiles et les ordinateurs à part entière, et se retrouvent souvent même dans les solutions de serveur. Ainsi, par exemple, les navigateurs Web populaires tels que Google Chrome, Mozilla Firefox et Yandex Browser, de nombreux messagers instantanés (par exemple, WhatsApp, Viber, WeChat et autres) stockent des données dans ce format, etc. etc.


Le même Fossil SCM , par exemple, utilise la base de données SQLite pour stocker l'historique des révisions et vous permet d'utiliser l'indexation de texte intégral via FTS (et permet d'y accéder à partir de l'interface utilisateur / du museau Web, où, par exemple, il est possible de créer vos propres requêtes SQL, par exemple des rapports de ticket personnalisés etc.).


Mise à jour: DRH, en tant que co-auteur et développeur de Fossil, a apparemment pensé la même chose, et a déjà " fermé le trou " en mettant à jour SQLite vers 3.26.0


Un tel débordement «prévisible» n'est pas une chose très agréable en soi, mais si vous vous souvenez exactement ce qui peut être stocké dans la banque elle-même (du contenu des magazines aux tables elles-mêmes) ...
Alors, ne soyez pas des camarades paresseux ... et sont mis à jour, mis à jour.


Où trouver le correctif?


Le correctif [940f2adc8541a838] est fourni dans le cadre de la mise à jour SQLite 3.25.3 (vers laquelle Chromium et co. Ont également été mis à jour, par exemple, Chrome dans la version 71.0.3578.80).


SQLite version 3.26 fournit également des fonctionnalités de sécurité supplémentaires pour les conteneurs FTS, par exemple:

prise en charge des tables masquées en lecture seule lorsque l'option SQLITE_DBCONFIG_DEFENSIVE est activée

Quel est le danger de cette vulnérabilité?


Critique. Permet l'exécution de code à distance. Une fuite de mémoire et un plantage du programme sont également probables.


Existe-t-il des exemples d'exploits prêts à l'emploi pour exploiter la vulnérabilité?


Oui


En particulier, l'équipe Tencent Blade affirme avoir réussi à attaquer Google Home en utilisant cette vulnérabilité (l'accès à la description du problème sur le traqueur de bogues Google est fermé), et comme mentionné ci-dessus, il n'est pas prévu de divulguer le code d'exploitation pour le moment.


Conditions d'utilisation de la vulnérabilité?


La vulnérabilité peut être effectuée à distance, par exemple, lorsqu'une certaine page Web est appelée dans un navigateur, ou dans tout scénario similaire, par exemple, permettant l'exécution d'instructions SQL (si FTS n'est pas désactivé, si un vecteur d'attaque possible est détecté et / ou la présence ou l'occurrence de certains autres facteurs propices à l'exploitation vulnérabilités).


Ce n'est d'ailleurs pas la première erreur du type dépassement de capacité et dépassement de tampon dans SQLite en particulier et dans le module FTS en particulier (par exemple [56be976859294027] ), mais c'est probablement la plus importante du genre en termes de signification, d'impact théorique et d '«échelle» relative dans les manières d'une application possible et d'une évaluation des conséquences. de cela.

Source: https://habr.com/ru/post/fr433596/


All Articles