
PoC exposant une vulnérabilité critique IndexedDB qui permet une attaque de saturation du disque en exploitant l'absence de restrictions.

IFA est une preuve de concept (PoC) qui montre comment un attaquant peut exploiter l'API IndexedDB dans les navigateurs web populaires pour mener une attaque de saturation du disque. Cette attaque exploite spécifiquement l'absence de restrictions dans IndexedDB, permettant au navigateur de stocker des données sans limites efficaces, ce qui peut rapidement consommer l'espace disque d'un utilisateur en injectant des centaines de Mo par seconde. Cela peut entraîner une dégradation significative des performances du système, l'épuisement du stockage et, dans les cas extrêmes, un crash complet du système.
Dans un monde où nous comptons de plus en plus sur les applications web pour la productivité et le divertissement, une vulnérabilité qui peut rendre votre appareil inutilisable en quelques minutes est une menace sérieuse. IFA révèle comment l'absence de restrictions dans IndexedDB peut être exploitée pour créer un scénario où un utilisateur perd le contrôle de son système à cause d'un simple script.
L'exécution d'IFA peut avoir les effets dévastateurs suivants :
Dégradation massive des performances : Le stockage massif et continu de données dans IndexedDB sature les opérations d'entrée/sortie du disque, entraînant une diminution significative de la vitesse du système. Les utilisateurs subiront des temps de réponse extrêmement lents, rendant difficile l'utilisation normale de leurs appareils.
Épuisement rapide du stockage : En quelques minutes, l'attaque peut consommer des gigaoctets d'espace disque. Une fois le stockage épuisé, le système devient incapable d'effectuer des opérations de base comme enregistrer des documents, installer des mises à jour ou même ouvrir de nouvelles applications.
Instabilité et crash du système : Lorsque le disque est complètement rempli, le système d'exploitation peut devenir instable ou même planter, entraînant la perte de données non sauvegardées et potentiellement l'endommagement de fichiers système critiques. Les utilisateurs affectés peuvent être confrontés à la nécessité de restaurer leur système ou même d'effectuer une réinstallation complète du système d'exploitation.
IFA affecte une large gamme de navigateurs :
IFA utilise une stratégie soigneusement conçue pour exploiter l'absence de restrictions dans l'API IndexedDB, maximisant l'impact de l'attaque tout en empêchant le navigateur de planter prématurément :
Génération d'identifiants uniques : Le script génère plusieurs bases de données avec des noms aléatoires, garantissant l'absence de conflits et que chaque base de données peut stocker de grandes quantités de données.
Injection de blobs de 8 Mo : IFA utilise des blobs de 8 Mo (fragments de données volumineux) composés de texte répétitif et de données d'image. Ce choix de taille est crucial car il permet de stocker efficacement de grands volumes de données sans provoquer un crash immédiat du navigateur. En utilisant des blobs d'une taille spécifique, IFA peut saturer le disque de l'utilisateur de manière cohérente et persistante, contournant les mécanismes de sécurité basés sur le tampon mémoire de l'onglet du navigateur qui pourraient arrêter l'attaque si des opérations d'écriture excessives ou trop rapides sont détectées.
Boucles de stockage de données : Les blobs de 8 Mo sont stockés à plusieurs reprises dans l'objet IndexedDB, créant un flux continu de données qui remplit rapidement l'espace disque. IFA injecte des centaines de Mo par seconde, assurant une consommation rapide de l'espace de stockage de l'utilisateur tout en évitant les crashes immédiats du navigateur.
Saturation du disque : Le processus se poursuit indéfiniment, stockant des données jusqu'à ce que l'espace disque soit épuisé, entraînant une série de problèmes pouvant paralyser le système.
L'exploit IFA démontre comment une vulnérabilité sévère dans l'API IndexedDB peut être transformée en arme. Voici quelques scénarios dans lesquels un attaquant pourrait exploiter cette PoC pour causer des dommages importants :
Exploitation via Cross-Site Scripting (XSS) : Si un attaquant découvre une vulnérabilité XSS sur un site web légitime, il pourrait injecter le script IFA dans le site. Lorsque les utilisateurs visitent la page compromise, le script s'exécuterait automatiquement dans leurs navigateurs, remplissant rapidement leur espace disque. Cela pourrait entraîner un ralentissement significatif du système, voire un crash, en particulier pour les utilisateurs qui ne sont pas conscients de l'attaque.
Bibliothèques JavaScript tierces compromises : De nombreux sites web et applications web s'appuient sur des bibliothèques JavaScript tierces. Si un attaquant compromettait l'une de ces bibliothèques en y injectant le script IFA, tout site utilisant la bibliothèque affectée pourrait devenir involontairement un vecteur d'attaque. Cela entraînerait une saturation généralisée du disque sur tout appareil d'utilisateur chargeant le script compromis.
Extensions de navigateur malveillantes : Les attaquants pourraient développer ou compromettre des extensions de navigateur pour inclure le script IFA. Une fois installée, l'extension pourrait exécuter le script silencieusement en arrière-plan, saturant l'espace disque de l'utilisateur à chaque ouverture du navigateur. Ce scénario est particulièrement dangereux car les extensions de navigateur ont souvent des autorisations étendues.
Publicités web infectées : Un attaquant pourrait placer une publicité malveillante contenant le script IFA sur un site web légitime. Lorsque les utilisateurs chargent la page avec la publicité infectée, le script s'exécuterait et commencerait à consommer leur espace disque. Cette méthode pourrait cibler un grand nombre d'utilisateurs, en particulier sur les sites web à fort trafic.
Campagnes de phishing : Les attaquants pourraient envoyer des e-mails de phishing dirigeant les victimes vers un site web hébergeant le script IFA. Une fois que la cible visite le site malveillant, le script s'exécuterait et commencerait à remplir son espace disque. Cette méthode pourrait être particulièrement efficace dans les attaques ciblées contre des individus ou des organisations.
Pour vous aider à mieux comprendre l'impact d'IFA, j'ai créé une démonstration sur un site web dédié. Cette démo web est conçue pour vous permettre de voir facilement l'exploit en action et de comprendre ses effets potentiels.
Explorez la démo en direct : Rendez-vous sur https://ifa.run pour interagir avec la démo en direct. Cela vous permettra de constater par vous-même comment cette attaque peut affecter votre navigateur et votre système. J'ai créé cette démo pour garantir que tout le monde puisse facilement tester et voir les conséquences de l'exploit. N'oubliez pas d'effectuer ce test avec prudence et dans un environnement contrôlé.
Démo d'injection cachée : Pour une démonstration plus subtile, rendez-vous sur https://ifa.run/hidden.html. Cette version fonctionne de manière invisible, effectuant l'injection directement sans aucun graphisme visible ni interface utilisateur comme dans la démo principale.
Regardez la vidéo de la PoC : Si vous préférez une explication guidée, j'ai également créé une vidéo de démonstration. Dans la vidéo, je vous guide à travers l'exécution d'IFA et vous montre les effets qu'elle peut provoquer : Vidéo PoC.
Si vous êtes intéressé par le test local de la PoC, suivez ces étapes simples. Nous vous guiderons pour inclure le script IFA.js et exécuter l'exploit avec des données personnalisées.
Tout d'abord, vous devez inclure le script IFA.js dans votre fichier HTML. Vous avez deux options :
<script src="IFA.js"></script>
<script src="https://cdn.jsdelivr.net/gh/jofpin/IFA/IFA.js"></script>
L'utilisation du lien CDN est particulièrement utile pour tester l'exploit sur différents sites web ou applications web sans avoir à héberger le script vous-même.
Une fois le script inclus, vous êtes prêt à exécuter l'exploit. Le script IFA vous permet de personnaliser les données qui seront injectées. Voici comment procéder :
Insérez votre image Base64 : Convertissez une image au format Base64 et insérez-la dans le champ img.
Insérez votre texte personnalisé : Saisissez le texte que vous souhaitez utiliser dans le champ txt.
Voici un exemple d'exécution de l'exploit :
IFA.run({
img: "data:image/webp;base64,UklGRpZBAwBXRUJQV...", // Insérez votre image Base64 ici
txt: "IFA" // Insérez votre texte personnalisé
});
img : C'est ici que vous placez l'image encodée en Base64. L'image sera injectée directement, garantissant une exécution plus rapide et plus efficace en évitant les requêtes externes au serveur.
txt : Ici, vous saisissez le texte qui sera stocké dans la base de données. Vous pouvez personnaliser ce texte pour tester différents scénarios.
Après avoir exécuté le script, observez comment l'exploit se comporte. Vous devriez remarquer :
Utilisation de l'espace disque : L'espace disque devrait se remplir rapidement à mesure que le script écrit continuellement des données dans IndexedDB.
Performances du système : Vous pouvez observer une dégradation significative des performances du système, avec des temps de réponse plus lents et une instabilité potentielle.
Comportement du navigateur : L'exploit devrait éviter de faire planter le navigateur immédiatement, maintenant plutôt l'attaque persistante, conduisant finalement à un disque plein.
Utilisez un environnement contrôlé : Assurez-vous de tester dans un environnement contrôlé, car cette PoC peut provoquer une instabilité du système.
Encodage Base64 : En utilisant Base64 pour l'image, l'injection est gérée localement, ce qui évite les erreurs potentielles et rend l'exploit plus efficace.
La révélation de cette vulnérabilité devrait servir d'appel à l'action pour les développeurs de navigateurs. Voici quelques mesures qui pourraient être mises en œuvre pour prévenir de telles attaques :
Mise en place de limites de quota : Les navigateurs devraient établir des limites strictes sur la quantité de stockage qu'une application web peut utiliser via IndexedDB. Cela empêcherait un script malveillant de consommer tout l'espace disque.
Détection des comportements anormaux : Les navigateurs devraient développer des mécanismes pour détecter et bloquer les comportements anormaux, comme la création massive de bases de données ou le stockage de grandes quantités de données en peu de temps.
Alertes utilisateur : Lorsqu'une utilisation de stockage inhabituelle est détectée, le navigateur devrait alerter l'utilisateur et offrir la possibilité de bloquer l'application tentant d'exploiter la vulnérabilité.
La création d'IFA est un effort pour montrer ce qui pourrait arriver si les mesures nécessaires ne sont pas prises pour sécuriser les technologies web que nous utilisons quotidiennement. IFA n'est pas seulement une démonstration technique, mais un avertissement à toute l'industrie technologique : dans notre quête d'innovation, nous ne devons pas compromettre la sécurité.
Le code a le pouvoir de construire ou de détruire. Assurons-nous que notre héritage soit celui de la construction, et non de la destruction. - Jose Pino
Cette PoC est destinée uniquement à des fins éducatives et de recherche. Son exécution doit être effectuée dans des environnements contrôlés et ne doit pas être utilisée sur des systèmes de production ou des appareils contenant des données importantes. Une mauvaise utilisation de cette PoC pourrait entraîner des dommages importants, et il est de la responsabilité de l'utilisateur de s'assurer qu'elle est employée de manière éthique.
Le contenu de ce projet lui-même est sous licence Creative Commons Attribution 3.0, et le code source sous-jacent utilisé pour formater et afficher ce contenu est sous licence MIT.
Copyright (c) 2024 par Jose Pino