© saicle/Shutterstock.com
Wie angreifbar sind NoSQL-Datenbanken?

NoSQL, no SQL Injection - no Security?


Eine Datenbank ist für einen Angreifer fast immer interessant, denn meist enthält sie wertvolle Informationen, die er gerne hätte. Im Fall von SQL-Datenbanken versuchen die Angreifer im Allgemeinen, Daten über einen SQL-Injection-Angriff abzufragen. Davor schützt die Verwendung von Prepared Statements, die parametrisiert aufgerufen werden. Aber wie sieht es mit der Sicherheit von NoSQL-Datenbanken aus?

Die nahe liegende Folgerung „NoSQL => No SQL Injection => Keine Gefahr!“ können wir gleich zu Beginn streichen, denn NoSQL heißt ja nicht zwingend „No SQL“, sondern eher „Not only SQL“. Und wenn eine NoSQL-Datenbank (auch) SQL-Abfragen verwendet, ist natürlich SQL Injection möglich, vorausgesetzt vom Benutzer werden manipulierbare Parameter ungeprüft in eine anfällige SQL-Abfrage übernommen.

Injection, ganz ohne SQL

Wenn kein SQL für die Abfrage der Datenbank verwendet wird, ist unter Umständen ein mit einer SQL Injection vergleichbarer Angriff möglich. Generell gilt: Immer, wenn eine Abfragesprache verwendet wird, ist auch ein Injection-Angriff darauf denkbar. Statt SQL Injection könnten Angreifer es via JSON Injection, JavaScript Injection oder Ähnlichem versuchen (allgemein könnte man von einer „Query Language Injection“ oder „QL Injection“ sprechen [1]).

Betrachten wir mal MongoDB: Dort werden BSON oder JavaScript für Abfragen verwendet. Die Entwickler weisen in der Dokumentation auf die Gefahr von Benutzereingaben in JavaScript und durch das als Operatorkennzeichnung verwendete $-Zeichen hin [2].

Bei BSON-Abfragen sollte keine Gefahr bestehen, da die Abfragen als BSON-Objekte repräsentiert werden – aber nur, wenn die verwendete Programmiersprache und/oder Bibliothek alles richtig machen. Allerdings kennen Sie bestimmt den Spruch „Wenn das Wörtchen ‚wenn‘ nicht wär“? Denn wenn die Entwickler von Programmiersprache und/oder Bibliothek einen Fehler machen, ist es auch mit der Sicherheit von BSON nicht weit her. Genau so sieht es auch aus, wenn Programmiersprache und Datenbank nicht ganz die gleiche Sprache sprechen.

Phil Taylor hat schon 2010 einen Injection-Angriff auf MongoDB in Verbindung mit PHP beschrieben [3]. Der Angriff ist möglich, da PHP URL-Parameter in assoziative Arrays umwandeln kann, die MongoDB dann als Abfragen interpretiert. Der Angriff lässt sich ganz einfach verhindern, indem sichergestellt wird, dass alle Variablen vom erwarteten Type sind, in diesem Fall Strings. Aber dazu muss man erst mal wissen, dass ein falscher Type überhaupt e...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang