Blog

Coders Conquer Security: Share & Learn Serie - NoSQL Injection

December 20, 2018
Jaap Karan Singh

NoSQL-Datenbanken werden immer beliebter. Ihre Geschwindigkeit und die einfache Handhabung unstrukturierter Daten sind unbestreitbar, insbesondere da Entwicklungsteams zunehmend nach agilen Methoden arbeiten.

Es dauert seine Zeit, bis Entwickler Schwachstellen und andere Herausforderungen bei neuen Technologien beseitigt haben. Erst nach einer gewissen Zeit im produktiven Einsatz beginnen die Probleme an die Oberfläche zu kommen.

Bei NoSQL-Datenbanken ist das ähnlich. Es gibt zentrale Risiken, derer sich Entwickler bewusst sein sollten, um ihre Anwendungen zu schützen. Ein solches Risiko ist die NoSQL-Injection.

Werfen wir einen Blick darauf, was eine NoSQL-Injection ist, welchen Schaden sie anrichten kann und wie man sie behebt:

NoSQL-Injection verstehen

NoSQL-Injection wird durch viele der gleichen Schwachstellen verursacht wie XML- oder SQL-Injection.

Eine NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzuschleusen. Dadurch können sie Daten stehlen und bei ausreichenden Berechtigungen sogar Änderungen an der Datenbank vornehmen.

Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, können diese Ausdrücke oft Funktionen oder integrierte Operatoren enthalten, die manipuliert werden können, um Daten zu stehlen oder zu verändern. Wenn dies in böswilliger Absicht geschieht, können die Folgen verheerend sein.

MongoDB-Datenbanken sind eines der beliebtesten Ziele für diese Art von Schwachstelle. „$ne: “” ist der Operator, der in der SQL-Welt 1=1 entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne: “” in die Benutzername- und Passwortfelder einer Benutzeroberfläche eingeben. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen Benutzername und Passwort nicht gleich einem leeren String sind. Mit anderen Worten: nach allen. Autsch.

Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers stehlen. Dies schließt auch die Benutzernamen und Passwörter von Administratoren ein, was ihm einen uneingeschränkten Zugriff auf die gesamte Datenbank verschafft.

Angreifer versuchen oft, Werte einzuschleusen, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzufügen, die als Funktionen definiert sind.

MongoDB verwendet beispielsweise eine find-Funktion, die ein Objekt mit einer Eigenschaft namens $where entgegennimmt. Die Eigenschaft $where wird auf eine Funktion gesetzt, die zu „wahr“ oder „falsch“ ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise verändert wird, liegt dort wahrscheinlich eine NoSQL-Injection vor.

Für einen detaillierten Einblick in die Feinheiten der NoSQL-Injection lesen Sie diesen InfoQ-Artikel.

Warum NoSQL-Injection gefährlich ist

NoSQL-Injection ist vor allem deshalb gefährlich, weil sie in der Sicherheits-Community noch nicht die Aufmerksamkeit erhalten hat, die sie verdient.

Die Auswirkungen einer NoSQL-Injection sind weitgehend dieselben wie bei einer klassischen SQL-Injection. Daten können gestohlen oder verändert werden, Konten können durch Datendiebstahl kompromittiert werden und – was vielleicht am schlimmsten ist – Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.

Letztendlich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „No SQL“ bedeutet nicht „keine Injections“.
Glücklicherweise werden einige in der Community aufmerksam und machen das Thema bekannt. Mehr Entwickler müssen sich weiterbilden, um ihre Anwendungen vor wenig bekannten Gefahren zu schützen, die bei einer Ausnutzung zu einem riesigen Problem werden können.

NoSQL-Injection abwehren

NoSQL-Injection kann schwer zu bekämpfen sein. Leider gibt es hier nicht die Option parametrisierter Abfragen wie bei SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt einige Optionen, die Ihnen weiterhelfen:

  • Fuzzer können als eine Methode zur Erkennung von Schwachstellen eingesetzt werden. Wie bei vielen Dingen im Leben ist jedoch der einfachste Ansatz oft der effektivste. Hier ist eine gute alte Code-Überprüfung Ihr stärkster Verbündeter.
  • Achten Sie bei der Code-Überprüfung auf Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie Benutzereingaben nicht, Ihre Abfragen zu verändern.
  • Stellen Sie sicher, dass Sie Benutzereingaben in den richtigen Datentyp umwandeln. Wenn es eine Zahl ist, wandeln Sie sie in eine Zahl um, wenn es ein String ist, in einen String, und so weiter.
  • Verwenden Sie niemals $where oder ähnliche eval-Funktionen in Verbindung mit Benutzereingaben. In den meisten Fällen können Sie dies umgehen, indem Sie das Datenmodell oder das Schema ändern.
  • Versuchen Sie, Mongoose als Ihren MongoDB-Treiber zu verwenden. Mongoose ermöglicht es Ihnen, ein Schema für Ihre NoSQL-Datenbank zu definieren. Wenn Sie Mongoose mitteilen, dass Ihre Eingaben Strings sind, werden sie auch als solche behandelt. Objekte, die von einem Angreifer übergeben werden, werden dann nicht als Objekte, sondern als Strings interpretiert.
  • Härten Sie Ihre Datenbank! Erstellen Sie Benutzerkonten mit eingeschränkten Rechten, begrenzen Sie die Ausführungszeit für Abfragen und befolgen Sie stets die Sicherheitsrichtlinien, die für Ihr Unternehmen gelten.

Ein Nachteil der einfachen Handhabung von NoSQL-Datenbanken ist die Tendenz von Entwicklern, diese ohne Sicherheitsüberlegungen aufzusetzen und sofort zu nutzen.

Es ist wichtig, dass Sie sich die Zeit nehmen, zu lernen, wie man eine NoSQL-Datenbank sicher aufsetzt und sich vor NoSQL-Injections schützt.

Zum Beispiel bietet MongoDB Enterprise Edition erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Das Prinzip der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Schwachstelle in Ihrer Anwendung finden sollte.

Zusammenfassend lässt sich sagen:

  • Bereinigen Sie Ihre Eingaben, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
  • Verwenden Sie Treiber, die Sie unterstützen, wie Mongoose
  • Führen Sie Code-Reviews durch, die speziell darauf achten, wie Eingabedaten innerhalb von Abfragen verwendet werden
  • Nutzen Sie Fuzzer und Scanner, um Schwachstellen in Ihrem Code aufzuspüren.

NoSQL bedeutet nicht keine Injections

NoSQL-Datenbanken gewinnen aufgrund ihrer Skalierbarkeit und schnellen Einrichtung rasch an Beliebtheit. Die Neuartigkeit der Technologie kann dazu führen, dass Entwickler NoSQL-Datenbanken nutzen, ohne über deren Absicherung nachzudenken.

NoSQL-Datenbanken können genauso anfällig für Injection-Angriffe sein wie SQL-Datenbanken. Handeln Sie daher vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, werfen Sie einen Blick auf unsere Lernressourcen oder testen Sie Ihre Fähigkeiten mit unserer kostenlosen Demo.

Bereiten Sie sich rechtzeitig vor, dann müssen Sie sich keine Sorgen um NoSQL-Injections in Ihren Anwendungen machen. Ganz einfach!

Bereit, NoSQL-Injections jetzt aufzuspüren, zu identifizieren und zu beheben? Betreten Sie die Arena für sicheren Code, Krieger:

Das war es für 2018! Dies ist unser letzter Beitrag für dieses Jahr, aber wir sind am 10. Januar 2019 mit dem nächsten „Coders Conquer Security“-Guide zurück. Bis bald!

Slogan

Kontrollieren Sie KI-gestützte Entwicklung, bevor sie in Produktion geht

Bewerten Sie KI-gestützte Risiken, setzen Sie Richtlinien für sicheren Code direkt beim Commit durch und beschleunigen Sie die sichere Bereitstellung über Ihren gesamten SDLC hinweg.

Demo buchen
Ressourcenbibliothek

Weitere Blogs entdecken

Erhalten Sie Zugang zu Experteninhalten über sichere Programmierung, KI-Governance und Software-Risikomanagement.

alle anzeigen
Fallstudie
Filterbezeichnung
Dies ist ein Text innerhalb eines Div-Blocks.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Mehr erfahren
Fallstudie
Filterbezeichnung
Dies ist ein Text innerhalb eines Div-Blocks.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

Mehr erfahren
Fallstudie
Filterbezeichnung
Dies ist ein Text innerhalb eines Div-Blocks.

Eine Sicherheitskultur: Wie Sage sein Champions-Programm aufgebaut hat

Erfahren Sie, wie Sage die Sicherheit durch einen flexiblen, beziehungsorientierten Ansatz gestärkt, über 200 Security Champions ausgebildet und eine messbare Risikoreduzierung erzielt hat.

Mehr erfahren
Blog
Filterbezeichnung
Dies ist ein Text innerhalb eines Div-Blocks.

Cybersecurity Awareness Month 2026: Das Verständnis von KI-Sicherheit ist entscheidend für die Unternehmensverteidigung

Wir haben einen Punkt erreicht, an dem die meisten führenden KI-Unternehmen öffentlich eine weltweite Verlangsamung der KI-Entwicklung gefordert haben, damit die Sicherheitsvorkehrungen Schritt halten können. Doch die Wahrheit ist: Ernsthafte Sicherheitsprobleme sind bereits Realität geworden. Dies bringt unzählige Sicherheitsverantwortliche und Führungsteams in eine dringliche Lage, da die finanziellen Kosten und Risiken durch die Implementierung von KI stetig steigen.

Mehr erfahren
Blog
Filterbezeichnung
Dies ist ein Text innerhalb eines Div-Blocks.

Enabler 8: Branding für Ihr Programm

Ein Programm für sicheres Programmieren braucht mehr als nur großartige Inhalte, um erfolgreich zu sein. Enabler 8 zeigt, wie Branding die Teilnahme zu einem begehrten, statusorientierten Erlebnis macht.

Mehr erfahren
Blog
Filterbezeichnung
Dies ist ein Text innerhalb eines Div-Blocks.

Jeder Mitarbeiter steht jetzt an vorderster Front der KI-Cybersicherheit

Die Unternehmenslandschaft wandelt sich mit einer Geschwindigkeit, die kaum jemand vorhergesehen hat, bis es zu spät war. Wir haben offiziell die Schwelle von handgeschriebenem Code und einfacher Copilot-Unterstützung hin zur Ära des Agentic Development Lifecycle (ADLC) überschritten. Während autonome KI-Agenten eine beispiellose Effizienz in vielen Bereichen versprechen, bringen sie auch eine völlig neue Klasse von Sicherheits- und Regulierungsrisiken mit sich.

Mehr erfahren

Sichere KI-gestützte Entwicklung vor dem Release

Erkennen Sie Entwicklerrisiken, setzen Sie Richtlinien durch und verhindern Sie Schwachstellen über den gesamten Softwareentwicklungszyklus hinweg.

Demo buchen
Keine Elemente gefunden.