Qu'est-ce qu'une injection JSON et comment l'éviter ?
JSON (notation d'objet JavaScript)est un format d'échange de données standard ouvert utilisé pour communiquer entre les applications. JSON est similaire à XML mais plus facile à lire que XML en raison de sa nature très légère (petite taille de fichier).
JSON est dérivé de JavaScript, le langage de programmation du Web et le plus populaire au monde. Cela en fait le format d’échange de données préférable sur Internet. Même s'il ressemble beaucoup à la syntaxe littérale des objets JavaScript, il peut être utilisé indépendamment de JavaScript, et de nombreux environnements de programmation offrent la possibilité de lire (analyser) et de générer du JSON.
JSON existe sous forme de chaîne, utile lorsque vous souhaitez transmettre des données sur un réseau. Cependant, il doit être converti en objet JavaScript natif lorsque vous souhaitez accéder aux données. JavaScript fournit un objet JSON global avec des méthodes disponibles pour convertir un objet natif en chaîne (sérialisation) et convertir une chaîne en objet natif (désérialisation). Une chaîne JSON peut être stockée dans son propre fichier, qui est essentiellement un simple fichier texte avec une extension .json, et un type d'application/json MIME, qui est essentiellement une extension du protocole de messagerie Internet qui permet à ses utilisateurs d'échanger. différents types de données telles que des images, des fichiers audio et vidéo sur Internet.
De nombreuses applications Web l'utilisent pour stocker des informations importantes et communiquer entre elles. JSON est souvent traité comme des données mises en cache lorsqu'il est utilisé pour stocker des données et peut potentiellement contenir des informations sensibles. JSON est souvent utilisé conjointement avec API RESTful et les applications AJAX pour transmettre des informations sensibles telles que les informations d'authentification lorsqu'elles sont utilisées pour envoyer des messages.
L'utilisation généralisée de JSON dans les applications Web en fait une cible pour les activités malveillantes. JSON seul ne constitue pas une grande menace. Après tout, ce n’est qu’un format d’échange de données. Les véritables problèmes de sécurité avec JSON surviennent dans la manière dont il est utilisé. Si elles sont mal utilisées, les applications basées sur JSON peuvent devenir vulnérables à des attaques telles que le détournement JSON et l'injection JSON. Cet article abordera tout ce qui concerne les attaques par injection JSON, y compris comment les détecter et les empêcher.
Qu’est-ce que l’attaque par injection JSON et comment ça marche ?
Les attaques par injection dans les applications Web sont des cyberattaques qui cherchent à injecter du code malveillant dans une application pour modifier son exécution normale. Les attaques par injection peuvent entraîner une perte de données, une modification des données et un déni de service. En conséquence, il est répertorié comme le risque numéro un pour la sécurité des applications Web dans le Top 10 de l'OWASP .
L'injection JSON est un exemple typique d'attaque par injection, bien qu'elle ne soit pas aussi courante et dangereuse que les autres formes d'attaque par injection, telles que Injection SQL . La sémantique des documents JSON et des messages de sortie peut être considérablement modifiée si une application construit JSON à partir d'une entrée non fiable ou non validée. Un attaquant peut profiter de cette faille pour insérer des codes malveillants susceptibles de modifier l’exécution normale du programme. Dans certains cas, l'injection JSON peut conduire à Scripts intersites ou Évaluation dynamique du code .
JSON est traditionnellement analysé à l'aide d'une fonction eval(), mais il s'agit d'une pratique non sécurisée. Tout code qui utilise eval() pour désérialiser le JSON en un objet JavaScript est ouvert aux attaques par injection JSON.
L'injection JSON se produit lorsque :
- Les données provenant d'une source non fiable ne sont pas nettoyées par le serveur et écrites directement dans un flux JSON. C'est ce qu'on appelle l'injection JSON côté serveur.
- Les données provenant d'une source non fiable ne sont pas nettoyées ni analysées directement à l'aide de la fonction d'évaluation JavaScript. C'est ce qu'on appelle l'injection JSON côté client.
Afin de démontrer le fonctionnement d'une attaque par injection JSON côté serveur, considérons une application Web qui accepte la saisie du nom d'utilisateur et du mot de passe des utilisateurs sans vérification. Les données fournies par l'utilisateur (nom d'utilisateur, mot de passe et type de compte) sont stockées côté serveur sous forme de chaîne JSON. La chaîne JSON est formée par simple concaténation, comme indiqué dans le code ci-dessous :
|_+_|Étant donné que l'application ne nettoie pas les données d'entrée, un utilisateur malveillant a décidé d'ajouter des données inattendues à son nom d'utilisateur : |_+_|
Par conséquent, la chaîne JSON résultante devient :
{ 'Compte':'utilisateur