Skip to main content

77 % von 433.000 Websites verwenden anfällige JavaScript-Bibliotheken

Artikel von
Headshot of Tim Kadlec

Tim Kadlec

21. November 2017

0 Min. Lesezeit

Letzte Woche haben wir unseren ersten jährlichen Bericht zum Stand der Open-Source-Sicherheit veröffentlicht. Eine der darin genannten Erkenntnisse: Eine Analyse von rund 433.000 Websites ergab, dass 77 % davon mindestens eine Frontend-JavaScript-Bibliothek mit einer bekannten Sicherheitslücke verwenden. Diese Zahl entspricht der Zahl, die wir bereits im März gemeldet haben. Dank Google Chromes Lighthouse, das jetzt mit Snyk auf anfällige JavaScript-Bibliotheken prüft, können wir jedoch deutlich umfassendere Ergebnisse erzielen.

Die Lighthouse-Daten werden im Rahmen des HTTP Archive erfasst und können über BigQuery abgefragt werden. So können wir Lighthouse-Prüfdaten in sehr großem Umfang analysieren.

Wie viele Websites sind anfällig?

Die BigQuery-Daten vom 15. Oktober (der jüngste verfügbare Durchlauf) enthalten Daten zu 439.176 verschiedenen URLs. Wenn wir URLs berücksichtigen, bei denen Lighthouse nicht ausgeführt werden konnte oder die Prüfung aus irgendeinem Grund nicht abgeschlossen wurde, erhalten wir einen Datensatz mit 418.112 verschiedenen Websites, den wir abfragen können.

Die erste Frage lautet: Wie viele dieser Websites weisen bekannte Sicherheitslücken auf? Mit einer Abfrage der Berichte können wir das herausfinden:

SELECT
  JSON_EXTRACT_SCALAR(report, "$.audits.no-vulnerable-libraries.score") AS score,
  COUNT(0) AS volume
FROM
  [httparchive:har.latest_lighthouse_mobile]
WHERE
  report IS NOT NULL
GROUP BY
  score
HAVING
  score IS NOT NULL
ORDER BY
  score

Die Ergebnisse stimmen weitgehend mit unserer kleineren Untersuchung vom März überein: 77,3 % (323.132) dieser Websites haben die Prüfung nicht bestanden. Anders gesagt: 77,3 % dieser Websites enthalten mindestens eine clientseitige JavaScript-Bibliothek mit einer bekannten Sicherheitslücke. Die neue Version der HTTP-Archive-Website wird zeigen, wie sich dieser Wert im Laufe der Zeit verändert.

Wir können die Analyse noch vertiefen und ermitteln, wie viele bekannte Sicherheitslücken in diesen Bibliotheken stecken:

SELECT 
  REGEXP_EXTRACT(JSON_EXTRACT_SCALAR(report, "$.audits.no-vulnerable-libraries.displayValue"), r'^\S*') AS knownVulnerabilities,
  COUNT(0) AS volume
FROM
  `httparchive.lighthouse.2017_10_15_mobile`
WHERE
  report IS NOT NULL
AND
  JSON_EXTRACT_SCALAR(report, "$.audits.no-vulnerable-libraries.score") = 'false'
GROUP BY
  knownVulnerabilities
ORDER BY
  CAST(knownVulnerabilities as int64)
Balkendiagramm mit dem Titel „Websites mit X Schwachstellen“: Die meisten Websites haben eine Schwachstelle, bei zwei bis sechs Schwachstellen nimmt die Anzahl der Websites ab.

Es zeigt sich: Wenn eine Bibliothek mindestens eine bekannte Sicherheitslücke aufweist, sind wahrscheinlich noch weitere vorhanden. 51,8 % der anfälligen Websites weisen mehr als eine bekannte Sicherheitslücke auf. Die meisten dieser Websites haben eine oder zwei, doch der lange Nachlauf ist beunruhigend: Auf 9,2 % der Websites werden Bibliotheken mit insgesamt mindestens vier bekannten Sicherheitslücken verwendet.

Welche Bibliotheken weisen am häufigsten Sicherheitslücken auf?

Anhand der Lighthouse-Prüfdaten können wir auch herausfinden, bei welchen Bibliotheken am häufigsten Sicherheitslücken festgestellt werden.

Zunächst können wir abfragen, welche Bibliotheken am häufigsten erkannt werden – unabhängig davon, ob sie anfällig sind. Die folgende Abfrage liefert die zehn am häufigsten gefundenen Bibliotheken:

CREATE TEMPORARY FUNCTION getLibs(items STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
  try {
    return  items.match(/"name":"([^"]*)"/ig);
  } catch (e) {
    return [];
  }
""";

SELECT library, COUNT(0) Volume
FROM (
   SELECT getLibs(JSON_EXTRACT(report, "$.audits.no-vulnerable-libraries.extendedInfo.jsLibs")) AS libs
   FROM `httparchive.lighthouse.2017_10_15_mobile`
)
CROSS JOIN 
   UNNEST(libs) AS library
GROUP BY library
ORDER BY Volume DESC
LIMIT 10

Bibliothek

Anzahl der Erkennungen

Verbreitung

jQuery

344,643

82.4%

jQuery UI

83,075

19.9%

Modernizr

63,122

15.1%

Bootstrap

57,154

13.7%

yepnope

41,537

9.9%

FlexSlider

33,002

7.9%

Underscore

17,633

4.2%

Google Maps

14,312

3.4%

Moment.js

14,038

3.4%

SWFObject

13,521

3.2%

Es überrascht nicht, dass jQuery an der Spitze der Liste steht. Das deckt sich mit unseren Ergebnissen vom März und entspricht vermutlich auch Ihren Erwartungen. Keine andere Bibliothek kommt bisher an die universelle Verbreitung von jQuery heran. Ein Vorbehalt: React wird derzeit zu selten erfasst. Sobald das aktualisierte Erkennungsskript in Lighthouse integriert ist, werden die Zahlen steigen (und wahrscheinlich auch der Gesamtanteil anfälliger Websites leicht zunehmen).

Sehen wir uns nun an, bei welchen Bibliotheken bekannte Sicherheitslücken festgestellt werden.

CREATE TEMPORARY FUNCTION getLibs(items STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
  try {
    return  items.match(/"name":"([^"]*)"/ig);
  } catch (e) {
    return [];
  }
""";

SELECT library, COUNT(0) Volume
FROM (
   SELECT getLibs(JSON_EXTRACT(report, "$.audits.no-vulnerable-libraries.extendedInfo.vulnerabilities")) AS libs
   FROM `httparchive.lighthouse.2017_10_15_mobile`
)
CROSS JOIN 
   UNNEST(libs) AS library
GROUP BY library
ORDER BY Volume DESC
LIMIT 10

Die ersten paar Namen auf der Liste sind sehr ähnlich.

Bibliothek

Anzahl der Funde mit Sicherheitslücken

% aller erkannten Instanzen dieser Bibliothek

jQuery

318,786

92.5%

jQuery UI

74,486

89.7%

Moment.js

10,245

73.0%

AngularJS

7,609

84.8%

Handlebars

3,129

60.7%

Mustache

1,925

51.0%

YUI 3

559

40.3%

jQuery Mobile

413

3.7%

Knockout

407

19.6%

React

181

10.2%

Die Prozentwerte zeichnen kein erfreuliches Bild. 92,5 % der jQuery-Versionen, die mit Abstand beliebtesten Bibliothek im Web, weisen in Produktionsumgebungen eine bekannte Sicherheitslücke auf. Tatsächlich sind sechs der zehn Bibliotheken, bei denen am häufigsten bekannte Sicherheitslücken gefunden werden, in der Mehrheit der in Produktionsumgebungen eingesetzten Versionen anfällig.

Dabei gibt es für jede Bibliothek auf dieser Liste Versionen, die nicht von diesen Sicherheitslücken betroffen sind.

Bibliothek

Älteste Version ohne bekannte Sicherheitslücken

Veröffentlichungsdatum

jQuery

3.0.0

Juni 2016

jQuery UI

1.10.0

Januar 2013

Moment.js

2.15.2

Oktober 2016

AngularJS

1.6.1

Dezember 2016

Handlebars

4.0.0

September 2015

Mustache

2.2.1

Dezember 2015

YUI 3

3.10.3

Juni 2016

jQuery Mobile

1.2.0

Oktober 2012

Knockout

3.0.0

Oktober 2013

React

0.14.0

Oktober 2015

Die Frontend-Bibliotheken, bei denen am häufigsten Sicherheitslücken festgestellt werden, sind seit ein bis fünf Jahren in Versionen ohne bekannte Sicherheitslücken verfügbar. In der Praxis werden Frontend-Bibliotheken und -Frameworks häufig nach ihrer Einführung in die Produktionsumgebung nicht mehr aktualisiert.

Grund zur Hoffnung

Die Lage ist derzeit ziemlich düster – das lässt sich nicht leugnen. Diese Daten bedeuten zwar nicht, dass alle 77 % dieser Websites ausgenutzt werden können (möglicherweise verwenden sie die anfälligen Methoden nicht), doch das ist nur ein kleiner Trost. Bei 77 % der Websites könnte schon ein einzelner Methodenaufruf durch eine Entwicklerin oder einen Entwickler genügen, um sie anfällig zu machen. Wie wir 2017 gesehen haben, müssen Sicherheitslücken in Open-Source-Software sehr ernst genommen werden.

Es gibt aber auch eine positive Seite. Obwohl in Produktionsumgebungen zahlreiche Sicherheitslücken vorhanden sind, wurden diese in den Bibliotheken selbst behoben. Für jede wichtige Bibliothek gibt es Versionen ohne bekannte Sicherheitslücken – wir müssen sie nur in die Produktionsumgebung übernehmen.

Damit sich die Lage verbessert, müssen wir einige Dinge ändern. Erstens brauchen wir bessere Tools und eine breitere Nutzung dieser Tools. Laut unserer Umfrage zum Stand der Open-Source-Sicherheit verwenden 38 % der Open-Source-Nutzenden keinerlei automatisierte Tools, um ihre Pakete aktuell zu halten. Ich würde darauf wetten, dass die Nutzung solcher Tools bei Frontend-JavaScript noch geringer ausfällt.

Dieser Wert sollte steigen. Verbesserungen an npm und Yarn haben die Verwaltung von Frontend-Paketen für Entwicklerinnen und Entwickler deutlich vereinfacht. Ein solider Paketverwaltungs-Workflow in Kombination mit Tools wie Snyk, die Ihnen helfen, Abhängigkeiten und die zugehörigen Pakete zu finden, verhindern, beheben und überwachen, trägt wesentlich dazu bei, das Web sicherer zu machen.

Zweitens muss das allgemeine Bewusstsein und Verständnis für das Problem wachsen. Deshalb haben wir den Bericht zum Stand der Open-Source-Sicherheit veröffentlicht: um die Herausforderungen bei der Absicherung von Open Source zu beleuchten und Lösungen zu finden, mit denen wir die Situation verbessern können.

Auch die Prüfung anfälliger Bibliotheken in Lighthouse (und Sonar) hilft. Mit diesen Tools können Entwicklerinnen und Entwickler Probleme auf den von ihnen erstellten Websites leichter erkennen. Dank HTTP Archive und BigQuery stehen uns außerdem problemlos zugängliche Daten zur Verfügung, mit denen wir die Verbreitung des Problems nachvollziehen können.

Die aktuellen Daten sind zwar wenig ermutigend, doch mit mehr Bewusstsein und besseren Tools lässt sich dieses Problem in Zukunft lösen.