4. Security Considerations (Considérations de sécurité)
4. Security Considerations (Considérations de sécurité)
Les considérations de sécurité pour JSONPath peuvent provenir :
-
de vecteurs d'attaque sur les implémentations JSONPath,
-
de vecteurs d'attaque sur la façon dont les requêtes JSONPath sont construites, et
-
de la manière dont JSONPath est utilisé dans des mécanismes sensibles à la sécurité.
4.1. Attack Vectors on JSONPath Implementations (Vecteurs d'attaque sur les implémentations JSONPath)
Historiquement, JSONPath a souvent été implémenté en fournissant des parties de la requête à un moteur de langage de programmation sous-jacent, par ex. la fonction eval() de JavaScript. Cette approche mène bien connu aux attaques par injection et exigerait une validation d'entrée parfaite pour les prévenir (voir la section 12 de [RFC8259] pour des considérations analogues sur JSON lui-même). À la place, les implémentations JSONPath doivent implémenter l'intégralité de la syntaxe de la requête sans s'appuyer sur les analyseurs des moteurs de langage de programmation.
Les attaques sur la disponibilité peuvent tenter de déclencher des performances d'exécution anormalement coûteuses exhibées par certaines implémentations dans certains cas. (Voir la section 10 de [RFC8949] pour les problèmes d'implémentations de tables de hachage et la section 8 de [RFC9485] pour les problèmes de performance des implémentations d'expressions régulières.) Les implémenteurs doivent savoir qu'une bonne performance moyenne ne suffit pas tant qu'un attaquant peut choisir de soumettre des requêtes JSONPath ou arguments de requête spécialement conçus qui déclenchent une utilisation CPU étonnamment élevée, possiblement exponentielle, ou, par exemple via une implémentation récursive naïve du segment descendant, un débordement de pile. Les implémentations doivent disposer d'une gestion appropriée des ressources pour atténuer ces attaques.
4.2. Attack Vectors on How JSONPath Queries Are Formed (Vecteurs d'attaque sur la formation des requêtes JSONPath)
Les requêtes JSONPath ne sont souvent pas statiques mais formées à partir de variables fournissant des valeurs d'indice, des noms de membres ou des valeurs à comparer dans une expression de filtre. Ces variables doivent être validées (par ex. n'autoriser certains construits tels que .name que lorsque les valeurs données le permettent) et traduites (par ex. en échappant les délimiteurs de chaîne). Ne pas effectuer correctement ces validations et traductions peut mener à des défaillances inattendues, pouvant mener à des atteintes à la disponibilité, la confidentialité et l'intégrité, en particulier si un adversaire contrôle les valeurs (par ex. en les saisissant dans un formulaire web). La classe d'attaques résultante, les injections (par ex. injections SQL), figure régulièrement parmi les principales causes de vulnérabilités de sécurité applicatives et exige une attention particulière.
4.3. Attacks on Security Mechanisms That Employ JSONPath (Attaques sur les mécanismes de sécurité employant JSONPath)
Lorsque JSONPath fait partie d'un mécanisme de sécurité, les attaquants peuvent tenter de provoquer un comportement inattendu ou imprévisible ou tirer parti de différences de comportement entre implémentations JSONPath.
Un comportement inattendu ou imprévisible peut provenir d'un argument de requête avec certains construits décrits comme imprévisibles par [RFC8259]. Un comportement prévisible peut être attendu, sauf en ce qui concerne l'ordre des objets, pour tout argument de requête conforme à [RFC7493].
D'autres attaques peuvent cibler le comportement des technologies sous-jacentes, telles que UTF-8 (voir la section 10 de [RFC3629]) et le jeu de caractères Unicode.