Programmierer erobern die Sicherheit: Serie „Teilen und Lernen“ — NoSQL Injection

NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.
Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.
NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.
Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:
NoSQL Injection verstehen
NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.
NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.
Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.
MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.
Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.
Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.
MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.
Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.
Erfahren Sie, warum NoSQL Injection gefährlich ist
NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.
Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.
Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.
Besiegen Sie NoSQL Injection
Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:
- Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
- Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
- Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
- Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
- Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
- Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.
Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.
Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.
Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.
Zusammenfassend haben wir Folgendes:
- Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
- Benutze Treiber, die dir weiterhelfen, wie Mongoose
- Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
- Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.
NoSQL ist nicht No Injections
NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.
NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.
Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!
Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:
Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!
Govern AI-driven development before it ships
Measure AI-assisted risk, enforce secure coding policy at commit, and accelerate secure delivery across your SDLC.
Explore more blogs
Lorem ipsum diam quis enim lobortis scelerisque fermentum dui faucibus in ornare quam viverra orci sagittis eu volutpat odio facilisis.
%252520%252520(3).avif)
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.

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

One Culture of Security: How Sage built their security champions program with agile secure code learning
Discover how Sage enhanced security with a flexible, relationship-focused approach, creating 200+ security champions and achieving measurable risk reduction.

Named in the Gartner® Hype Cycle™ for Application Security 2026
Secure Code Warrior is named in the Gartner® Hype Cycle™ for Application Security, 2026 for Agentic Coding Security and Secure Coding Training. Here's why.
Secure AI-driven development before it ships
See developer risk, enforce policy, and prevent vulnerabilities across your software development lifecycle.

