Sequelize-ORM-npm-Bibliothek mit Schwachstelle für SQL-Injection-Angriffe entdeckt
11. September 2019
0 Min. LesezeitObjekt-relationale Mapper, auch ORMs genannt, sind eine Reihe von SQL-Bibliotheken, die Entwicklerinnen und Entwicklern dabei helfen, ihren Datenbankcode zu verwalten, indem sie ihn in Sprachkonstrukte abstrahieren.
SQL-ORM-Bibliotheken haben sich als sehr hilfreich für die Prävention von SQL-Injection erwiesen. Leider können sie selbst Sicherheitslücken aufweisen, die Tür und Tor für SQL-Injection-Angriffe auf Anwendungsebene öffnen.
Warum sollte ich mich für SQL-Injection-Angriffe interessieren?
Ein großer Vorteil von ORMs ist, dass sie vorbereitete Anweisungen verwenden. Dabei handelt es sich um eine Technik, bei der Eingaben maskiert werden, um Schwachstellen durch SQL-Injection zu verhindern. Dennoch stehen Injection-Angriffe auf der Liste der häufigsten Bedrohungen der OWASP Top 10. Ein Bericht von Akamai zum Zustand des Internets ergab, dass Schwachstellen durch SQL-Injection inzwischen fast zwei Drittel aller Angriffe auf Webanwendungen ausmachen (65,1 %).
Wir haben bereits ausführlicher über SQL-Injection und ORMs geschrieben. In diesem Beitrag möchte ich mich auf das aktuelle Beispiel für SQL-Injection konzentrieren, das das Snyk-Team in der beliebten npm-Bibliothek sequelize entdeckt hat.
Snyk entdeckt SQL-Injection in der npm-Sequelize-ORM-Bibliothek
Im Juni 2019 entdeckte Snyk Angriffsvektoren, die zu SQL-Injection-Angriffen in Anwendungen führen können, die Sequelize verwenden – eine beliebte npm-Bibliothek für Node.js-Anwendungen. Insgesamt fanden wir drei Schwachstellen durch SQL-Injection in Sequelize, die als CVEs CVE-2019-10752, CVE-2019-10749 und CVE-2019-10748 identifiziert wurden.
Kurz nachdem wir das Problem bestätigt hatten, nahmen wir Kontakt mit den Maintainerinnen und Maintainern von sequelize, Jan Aagaard Meier und Sushant Dhiman, auf, um unsere Erkenntnisse verantwortungsvoll offenzulegen und ein Beispiel für SQL-Injection bereitzustellen, das die Sicherheitslücke und die anfälligen Codepfade aufzeigt.
Sequelize nimmt Sicherheit und den Schutz seiner Nutzerinnen und Nutzer sehr ernst und reagierte daher umgehend. Das Projekt veröffentlichte Korrekturen in den Bibliothekszweigen 3.x und 5.x, behob die Schwachstelle und ermöglichte den Nutzerinnen und Nutzern ein Upgrade, um SQL-Injection zu verhindern.

Das Sequelize-Projekt veröffentlichte Korrekturen in Version 3.35.1, die die PostgreSQL betreffenden Sicherheitslücken behebt, sowie in Version 5.8.11, die Sicherheitslücken in den MySQL- und MariaDB-Dialekten schließt. Wir empfehlen Ihnen dringend, so bald wie möglich ein Upgrade durchzuführen, damit Sie sichere Versionen von sequelize verwenden.
Die jüngste der drei genannten SQL-Injection-Schwachstellen wurde in Sequelize Version 5.15.1 behoben. Ein Beispiel finden Sie in den offiziellen Versionshinweisen:

Ein Beispiel für SQL-Injection in MySQL und MariaDB
Alle Versionen von sequelize vor 5.8.11 sind anfällig für SQL-Injection (CVE-2019-10748), da JSON-Pfadschlüssel für die MySQL- und MariaDB-Dialekte nicht korrekt maskiert werden.
Sehen Sie sich folgendes Beispiel für SQL-Injection mit sequelize an:
Das Datenbankfeld meta erwartet ein JSON-Objekt, während der dafür angegebene Schlüssel nicht ordnungsgemäß bereinigt wird, um einfache Anführungszeichen zu maskieren. Wird das einfache Anführungszeichen zusammen mit dem Text )) AS DECIMAL) übergeben, den die Abfrage erwartet, lässt sich der Code ausnutzen.
Dieses Beispiel für SQL-Injection zeigt, wie sich weitere SQL-Abfragen ausführen lassen, etwa eine UNION-Abfrage. Alternativ kann eine Abfrage mit einem Semikolon vollständig beendet und ein nachfolgender Befehl wie ; DROP TABLE USERS angefügt werden.
Eine ähnliche Schwachstelle durch SQL-Injection betrifft alle Versionen von sequelize vor 3.35.1 für den PostgreSQL-Dialekt.
Bin ich betroffen und was sollte ich tun?
Wenn Ihr Projekt von Snyk überwacht wird und wir anfällige Versionen von sequelize finden, benachrichtigen wir Sie über die regelmäßigen Snyk-Warnmeldungen. Wenn Sie außerdem Ihr GitHub-Repository verbunden haben, erstellen wir automatisch einen Pull Request, damit Sie sequelize auf die korrigierte Version aktualisieren können.
Das Sicherheitsteam von Snyk forscht kontinuierlich nach Sicherheitslücken in zahlreichen Sprachökosystemen. Dazu zählen die kürzlich entdeckte Sicherheitslücke in der npm-Bibliothek lodash sowie umfassende Untersuchungen, die zur Entdeckung der Zip-Slip-Schwachstelle in zahlreichen Sprachökosystemen und in Tausenden von Anwendungen führten.
Wenn Ihre Projekte nicht von Snyk überwacht werden und Sie sie auf die Verwendung dieses Pakets überprüfen möchten, können Sie das unten tun oder Ihre Projekte lokal mit unserer CLI testen.
Wir empfehlen Ihnen außerdem, sichere Programmierpraktiken einzuhalten und bewährte Vorgehensweisen zu befolgen, etwa die OWASP-Empfehlungen im Spickzettel zu SQL-Injection.
Haben Sie eine Schwachstelle in Sequelize entdeckt?Wir bei Snyk schätzen die Sicherheits-Community und sind überzeugt, dass die verantwortungsvolle Offenlegung von Sicherheitslücken in Open-Source-Paketen dazu beiträgt, die Sicherheit und den Datenschutz der Nutzerinnen und Nutzer zu gewährleisten. Wenn Sie glauben, eine Schwachstelle in Sequelize entdeckt zu haben, können Sie sie beim Schwachstellen-Offenlegungsprogramm für Snyk Open Source-Pakete melden. Wir kümmern uns um den Rest!https://snyk.io/vulnerability-disclosure/
Starten Sie mit Capture the Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.