ReDoS-Schwachstellen in npm steigen um 143 %, XSS nimmt weiter zu
26. Februar 2019
0 Min. LesezeitWillkommen zum jährlichen Bericht „State of Open Source Security 2019“ von Snyk. Dieser Bericht ist in mehrere Beiträge unterteilt:
88 % mehr Schwachstellen in Anwendungbibliotheken innerhalb von zwei Jahren
Die zehn beliebtesten Docker-Images enthalten jeweils mindestens 30 Schwachstellen
ReDoS-Schwachstellen in npm steigen um 143 %, XSS nimmt weiter zu
78 % der Schwachstellen finden sich in transitiven Abhängigkeiten, was die Behebung komplex macht
Oder laden Sie unseren liebevoll gestalteten PDF-Bericht herunter, der all diese Informationen und mehr an einem Ort vereint.
Bericht „State of Open Source Security 2019“ herunterladen
Denial-of-Service-Angriffe durch reguläre Ausdrücke
Die Node.js-Runtime ist für viele Stärken bekannt. Eine davon, die Single-Thread-Event-Loop, kann jedoch auch ihre größte Schwachstelle sein, wenn sie nicht richtig eingesetzt wird. Das kommt häufiger vor, als man vielleicht denkt.
Denial-of-Service-Angriffe durch reguläre Ausdrücke (ReDoS) nutzen Schwachstellen aus, die durch die nichtlineare Worst-Case-Komplexität bestimmter Regex-Muster entstehen können. Für eine Single-Thread-Runtime kann das verheerende Folgen haben. Deshalb ist Node.js besonders stark von dieser Art Schwachstelle betroffen.
Wir haben festgestellt, dass in den vergangenen drei Jahren immer mehr ReDoS-Schwachstellen offengelegt wurden. Allein 2018 gab es einen Anstieg um 143 %.

XSS-Schwachstellen
Cross-Site-Scripting-Angriffe (XSS) sind für Webanwendungen ein stetig wachsendes Problem. Auch bei den XSS-Schwachstellen beobachten wir 2018 einen sprunghaften Anstieg in allen von Snyk überwachten Ökosystemen.
XSS-Schwachstellen in Open-Source-Bibliotheken nehmen weiterhin zu, obwohl sie seit über 15 Jahren zu den wichtigsten Anliegen von OWASP zählen
In diesen Ökosystemen haben wir die meisten XSS-Schwachstellen im npm-Ökosystem festgestellt: insgesamt 225. Es folgen das Maven Central Repository mit 167 und PyPI mit insgesamt 163 Cross-Site-Scripting-Schwachstellen. 2018 wurden im PHP-Packagist-Ökosystem mit 56 XSS-Schwachstellen die meisten offengelegt, gefolgt von npm mit 54 und Maven Central mit 29.

Path Traversal
Path- und Directory-Traversal-Schwachstellen stechen im npm-Ökosystem mit Rekordzahlen hervor: 146 Offenlegungen im Jahr 2017 und 143 im Jahr 2018. Die übrigen Ökosysteme liegen deutlich darunter – was gut ist!
Man könnte vermuten, dass dies auf die Vielzahl statischer und dynamischer Webserver zurückzuführen ist, die mit Node.js für den Produktions- und Entwicklungsbetrieb erstellt werden. Dadurch gibt es wesentlich mehr Pakete, in denen solche Schwachstellen auftreten können.

SQL-Injection-Schwachstellen
Ein weiterer verbreiteter Angriffsvektor, der im vergangenen Jahrzehnt regelmäßig in den OWASP Top 10 auftauchte, ist CWE-89, besser bekannt als SQL-Injection.
Ein Blick auf die vergangenen drei Jahre zeigt, dass jedes der drei wichtigsten untersuchten Ökosysteme in einem anderen Jahr einen Höchststand verzeichnete. Maven-Bibliotheken führten 2016 und 2017 bei den offengelegten SQL-Injection-Schwachstellen. 2018 erreichten PHP-Packagist-Bibliotheken den Höchststand.

Offenlegung vertraulicher Informationen
Bei der Untersuchung der Registries Maven Central und PHP Packagist stellten wir fest, dass dort die meisten Schwachstellen im Zusammenhang mit der Offenlegung von Informationen auftraten. In beiden Ökosystemen erreichte die Zahl 2018 ihren Höchststand.
Informationen werden häufig unbeabsichtigt offengelegt. Das geschieht, wenn ein Programm oder System potenziell vertrauliche Informationen wie Namen und Werte von Umgebungsvariablen preisgibt. Eine Offenlegung kann auch „by design“ erfolgen, etwa wenn vertrauliche Daten in URL-Parametern übermittelt werden.
Zu den Beispielen für Schwachstellen zur Offenlegung von Informationen in der Maven-Central-Registry zählen die Pakete apache spark, jenkins core und keyclock-saml-core. Das Jenkins-SSH-Agent-CI-Plugin legte beispielsweise den privaten SSH-Schlüssel offen – für alle sichtbar, die Leseberechtigungen für die Build-Logs hatten.
Auch in der PyPI-Registry gibt es zahlreiche Schwachstellen in Bibliotheken, darunter Beispiele für die Offenlegung von Informationen. Das Paket django zeigte Admin-Benutzern mit reinen Anzeigeberechtigungen einen Passwort-Hash an. Das Paket djangorestframework-api-key speicherte API-Schlüssel im Klartext.

Unverschlüsselte Übertragung vertraulicher Informationen
Zu guter Letzt gibt es eine weitere besondere Schwachstelle, die im npm-Ökosystem erwähnenswert ist: CWE-319, auch bekannt als unverschlüsselte Übertragung vertraulicher Informationen. Dabei werden Ressourcen über unsichere Protokolle aufgerufen. Wir fanden 44 neu gemeldete Schwachstellen in Paketen aus dem Jahr 2016. 2017 stieg diese Zahl um 250 % auf beachtliche 110 Pakete.
„Der Sicherheitszustand eines Ökosystems und seine öffentliche Wahrnehmung unterscheiden sich oft erheblich. Der fehlende Typenzwang in JavaScript hat die Vorstellung verbreitet, dass es sich aufgrund der Typmanipulation um eine unsichere Sprache handelt. Die Zahl der in npm-Modulen entdeckten Schwachstellen war in den letzten Jahren jedoch weiterhin geringer als die der in Maven Central entdeckten. Gleichzeitig können manche Schwachstellen dadurch verschärft werden, dass Node.js weiterhin nur einen Thread nutzt. ReDoS (oder andere DoS-Angriffe durch CPU-Erschöpfung), die in der Node.js-Welt viel häufiger vorkommen, sind ein Beispiel dafür. Hoffentlich ermöglichen Worker Threads Node.js schon bald, diese Risiken zu verringern. Die Sicherheits-Community rund um Node.js ist in den vergangenen Jahren immer aktiver geworden, und wir können weiterhin hart daran arbeiten, das Ökosystem künftig sicherer zu machen.“
Vladimir de Turckheim
Node.js Foundation, Node.js Security Working Group
Im Fokus: Bösartige Pakete
Vielleicht sind Ihnen bösartige Pakete bereits in verschiedenen Zusammenhängen begegnet – etwa als bösartiger Docker-Container oder als bösartiges Paket in einer öffentlichen Registry eines Ökosystems. Auch in anderen Zusammenhängen haben wir Entwickler als Verbreitungsweg für Malware thematisiert, zum Beispiel bei der Induc-Malware, die Delphi-Compiler infizierte, und bei XCodeGhost, das auf iOS- und OSx-Entwickler abzielte.
Allerdings sind nicht alle bösartigen Pakete gleich. Pakete in Ökosystem-Registries lassen sich grob in folgende Kategorien einteilen:
Ein Typosquatting-Angriff, bei dem ein bösartiges Paket einen Namen verwendet, der dem eines beliebteren Pakets sehr ähnlich ist
Ein kompromittiertes CI- oder Registry-Konto eines Maintainers, über das eine bösartige Version veröffentlicht wird, oder ein bösartiges Paket in der Abhängigkeitsliste eines Projekts
Die gezielte Manipulation von Personen, damit ein bösartiges Paket (oder ein Paket, das nach seiner Aufnahme bösartig wird) in die Abhängigkeitsliste eines Projekts aufgenommen wird
2018 beobachteten wir im npm-Ökosystem alle diese Arten bösartiger Pakete. npm ist dafür bekannt, stärker als andere Registries von solchen Paketen betroffen zu sein. Für Schlagzeilen sorgte im Dezember 2018 das Paket event-stream. Es stützte sich auf eine bösartige Abhängigkeit, die durch einen scheinbar harmlosen Versuch, zu einem Open-Source-Projekt beizutragen, eingeschleust wurde.
Dieser Hack führte innerhalb von nur zwei Monaten zu sage und schreibe 8 Millionen Downloads des bösartigen Pakets. Ein weiteres Beispiel aus dem Jahr 2018 ist das Paket ESLint-scope, bei dem das Konto des Maintainers kompromittiert wurde. Außerdem beobachteten wir 2018 insgesamt 11 Typosquatting-Angriffe mit bösartigen Paketen in der npm-Registry.
2018 wurde ein bösartiges Paket rekordverdächtige 8 Millionen Mal heruntergeladen. Es war einer von 25 Typosquatting-Angriffen in npm und PyPI
Zusätzlich zu den typischen Typosquatting-Versuchen der Vergangenheit beobachteten wir im npm-Ökosystem ausgefeiltere bösartige Angriffe als in den Vorjahren, etwa den Angriff auf ESLint-scope. Der Vorfall mit event-stream war deutlich ausgefeilter und zeigte ein hohes Maß an Fachwissen sowie gezielte Angriffe, wie wir sie bei früheren bösartigen Angriffen auf dieses Ökosystem noch nicht erlebt hatten.
Anders als in der npm-Registry identifizierten wir bösartige Pakete nur in zwei weiteren Registries: ein bösartiges Paket in RubyGems im Jahr 2018 sowie zehn bösartige Pakete in Python im Jahr 2017 und dreizehn im Jahr 2018.
Weiterlesen:
88 % mehr Schwachstellen in Anwendungbibliotheken innerhalb von zwei Jahren
Die zehn beliebtesten Docker-Images enthalten jeweils mindestens 30 Schwachstellen
ReDoS-Schwachstellen in npm steigen um 143 %, XSS nimmt weiter zu
78 % der Schwachstellen finden sich in transitiven Abhängigkeiten, was die Behebung komplex macht
Starten Sie mit Capture-the-Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Challenges lösen.
