Skip to main content

Angular vs. React: Das Sicherheitsrisiko indirekter Abhängigkeiten

Artikel von
JavaScript Report feature

30. Oktober 2019

0 Min. Lesezeit

Willkommen zum Snyk-Bericht 2019 zum Sicherheitsstatus von JavaScript-Frameworks.

In diesem Abschnitt betrachten wir die Sicherheitsrisiken indirekter Abhängigkeiten bei Angular und React und anschließend die direkten Abhängigkeiten – zuerst bei Angular, dann bei React.

Laden Sie den Bericht hier herunter!

Die in diesem Abschnitt untersuchten Module stellen keine vollständige Liste anfälliger React- und Angular-Module dar. Einige Module verwenden möglicherweise spezielle Namenskonventionen (beispielsweise Präfixe wie ng-, angular- oder react-), die bei unserer musterorientierten Suche nicht erfasst wurden.

Das Sicherheitsrisiko indirekter Abhängigkeiten

Projekte auf Basis von React oder Angular werden häufig mit einem Gerüstbau-Tool erstellt, das eine Vorlage für den Entwicklungsstart bereitstellt. Bei React ist die gängige Vorgehensweise für Entwickler, das npm-Paket create-react-app zu verwenden. Es erstellt ein vorkonfiguriertes Projekt als Ausgangspunkt und integriert beispielsweise das Test-Framework Jest, CSS-Prozessoren und weitere Tools. Bei Angular ist dies dank des npm-Pakets @angular/cli möglich.

Um den Zustand der Abhängigkeiten und die Sicherheit (die das Gesamtsicherheitsrisiko widerspiegeln) der React- und Angular-Vorlagen zu vergleichen, haben wir ein Beispielprojekt erstellt. Das Ergebnis ist recht erfreulich: Beide enthalten anfällige Entwicklungsabhängigkeiten, aber keine Sicherheitsprobleme in Produktionsabhängigkeiten.

Die folgenden Sicherheitslücken werden von Anfang an in Ihren Code eingebracht, wenn Sie ein Projekt mit der Angular- oder React-Vorlage starten:

Vorlage

Anfälliges Modul

Indirekte Sicherheitslücke

Schweregrad der indirekten Sicherheitslücke

Jährliche Modul-Downloads

Behebbar?

Angular

ReDoS

niedrig

94,559,055

✅

Angular

ReDoS

hoch

70,181,373

❌

React

Prototype Pollution

hoch

1,005,518,049

✅

React

MPL-2.0-Lizenzproblem

hoch

89,291,454

❌

React

Prototype Pollution

hoch

328,052,052

✅

React

Prototype Pollution

hoch

629,781,760

✅

Bemerkenswert ist, dass Angular auf 952 Abhängigkeiten setzt, die insgesamt zwei Sicherheitslücken enthalten. React verwendet 1257 Abhängigkeiten, darunter drei Sicherheitslücken und ein mögliches Problem mit der Lizenzkompatibilität.

Hinweis zu Softwarelizenzen in Open Source

Bei der Lizenzierung betrachten wir die Lizenzkonformität neben Sicherheitsproblemen als wichtigen Faktor für den allgemeinen Zustand von Abhängigkeiten. Daher prüfen unsere Scans auch Lizenzen. Die Ergebnisse der Lizenzprüfung basierten auf den Standardkonfigurationen unserer Lizenzrichtlinien, die vor dem Scan festgelegt wurden.

Diesen Ergebnissen zufolge hängt das generierte React-Projekt vom Paket mdn-data ab, das wiederum die Mozilla-Copyleft-Lizenz MPL-2.0 verwendet. Wenn Sie Ihre React-Anwendung mit On-Premises-Installationen oder ähnlichen Setups verteilen möchten, die die Abhängigkeit mdn-data enthalten, sollten Sie die Lizenzanforderungen prüfen, damit Ihr Projekt konform ist.

Außerdem empfehlen wir, Ihre Projekte anhand der Vorgaben der individuellen Richtlinien Ihrer Organisation zu scannen. Diese können weitere indirekte React-Abhängigkeiten beanstanden – müssen es aber nicht.

Anfällige Pfade beheben

Ein Pfad beschreibt, wie eine Open-Source-Abhängigkeit in Ihr Projekt gelangt. Angenommen, Sie haben zwei direkte Abhängigkeiten namens Project A und Project B. Beide bringen die Abhängigkeit Project C mit. Project C ist nun mit zwei verschiedenen Pfaden verknüpft, da es sowohl von Project A als auch von Project B installiert wird. Enthält Project C Sicherheitslücken, müssen Entwickler beide Pfade berücksichtigen, um diese zu beheben.

Bei React verteilen sich die drei Sicherheitslücken auf 16,293 anfällige Pfade. Bei so vielen Paketen in der Abhängigkeitskette, die aktualisiert werden müssen, wird die Behebung durch Paket-Upgrades zu einer gewaltigen Aufgabe. Im Gegensatz dazu lassen sich die beiden Sicherheitslücken in Angular einfach beheben, da nur zwei anfällige Pfade betroffen sind.

Das folgende Bild stammt aus einem Sicherheits-Scanbericht vom August 2019 für ein mit dem npm-Paket create-react-app erstelltes React-Projekt. Der Bericht zeigt das Problem mit der Abhängigkeitskette, das bei einer einzelnen Sicherheitslücke angegangen werden muss.

Snyk-Testbericht mit einer Prototype-Pollution-Sicherheitslücke mit hohem Schweregrad in der npm-Abhängigkeit lodash

Um die Sicherheitslücke zu beheben, müssen Sie in jedem einzelnen betroffenen Paket der gesamten Abhängigkeitskette neue Versionen von lodash einspielen.

Da lodash im Ökosystem weit verbreitet ist, wird die anfällige Version letztlich in Tausenden von Abhängigkeitspfaden verwendet.

Sicherheitslücken im Angular-Modul-Ökosystem

Im Angular-Ökosystem treten Sicherheitslücken in Modulen in drei Bereichen auf:

  • Module im Angular-Ökosystem

  • Schädliche Modulversionen

  • Entwickler-Tools. Bei der Untersuchung des Angular-Modul-Ökosystems stechen die folgenden Module aufgrund ihrer Download-Zahlen und der damit verbundenen Sicherheitslücken besonders hervor:

Modulname

Art der Sicherheitslücke

Anzahl der Sicherheitslücken

Schweregrad der Sicherheitslücke

Jährliche Modul-Downloads

Behebung verfügbar?

Cross-Site-Scripting (XSS)

1

mittel

6,275,854

❌

Cross-Site-Scripting (XSS)

1

mittel

2,710,764

✅

Cross-Site-Scripting (XSS)

3

mittel

2,203,913

✅

Denial of Service (DoS)

1

mittel

580,674

❌

Cross-Site-Scripting (XSS)

1

mittel


514,937

✅

Umgehung von Zugriffsbeschränkungen

1

mittel


514,470

✅

Cross-Site-Scripting (XSS)

2

mittel


104,436

✅

Cross-Site-Scripting (XSS)

1

mittel


104,436

❌

Cross-Site-Scripting (XSS)

1

mittel


64,094

✅

Denial of Service (DoS)

1

hoch

4229

✅

Ordnen wir die Arten von Sicherheitslücken nach der Anzahl der Downloads der Module, die sie enthalten, zeigt sich deutlich, dass XSS-Sicherheitslücken die Liste anführen. Das wird auch in den OWASP Top 10 Web-Sicherheitsrisiken deutlich, auf die Sie achten sollten:

Ringdiagramm zur Verteilung von Schwachstellen nach Modul-Downloads: Cross-Site-Scripting 92 %, Umgehung von Zugriffsbeschränkungen 4 % und Denial-of-Service 4 %.

Schädliche Angular-Module

Insgesamt konnten wir drei schädliche Versionen der folgenden Angular-Module aufspüren: angular-bmap, ng-ui-library, ngx-pica.

angular-bmap ist vielleicht am wenigsten interessant, wie sich auf der Seite zum Zustand der Abhängigkeiten zeigt: Alle acht veröffentlichten Versionen stammen aus dem September 2017. Dennoch wurde Version 0.0.9 von angular-bmap veröffentlicht. Sie enthält schädlichen Code, der vertrauliche Passwort- und Kreditkartendaten aus Formularen ausliest und an die vom Angreifer kontrollierte URL https://js-metrics.com/minjs. php?pl= sendet. Diese schädliche Version 0.0.9 wurde aus der npm-Registry entfernt.

Anders als das Angular-bmap-Modul wird ng-ui-library weiterhin gepflegt und umfasst mehr als 150 veröffentlichte Versionen, allein sieben davon aus dem Jahr 2019. Allerdings wurde festgestellt, dass Version 1.0.987 von ng-ui-library denselben schädlichen Code enthält, den wir bereits in angular-bmap gefunden haben. ng-ui-library verzeichnet weiterhin nahezu 400 bis 3000 Downloads pro Monat.

Dieselbe Art schädlichen Codes, der Kreditkartendaten ausliest, findet sich auch in einer schädlichen Version von ngx-pica. Das mit Angular v5 und Angular v7 kompatible Modul dient der Bildgrößenanpassung im Browser und wird monatlich etwa 800-mal heruntergeladen.

Interessanterweise wurden alle diese schädlichen Versionen erst vor Kurzem entdeckt. Sie wurden sämtlich im Juni 2019 offengelegt, obwohl der schädliche Code bereits einen Monat zuvor in einer neuen Version veröffentlicht worden war.

Angular-Entwickler-Tools

Bei der Analyse des Modul-Ökosystems entdeckten wir ein Modul, das als allgemeiner HTTP-Server zum Bereitstellen von Ressourcen für Single-Page-Anwendungen dient, die mit Angular, React, Vue und anderen Technologien erstellt wurden.

Das Modul angular-http-server war gleich zweimal anfällig für Directory Traversal. Beide anfälligen Versionen sind ein Jahr alt, und inzwischen wurden bereits ein halbes Dutzend neuere Versionen veröffentlicht. Obwohl der Modulbetreuer ausdrücklich darauf hinweist, dass dieses Tool nicht als produktionsreifer Dienst empfohlen wird, sind die Downloads in diesem Jahr deutlich gestiegen: Im Mai 2019 wurden 20,670 Downloads verzeichnet.

Angesichts der zunehmenden Verbreitung dieses Angular-HTTP-Server-Entwicklertools möchten wir darauf hinweisen, dass es einen öffentlichen Exploit für diese Sicherheitslücke gibt.

Sicherheitslücken im React-Modul-Ökosystem

Wie bei Angular haben wir festgestellt, dass im React-Ökosystem irgendwann mehrere schädliche Module veröffentlicht wurden. Die folgende Darstellung zeigt die Verteilung der Arten von Sicherheitslücken und deren Anzahl in allen von uns gefundenen anfälligen Modulen. Besonders hervorgehoben sind vier schädliche Pakete: react-datepicker- plus, react-dates-sc, awesome_react_utility, react- server-native.

Alle vier schädlichen Module enthalten denselben schädlichen Code, der Kreditkarten- und andere vertrauliche Informationen ausliest. Auch Module im React-Ökosystem waren von diesem Angriff betroffen.

Das unterstreicht erneut, wie wichtig es ist, als Betreuer eines Open-Source-Projekts die Multi-Faktor-Authentifizierung zu aktivieren, beispielsweise die vom npm-Paket-Registry unterstützte 2FA. So verhindern Sie, dass Ihre Nutzer gefährdet werden, falls jemand Ihr Konto kompromittiert und schädliche Paketversionen veröffentlicht.

Balkendiagramm zu Schwachstellentypen in React-Ökosystemmodulen. Am häufigsten sind Cross-Site-Scripting mit 5 und schädliche Pakete mit 4.

Falls Sie es noch nicht getan haben, empfehlen wir Ihnen dringend, 2FA für Ihr npmjs.org-Entwicklerkonto zu aktivieren und weitere npm-Sicherheits-Best Practices zu befolgen.

Bemerkenswerte anfällige Module, die wir im React-Ökosystem erfasst haben:

  • Eine XSS-Sicherheitslücke mit hohem Schweregrad in react-marked-markdown, für die es keine Behebung gibt. Dieser React-Komponenten-Wrapper für die JavaScript-Markdown-Bibliothek marked wird dennoch weiterhin tausendfach heruntergeladen – insgesamt 65,790-mal in den vergangenen zwölf Monaten.

  • Für alle unter Ihnen, die preact verwenden: Die Bibliothek preact-render-to-string ist in allen Versionen vor 3.7.2 anfällig für Cross-Site-Scripting. Ihre Nutzung nimmt zu; im betrachteten Zeitraum der vergangenen zwölf Monate wurde sie insgesamt 3,228,049-mal heruntergeladen.

  • Wenn Sie Tooltips in Ihrer React-Frontend-Anwendung einsetzen, verwenden Sie möglicherweise react-tooltip. Allein im Juli 2019 wurde die Bibliothek knapp eine Million Mal heruntergeladen (994,903). Allerdings sind alle Versionen vor 3.8.1 anfällig für Cross-Site-Scripting-Angriffe – dies wurde im September 2018 offengelegt.

  • Wenn Sie häufig mit SVGs arbeiten, verwenden Sie wahrscheinlich react-svg, das in den vergangenen zwölf Monaten 1,446,442 Downloads verzeichnete. Im April 2018 legte der Sicherheitsforscher Ron Perris eine XSS-Sicherheitslücke mit hohem Schweregrad offen, die alle Versionen vor 2.2.18 betrifft.

  • Im März 2019 wurde eine CSV-Injection-Sicherheitslücke in mui-datatables offengelegt. Diese React-Bibliothek bietet eine UI-Komponente für tabellarische Daten, die auf dem Material-UI-Framework basiert, und verzeichnet in den vergangenen zwölf Monaten mehr als 350,000 Downloads.

Bei der Untersuchung aller von uns gefundenen anfälligen React-Module zählten wir in den vergangenen drei Jahren acht Sicherheitslücken: zwei im Jahr 2017, sechs im Jahr 2018 und zwei bis August 2019. Das zeigt, wie wichtig ein verantwortungsvoller Umgang mit Open Source ist und dass Sie Sicherheitslücken so schnell wie möglich finden und beheben sollten.

Im Fokus: Sicherheitslücken in Next.js

Next.js ist ein beliebtes React-Framework von ZEIT. Es ermöglicht Webentwicklern, ihre React-Kenntnisse zu nutzen, um SEO-freundliche Webanwendungen, serverseitig gerenderte Anwendungen, Progressive Web Apps (PWA) und sogar Electron-basierte Anwendungen zu erstellen – alles auf Basis des Next.js-Frameworks.

Next.js wird von immer mehr Entwicklern genutzt und verzeichnete in den vergangenen 12 Monaten 8.414.925 Downloads. Mit dem kontinuierlichen Wachstum des Projekts wird es immer wichtiger, einen Blick auf seinen Sicherheitsstatus zu werfen.

Im Laufe der Jahre 2017 bis 2018 haben wir drei schwerwiegende Directory-Traversal-Schwachstellen und zwei mittelschwere Cross-Site-Scripting-Schwachstellen im Next.js-React-Framework erfasst. Außerdem ist hervorzuheben, dass das ZEIT-Sicherheitsteam alle fünf Schwachstellen schnell behoben und innerhalb einer Woche einen Upgrade-Pfad für das Next.js-Framework bereitgestellt hat.

Insgesamt setzt ZEIT auf starke Sicherheitspraktiken, an denen sich andere Open-Source-Projekte orientieren sollten. Besonders hervorzuheben sind:

  • Das Team reagiert schnell auf die Offenlegung von Sicherheitslücken und veröffentlicht zeitnah Sicherheitsupdates. Dadurch bleibt das Zeitfenster, in dem tatsächlich ein Sicherheitsrisiko besteht, klein. ZEIT stellt Nutzern einen Upgrade-Pfad bereit, über den sie die Schwachstelle schnell entschärfen können.

  • Um Sicherheitsrückschritte zu vermeiden, hat das Team Sicherheits-Unit-Tests geschrieben, die sicherstellen, dass sich Sicherheitsfehler nicht wiederholen.

  • Die Versionshinweise kommunizieren klar sicherheitsrelevante Informationen, deren Auswirkungen und alle erforderlichen Schritte, mit denen Nutzer bei einem Sicherheitsupdate auf dem neuesten Stand bleiben.

  • Das Projekt unterhält eine Mailingliste für Sicherheitsmeldungen, eine Richtlinie zur verantwortungsvollen Offenlegung sowie eine eigene E-Mail-Adresse für die Meldung von Problemen.

ZEIT und der Umgang mit dem Next.js-Framework sind ein hervorragendes Beispiel für gute Sicherheitsrichtlinien bei Open-Source-Projekten. ZEIT nimmt Sicherheit ernst und zeigt mit Richtlinien und Maßnahmen ein echtes Engagement für die Sicherheit seiner Nutzer – ein Beispiel, dem andere folgen sollten.


Laden Sie den Bericht hier herunter!

Weiter mit den Highlights des nächsten Abschnitts:

Oder laden Sie die vollständige Version des Berichts im digitalen Format herunter.

Weiterlesen

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSec: Sicherheit, die mit der KI-Entwicklung Schritt hält

KI-gestützte Entwicklung überholt herkömmliche Security-Workflows. Snyk Agentic AppSec setzt Security-Agenten ein, die Schwachstellen kontinuierlich finden, beheben und überprüfen – während Menschen die Maßstäbe festlegen.

blog feature ai violet
Blog

VulnBump: Können KI-Agenten anfällige Abhängigkeiten beheben, ohne den Build zu beschädigen?

VulnBump testet KI-Agenten anhand von 307 realen Dependency-Upgrades. Eine Lösung zählt nur, wenn die Sicherheitslücke behoben ist und Build sowie Tests weiterhin erfolgreich sind.

Blog

Frontier-Modelle fanden die Schwachstellen. Nur der Angreifer fand die Angriffsketten.

Die statische Analyse fand die Schwachstellen, doch erst Live-Angriffstests bewiesen, wie sie sich zu Angriffen verketten lassen. Ein Vergleich von Evo COS, Claude Security und Claude Code Security.