Was sind JSON-Arrays der obersten Ebene und warum stellen sie ein Sicherheitsrisiko dar?

73

Im folgenden Video, zum Zeitpunkt 21:40, sagt der Microsoft PDC-Präsentator, dass es wichtig ist, dass alle JSONs verpackt werden, damit es sich nicht um ein Array der obersten Ebene handelt:

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

Was ist das Risiko eines unverpackten Top-Level-Arrays?

Wie soll ich überprüfen, ob ich verwundbar bin? Ich kaufe viele Komponenten von Drittanbietern und habe externe Anbieter, die meinen Code entwickeln.

goodguys_activate
quelle

Antworten:

45

Dies liegt daran, dass Jeremiah Grossman vor einigen Jahren eine sehr interessante Sicherheitslücke gefunden hat, die sich auf Google Mail auswirkt . Einige Leute haben diese Sicherheitsanfälligkeit mit einer nicht analysierbaren Kruft behoben (die technische Beschreibung von Herrn Bobince auf dieser Seite ist fantastisch.)

Der Grund, warum Microsoft darüber spricht, ist, dass sie ihren Browser (noch) nicht gepatcht haben. ( Bearbeiten: Neuere Versionen von Edge und IE 10/11 haben dieses Problem behoben.) Mozilla betrachtet dies als Sicherheitslücke in der JSON-Spezifikation und hat es daher in Firefox 3 gepatcht . Ich stimme Mozilla voll und ganz zu, und es ist bedauerlich, aber jeder Web-App-Entwickler muss sich gegen diese sehr dunkle Sicherheitslücke verteidigen.

Turm
quelle
8
Ist das Senden vertraulicher Informationen in einem JSON-Array auch 2017 ein Sicherheitsrisiko?
Jrahhali
@jrahhali diese Frage verdient ihren eigenen Beitrag, vielleicht wäre security.stackexchange.com ein guter Ort dafür.
Turm
14

Ich denke, das liegt daran, dass der Array () -Konstruktor neu definiert werden kann. Dieses Problem betrifft jedoch nicht nur Arrays.

Ich denke, der Angriff (oder ein möglicher Weg) ist ungefähr so:

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

Der Browser (oder einige Browser) verwenden diesen Konstruktor für die [n, n, n]Array-Notation. Ein CSRF-Angriff kann daher Ihre offene Sitzung mit Ihrer Bank ausnutzen, eine bekannte JSON-URL mit einem <script>Tag abrufen, um sie abzurufen, und dann Ihren Besitz verlieren .

Spitze
quelle
3
Ich verstehe das nicht - das Verschieben des Arrays im JSON in eine Eigenschaft würde diese Art von Angriff nicht stoppen. Eine Rückkehr {"d":[1,2,3]}wäre genauso anfällig wie eine Rückkehr [1,2,3].
Peter Bailey
Ich stimme zu - das habe ich gemeint, als ich sagte, dass das Problem nicht nur Arrays betrifft.
Pointy
38
Nicht wahr. A {am Anfang einer Zeile in JavaScript wird als Codeblock und nicht als Objektliteral interpretiert. Daher ist Ihr {"d":[1,2,3]}Skript nicht gültig und wird vom Browser nicht ausgeführt.
Probieren Sie
3
Follow-up: haacked.com/archive/2009/06/25/json-hijacking.aspx Für mich ist es eine bessere Erklärung der Bedrohung als der Artikel von Grossman
Sebas