Eine Denial-of-Service-Schwachstelle im Axios-JavaScript-Paket entdeckt – alle Versionen des beliebten HTTP-Clients betroffen
6. Mai 2019
0 Min. Lesezeitaxios ist ein beliebter, moderner, Promise-basierter JavaScript-HTTP-Client, der häufig in Browser- und Node.js-Serverprojekten zum Einsatz kommt und wöchentlich mehr als 3 Millionen Downloads von npm verzeichnet.
Snyk hat eine Denial-of-Service-Schwachstelle mittlerer Schwere (5,3 CVSS) in axios erfasst, die bereits 2017 vom Entwickler Jeremy Apthorp in der GitHub-Issue-Warteschlange des Projekts diskutiert und geteilt wurde.
Betroffene Versionen von axios sind anfällig für Denial-of-Service-Angriffe (DoS), da Inhalte aus Anfragen weiterverarbeitet werden, selbst wenn maxContentLength überschritten ist. Dadurch steigen die I/O- und CPU-Auslastung.
Über die Schwachstelle
Anthorp teilte in der GitHub-Issue ein Codebeispiel, das zeigt, wie sich mit der axios-API die Größe der empfangenen HTTP-Antwort begrenzen lässt:
Unabhängig von der Begrenzung der Inhaltslänge bleibt die HTTP-Verbindung jedoch so lange geöffnet, bis die Daten der vollständigen Dateigröße übertragen wurden. Dadurch kann jeder, der die Remote-Domain kontrolliert oder eine ungesicherte Verbindung abhört, eine große Datei bereitstellen und so verhindern, dass die Anfrage über einen erheblichen Zeitraum abgeschlossen wird.
Zum Zeitpunkt der Veröffentlichung dieses Artikels wurde noch keine offizielle Fehlerbehebung für diese Schwachstelle veröffentlicht. Ein Beitrag aus der Community in Form eines Pull Requests zur Behebung des Problems wurde jedoch im GitHub-Repository des Projekts eingereicht und wartet darauf, zusammengeführt und veröffentlicht zu werden.
Snyk-Nutzer sind geschützt, wenn sie einen Sicherheitspatch für axios-Versionen >= 0.17.0 anwenden, der die Denial-of-Service-Schwachstelle entschärft.
Verbinden Sie Ihr Repository und wenden Sie den Patch an.
UPDATE 31.05.2019: Eine Fehlerbehebung wurde veröffentlicht und ist in axios-Versionen >= 0.19.0 verfügbar.
Snyk hat die Schwachstelle in über 215.000 gescannten Projekten identifiziert und die betroffenen Nutzer umgehend benachrichtigt. Nutzer unserer Lösung für Runtime-Sicherheitsüberwachung wurden nicht nur über die Schwachstelle informiert, sondern auch auf die Dringlichkeit ihrer Behebung hingewiesen: In den meisten Fällen ist sie im Runtime-Codepfad der Anwendung erreichbar und kann daher mit hoher Wahrscheinlichkeit ausgenutzt werden.
Im Fall von axios trug die Integration der Runtime-Sicherheitsüberwachung in die Anwendung dazu bei, Sicherheitsprobleme in laufenden Produktionsbereitstellungen besser zu erkennen.
Bin ich betroffen, und was sollte ich tun?
Wenn Sie Ressourcen aus nicht vertrauenswürdigen Quellen oder über unsichere Übertragungswege abrufen, sind Sie möglicherweise anfällig für Denial-of-Service-Angriffe, bei denen Angreifer die Remote-Ressource kontrollieren können.
Wenn Sie axios auf einem Node.js-Server verwenden, kann dies aufgrund der Single-Threaded-Eigenschaft der Laufzeitumgebung katastrophale Folgen haben. Ein Anstieg der Ressourcennutzung, etwa bei I/O und CPU, wirkt sich negativ auf alle Nutzer aus, die mit diesem Server verbunden sind. In Browserumgebungen beeinträchtigt ein Denial-of-Service-Angriff die Endnutzer unterschiedlich stark – abhängig davon, wie der Ressourcenabruf mit axios in der Anwendung erfolgt.
Was sollte ich tun?
Wenn Sie Snyk verwenden, können Sie sich automatisch schützen, indem Sie den oben genannten Sicherheitspatch anwenden.
Wenden Sie bei jedem Aufruf von axios die folgende Gegenmaßnahme an, um dieser Schwachstelle durch defensive Programmierung entgegenzuwirken:
axios({ url: ..., maxContentLength: 2000, }).catch((error) => { error.request.res.destroy(); });Dies wird in https://github.com/axios/axios/issues/1098#issuecomment-334874694 vorgeschlagen.Wenden Sie die vorgeschlagene Fehlerbehebung aus dem Pull Request manuell an: https://github.com/axios/axios/pull/1485
Ein Hinweis zum Zustand von Open-Source-Projekten
Die Pflege von Open-Source-Projekten kann mit zunehmender Popularität immer anspruchsvoller werden. Die Zahl der Issues steigt und erfordert mehr Aufmerksamkeit; auch der Aufwand für das Erstellen und Aktualisieren der Dokumentation nimmt zu. Hinzu kommen Fehlerbehebungen und stabile Releases – nur einige der Aufgaben, die Projektverantwortlichen abverlangt werden und häufig vollständig ehrenamtlich erledigt werden.
Bei der Auswahl von Open-Source-Abhängigkeiten sollten Sie sorgfältig vorgehen, um Unterbrechungen in Ihrem Projekt so weit wie möglich zu vermeiden. Aus den folgenden Aspekten der Informationen zum Zustand der axios-Abhängigkeiten können wir anhand der Snyk-Einblicke lernen:
Die erste Version von axios, 0.1.0, wurde vor 5 Jahren veröffentlicht, am 29. Aug. 2014.
Die neueste stabile Version, 0.18.0, wurde vor 9 Monaten veröffentlicht, am 19. Feb. 2018.
Alle veröffentlichten Versionen sind von der oben genannten Denial-of-Service-Schwachstelle betroffen.
Das Projekt erhielt Beiträge von insgesamt 159 Entwicklern, doch die Releases werden weiterhin von den Projektleitern Nick Uraltsev und Matt Zabriskie verwaltet.
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.
