web-dev-qa-db-fra.com

Que sont les «tableaux JSON de niveau supérieur» et pourquoi représentent-ils un risque pour la sécurité?

Dans la vidéo ci-dessous, au marqueur de temps 21:40, le présentateur Microsoft PDC dit qu'il est important que tout JSON soit encapsulé donc ce n'est pas un tableau de niveau supérieur:

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

Quel est le risque d'une baie de premier niveau déballée?

Comment dois-je vérifier et voir si je suis vulnérable? J'achète de nombreux composants auprès de tiers et j'ai des fournisseurs externes qui développent mon code.

66
goodguys_activate

C'est parce qu'il y a quelques années, Jeremiah Grossman a trouvé une très vulnérabilité intéressante qui affecte gmail . Certaines personnes ont corrigé cette vulnérabilité en utilisant un cruauté insaisissable (la description technique de M. bobince sur cette page est fantastique.)

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

40
rook

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

Je pense que l'attaque (ou une façon 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] notation de tableau. Une attaque CSRF peut donc exploiter votre session ouverte avec votre banque, frapper une URL JSON connue avec un <script> tag pour le récupérer, puis poof vous êtes la propriété.

12
Pointy