JSON-/JavaScript-basierte Sicherheitslücke

von Thomas Bahn,
assono GmbH, Standort Kiel,

Unter bestimmten Voraussetzungen gibt es eine Sicherheitslücke, wenn ein Web-Server Antworten im JSON-Format oder in Form von JavaScript erzeugt, was gerade im AJAX-Umfeld sehr häufig der Fall ist.

Szenario: Es gibt eine Web-Anwendung, die XMLHttpRequests (AJAX) benutzt, um vertrauliche Daten vom Server nachzuladen. Die Rückgaben sind im JSON-Format oder JavaScript. Natürlich kann die Anwendung erst nach einer Benutzeranmeldung mit Passwort genutzt werden.

Außerdem gibt es eine "böse" Web-Seite auf einem anderen Server, deren Ersteller Daten ausspähen möchte. Diese Seite enthält dazu ein <script>-Tag, dessen src-Attribut eine URL enthält, die die geschützten Daten zurückgibt. Anders als ein XMLHttpRequest, der nur auf URLs vom gleichen Ursprung angewendet werden kann, erlaubt das <script>-Tag das Einbinden von JavaScript von beliebigen Servern.

Vorher auf derselben Seite installiert ein kleines JavaScript eine Erweiterung des Object- oder Array-Objekts, die aufgerufen wird, wenn ein neues Objekt bzw. ein neues Array erzeugt wird.

Dadurch wird beim Ausführen des oben beschrieben <script>-Tags bei jedem Objekt bzw. Array die installierte Erweiterung aufgerufen und kann auf die vertraulichen Daten zugreifen und diese zum Beispiel mittels eines weiteren AJAX-Aufrufs auf dem "bösen" Web-Server speichern.

Es gibt aber gleich eine ganze Reihe von Voraussetzungen:

Der mit Domino 7.0.2 eingeführte Parameter
OutputFormat=JSON des ReadViewEntries-URL-Befehls
ist also nicht betroffen, da auf der obersten Ebene ein JavaScript-Objekt
(kein Array) zurückgegeben wird.


Bei selbsterzeugten JSON - etwa in Agenten
oder per HTML-Ansichten - muss man jedoch prüfen, ob eine Absicherung notwendig
ist.


Es gibt (mindestens) 2 Methoden, um
die eigene Anwendung zu schützen:

  1. Der Server erwartet in den Aufruf-Parametern eine Information, die er per Cookie an den Browser ausgeliefert hat. Dies kann z. B. eine zufällig erzeugte Zahl sein. Beim Erzeugen der Antwort prüft der Server dann zunächst, ob der Aufruf den Parameter enthält und dieser gleich der ausgesandten Information ist. Da der Browser den Zugriff auf Cookies auf JavaScript vom gleichen Ursprung beschränkt, kann die "böse" Web-Seite nicht auf das Cookie zugreifen.
  2. Man erzeugt JavaScript, das nicht direkt ausgeführt werden kann. Zum Beispiel stellt man ein while(true); voran. In der eigenen Anwendung kann man vor dem eval() diese Anweisung entweder ausschneiden, oder man stellt // voran und macht so daraus ein Kommentar.


Update: Die folgenden Links funktionieren nicht mehr:

Für eine detaillierte Betrachtung lesen
Sie bitte die Analyse von Fortify Software.

Quelle: http://www.fortifysoftware.com/advisory.jsp

Fachbeitrag Sicherheit Entwicklung JavaScript

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie wollen eine individuelle Lösung? Kontaktieren Sie uns

Weitere interessante Artikel

IBM Cognos Analytics 11.0.9 (R9)

IBM Cognos Analytics 11.0.9 (R9)

Erst Mitte November hatten wir über Neuerung in der Version 11.0.8 gebloggt. Knapp ein Monat später veröffentlicht IBM die Version 11.0.9 … Mehr

von
Filip Meyer
,

Sie haben Fragen? Wir sind für Sie da.

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Sie können uns auf verschiedene Weisen für eine unverbindliche Erstberatung erreichen:

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 407
Techn. Hotline: +49 4307 900 403
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de