Skip to main content

In this article

Ein Einblick von Snyk in den Open-Source-Sicherheitsbericht 2019 zu Node.js und npm

Artikel von

9. Oktober 2019

0 Min. Lesezeit

Im State of Open Source Security Report 2019 wollten wir ein Stimmungsbild der Open-Source-Sicherheitslandschaft in den verschiedenen Sprachökosystemen erstellen. Dazu haben wir die Antworten von mehr als 500 Open-Source-Maintainern und -Nutzern ausgewertet. Sie gaben uns Einblicke in ihre Prozesse, ihr Wissen über Open-Source-Sicherheitsrisiken und das Kompetenzniveau durchschnittlicher Maintainer.

Zusätzlich zu den Erkenntnissen aus der Umfrage haben wir Daten aus mehreren öffentlichen und privaten Quellen analysiert, darunter die Snyk Vulnerability Database. So wollten wir bewerten, wie sich Sicherheitsprobleme je nach Sprache unterscheiden, wie schnell Nutzer auf Versions-Upgrades mit Sicherheitskorrekturen umsteigen und vieles mehr. Im diesjährigen Bericht haben wir außerdem untersucht, wie sich Schwachstellen auf Docker-Nutzer auswirken und was Sie wissen sollten, um das Sicherheitsrisiko zu mindern.

Führen Sie einen Schnelltest durch, um nach bekannten Schwachstellen in öffentlichen GitHub-Repos und npm-Paketen zu suchen.

Das npm-Ökosystem

Bei der Prüfung der Snyk Vulnerability Database haben wir verschiedene Schwachstellentypen identifiziert, die in den JavaScript- und Node.js-Ökosystemen besonders stark vertreten sind. Zur ersten Gruppe gehören Path-Traversal- und Directory-Traversal-Schwachstellen, die im npm-Ökosystem hervorstechen. 2017 und 2018 wurden Rekordzahlen von 146 beziehungsweise 143 Fällen offengelegt. Die anderen Ökosysteme liegen deutlich zurück – oder sollte ich sagen, deutlich vorn? Wie auch immer: Weniger gemeldete Schwachstellen sind für sie eine gute Nachricht!

Hunderte dieser Schwachstellen gehen auf die Sicherheitsforschung von Snyk in Zusammenarbeit mit Liang Gong, Sicherheitsforscher bei Facebook und Doktorand der Informatik in Berkeley, zurück. Bei der Forschung wurden Dutzende Directory-Traversal-Schwachstellen im npm-Ökosystem entdeckt. Außerdem zeigte sie, dass statische und dynamische Webserver häufig in der npm-Registry zu finden sind, da sie für viele Anwendungsfälle in der Entwicklung benötigt werden.

Balkendiagramm zu Path-Traversal-Schwachstellen in RubyGems, PHP Packagist, PyPI, Maven Central und npm von 2016 bis 2018; npm liegt mit 146 im Jahr 2017 und 143 im Jahr 2018 vorn.

Ein weiterer interessanter Schwachstellentyp ist fast ausschließlich bei Node.js zu finden: Regular Expression Denial of Service (ReDoS). Bei dieser Art von Angriff werden Schwachstellen aufgrund der nichtlinearen Worst-Case-Komplexität bestimmter regulärer Ausdrücke ausgenutzt. Für eine Single-Thread-Laufzeitumgebung kann das verheerende Folgen haben. Deshalb ist Node.js besonders stark von diesem Schwachstellentyp betroffen. Das könnte sich natürlich ändern, da Serverless-Technologien immer beliebter werden. Bei einem nutzungsbasierten Preismodell führt ein ReDoS-Angriff zu einer dynamischen Skalierung des Systems, was für den Service-Anbieter teuer werden kann – vielleicht kommt es sogar zu einem Denial of Funding!

Die Node.js-Laufzeitumgebung ist für ihre vielen Stärken bekannt. Eine davon ist die Single-Threaded Event Loop, die bei falscher Verwendung auch zu ihrer größten Schwachstelle werden kann. Das kommt häufiger vor, als man vielleicht denkt. Im März 2018 enthielt ein Sicherheitsupdate für die offizielle Node.js-Laufzeitumgebung einen Patch zur Behebung einer schwerwiegenden ReDoS-Schwachstelle im Core-Modul „path“, die die Node.js-4.x-Versionen betraf. Die von James Davis von Virginia Tech entdeckte Schwachstelle wurde auch in Node.js 6.x und spätere Versionen portiert, um das Problem zu beheben.

Um zu zeigen, wie einzigartig diese Schwachstelle für Node.js ist, haben wir andere Ökosysteme von 2016 bis 2019 untersucht. Dabei stellten wir fest, dass 2017 nur eine ReDoS-Schwachstelle für PHP gemeldet wurde. In den Java- und Ruby-Ökosystemen wurde 2018 jeweils eine Schwachstelle gemeldet. Bei Node.js hingegen wurden in den letzten drei Jahren insgesamt 116 Schwachstellen gemeldet, und die Zahl der Offenlegungen steigt. Dabei ist es wichtig, zwischen Schwachstellen im Code und tatsächlich gemeldeten Schwachstellen zu unterscheiden. Diese Zahlen geben keinen Aufschluss darüber, wie viele Schwachstellen in diesem Zeitraum in Codebasen eingebaut wurden, sondern darüber, wie viele entdeckt und aus Codebasen entfernt wurden. Man könnte diese Grafik auch positiv betrachten: Es wird gezielt daran gearbeitet, ReDoS-Schwachstellen zu finden und zu beseitigen, sodass künftig wahrscheinlich weniger davon in freier Wildbahn auftreten.

Liniendiagramm mit dem Titel „Meldungen zu Denial-of-Service-Angriffen durch reguläre Ausdrücke (ReDoS) nehmen zu“: ein Anstieg von etwa 14 im Jahr 2016 auf 72 im Jahr 2018.

Lesen Sie weiter, um mehr Ergebnisse aus dem Bericht zu erfahren, und sehen Sie sich den neuen State of Open Source Security Report 2020 an!