67 votes

Que sont les "tableaux JSON de niveau supérieur" et pourquoi constituent-ils un risque pour la sécurité ?

Dans la vidéo ci-dessous, au repère temporel 21:40, le présentateur du PDC de Microsoft indique qu'il est important que tout le JSON soit enveloppé afin qu'il ne s'agisse pas d'un tableau de niveau supérieur :

https://channel9.msdn.com/Events/PDC/PDC09/FT12

Quel est le risque d'un tableau de niveau supérieur non emballé ?

Comment puis-je vérifier si je suis vulnérable ? J'achète de nombreux composants à des tiers et je fais appel à des fournisseurs externes pour développer mon code.

41voto

Rook Points 34698

C'est parce qu'il y a quelques années Jeremiah Grossman a trouvé un très vulnérabilité intéressante affectant gmail . Certaines personnes ont remédié à cette vulnérabilité en utilisant un système de contrôle de la qualité de l'eau. des déchets incompréhensibles (La description technique de M. Bobince sur cette page est fantastique).

La raison pour laquelle Microsoft en parle est qu'ils n'ont pas (encore) patché leur navigateur. ( Edit : Les versions récentes d'Edge et d'IE 10/11 ont résolu ce problème). Mozilla considère qu'il s'agit d'une vulnérabilité dans la spécification json et l'a donc corrigée dans le cadre de l'initiative Firefox 3 . Pour mémoire, je suis entièrement d'accord avec Mozilla, et c'est malheureux, mais chaque développeur d'applications web va devoir se défendre contre cette vulnérabilité très obscure.

12voto

Pointy Points 172438

Je pense que c'est parce que le constructeur Array() peut être redéfini. Cependant, ce problème n'est pas vraiment propre aux tableaux.

Je pense que l'attaque (ou un moyen possible) est quelque chose comme ceci :

function Array(n) {
  var self = this;
  setTimeout(function() {
    sendToEvilHackers(self);
  }, 10);
  return this;
}

Le navigateur (ou certains navigateurs) utilise ce constructeur pour [n, n, n] la notation des tableaux. Une attaque CSRF peut donc exploiter votre session ouverte avec votre banque, frapper une URL JSON connue avec un code de type <script> pour le récupérer, puis pouf vous êtes possédés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X