Skip to main content

Golang-Sicherheit: Schwachstelle zur Umgehung von Zugriffsbeschränkungen in JWT

Artikel von

Leeya Shaltiel

snykgo header

22. Dezember 2020

0 Min. Lesezeit

Im Juli wurde das Snyk-Sicherheitsteam auf ein mögliches Sicherheitsproblem im JWT-Paket aufmerksam gemacht. Dieses Paket bietet eine Go-Implementierung von JSON Web Tokens. Das entdeckte Problem betraf eine Funktion namens VerifyAudience, die nicht wie erwartet funktionierte. Die Funktion erlaubte die Übergabe eines Werts aus doppelten Anführungszeichen („“), wodurch die Audience-Verifizierung erfolgreich sein konnte, obwohl sie das nicht hätte sein dürfen.

Interessanterweise wurde die Schwachstelle bereits sechs Monate before der Meldung des Problems behoben (der Fix enthielt eine zusätzliche Validierung des Werts aud mithilfe der Funktion ValidateAudienceAgainst). Der Fix wurde jedoch in eine bestimmte Version (v4.0.0-preview1) aufgenommen, die auf pkg.go.dev verfügbar war, aber nicht in den Master-Branch des Repositorys übernommen wurde.

Wie in anderen Ökosystemen klonen viele Go-Entwickler am liebsten einfach den Master-Branch eines GitHub-Repositorys. In diesem Fall bedeutete das zweierlei:

  1. Das Problem wurde gemeldet, after bereits eine korrigierte Version verfügbar war!

  2. Die Zahl der von dieser Schwachstelle betroffenen Projekte blieb hoch, vor allem, weil die meisten den Master-Branch und nicht den spezifischen Tag mit dem verfügbaren Fix verwendeten.

Nachdem die Schwachstelle als solche eingestuft und verifiziert worden war, wurde der Maintainer des Pakets benachrichtigt. Da wir keine Antwort erhielten und das Sicherheitsforschungsteam das Problem als zu riskant einstufte, vergab Snyk eine CVE und veröffentlichte sie Anfang September.

Diese Schwachstelle ist nur ein Beispiel für Hunderte proprietäre Golang-Sicherheitsschwachstellen, die das Snyk-Sicherheitsforschungsteam in diesem Jahr aufgedeckt hat. Dieser Artikel gibt Einblicke in die angewandten Prozesse und die Trends, die Snyk in diesem schnell wachsenden, beliebten Ökosystem beobachtet.

Die Beliebtheit von Golang und das wachsende Sicherheitsrisiko

Die Wachstumszahlen von Golang in den vergangenen Jahren sind beeindruckend. Jahr für Jahr zählt Golang – oder Go, wie es häufiger genannt wird – in den jährlichen Entwicklerumfragen von Stack Overflow zu den fünf beliebtesten und gefragtesten Programmiersprachen. Auch die Aktivität auf GitHub ist hoch: Go belegt Platz 4 bei Pull Requests und Issues, Platz 3 bei Stars und Platz 7 bei Pushes.

Praktikabilität, Benutzerfreundlichkeit und Performance – all diese Faktoren werden häufig als die wichtigsten Gründe dafür genannt, dass Entwickler gerne mit Go arbeiten. Doch wie sieht es mit der Sicherheit aus? Laut der Go-Community-Umfrage 2019 ist Sicherheit für 75 % der Go-Entwickler wichtig. Das Go-Team hat kürzlich Pläne angekündigt, gemeinsam mit Golang-Sicherheitsscannern eine Datenbank bekannter Schwachstellen zu entwickeln. Das Sicherheitsrisiko in Golang ist sehr real. Diese wichtigen Schritte tragen dazu bei, die Entwicklung mit dieser Sprache sicherer zu machen.

Auch Snyk hat stark in dieses Ziel investiert. Dank der Arbeit des Snyk-Sicherheitsforschungsteams wurden seit 2019 Hunderte neue Golang-Sicherheitsschwachstellen in die Snyk Intel Vulnerability Database aufgenommen. Immer mehr Snyk-Nutzer verwenden diese Informationen, um ihre Golang-Projekte auf Sicherheitsschwachstellen zu testen und zu überwachen. Diese Erkenntnisse waren jedoch nicht leicht zu gewinnen: Das Ökosystem ist relativ neu, und die Aufdeckung unterscheidet sich erheblich von der in etablierteren Programmiersprachen.

Was die Golang-Sicherheitsforschung so einzigartig macht

Bei der Aufdeckung neuer Schwachstellen und der Sicherheitsforschung insgesamt zeichnet sich Go aus mehreren Gründen durch seine Besonderheiten aus.

Erstens ist da die Gesamtzahl der Sicherheitsschwachstellen. In relativ kurzer Zeit haben wir einen deutlichen Anstieg der Schwachstellen beobachtet. Im Vergleich zu etablierteren Programmiersprachen wie Java und JavaScript hat das Go-Ökosystem keine besonders lange Geschichte von Schwachstellen. Die von uns gesammelten Daten zeigen jedoch sowohl einen Anstieg der Zahl von Paketen und Modulen als auch ein insgesamt wachsendes Bewusstsein für Sicherheitsprobleme in der Go-Community. Die Zahl der Golang-Sicherheitsschwachstellen, die 2020 in die Snyk Intel Vulnerability Database aufgenommen wurden, ist fast doppelt so hoch wie die Gesamtzahl aller zwischen 2015 und 2019 hinzugefügten Schwachstellen!

Webseite der Snyk Vulnerability DB mit einer Liste von Schwachstellen, betroffenen Paketen, Programmiersprachen und Veröffentlichungsdaten

Ein weiterer bemerkenswerter Punkt: Die Vielfalt der Schwachstellentypen ist im Vergleich zu anderen Sprachen deutlich größer. Allein bei den 2020 hinzugefügten Schwachstellen gibt es 44 verschiedene CWEs! Diese breite Streuung und die große Zahl an Schwachstellen machen die Sicherheitsforschung besonders spannend.

Über CVEs hinaus – Snyks Forschung zu Golang-Sicherheitsschwachstellen

Nicht jede Schwachstelle wird offengelegt und erhält eine CVE. Neben der Beobachtung neuer CVEs kann das Snyk-Sicherheitsteam Schwachstellen identifizieren, die noch nicht offiziell offengelegt wurden, aber beispielsweise in öffentlichen Foren diskutiert werden. Diese Forschung ist eine der Säulen, die die Snyk Intel Vulnerability Database so einzigartig umfassend machen: Sie bietet umfassende Sicherheitsabdeckung über öffentlich verfügbare Informationen und offizielle CVE-Berichte hinaus.

Diese Schwachstellen sind oft besonders gefährlich. Angreifer nutzen ihr frühzeitiges Wissen über eine Schwachstelle und das Zeitfenster zwischen ihrer Diskussion und ihrer öffentlichen Bekanntmachung aus. Denn sie wissen: Sobald eine Schwachstelle offengelegt ist, ist es nur eine Frage der Zeit, bis ein Fix verfügbar wird.

Um dieses Zeitfenster zu minimieren, greift Snyk auf verschiedene Online-Ressourcen zurück, etwa technische Foren, GitHub-Issues und -Pull-Requests sowie Social-Media-Feeds. So lassen sich neue Schwachstellen so früh wie möglich im Verlauf ihres Lebenszyklus identifizieren. Wir priorisieren die Schwachstellen, bewerten ihren Schweregrad und prüfen, ob ein Fix durch ein Upgrade verfügbar ist. Nach der Bestätigung nehmen wir sie in unsere Datenbank auf und benachrichtigen die Nutzer.

Für Go erhält Snyk täglich Dutzende Warnmeldungen zu möglicherweise neu entdeckten Sicherheitsschwachstellen. Eine Warnmeldung ist nur der erste Hinweis – anschließend untersuchen wir das Problem eingehender, um festzustellen, ob es sich um eine Schwachstelle handelt. Bei der Triage des Sicherheitsberichts erstellen wir einen Proof of Concept (POC), um das Sicherheitsproblem zu untersuchen. Wird es als Schwachstelle bestätigt, erhält es eine CVE. Außerdem kontaktieren wir den Maintainer des betreffenden Open-Source-Pakets, damit so schnell wie möglich geeignete Maßnahmen zur Behebung des Sicherheitsproblems ergriffen werden können.

Die Forschung, durch die diese proprietären Schwachstellen aufgedeckt werden, spielt eine entscheidende Rolle beim Schutz von Anwendungen. Tatsächlich sind 7 der 10 häufigsten Go-Sicherheitsschwachstellen bei Snyk-Kunden proprietäre Schwachstellen, die Snyk aufgedeckt hat und die in keiner CVE-Datenbank zu finden waren.

Snyk für Golang

Snyk bietet Entwicklungs- und Sicherheitsteams, die ihre Golang-Anwendungen sicher entwickeln möchten, eine einfach zu implementierende Lösung, die schnelle Fixes ermöglicht und auf präzisen Sicherheitsinformationen basiert:

  • Entwicklerfreundlich – Snyk integriert sich nahtlos in bestehende Entwicklungsworkflows, scannt Projekte in wenigen Sekunden (sogar Projekte in der Größe von Kubernetes!) und ist äußerst einfach zu bedienen – für eine hohe Akzeptanz und maximale Produktivität.

  • Umfassende Abdeckung – Snyk erkennt sowohl Sicherheitsschwachstellen ALS AUCH Lizenzprobleme in allen Phasen des SDLC und unterstützt Go-Modules-Anwendungen, einschließlich solcher, die in Containern ausgeführt werden.

  • Umfassende Sicherheitsexpertise – Seit 2019 hat Snyk Hunderte proprietäre Go-Sicherheitsschwachstellen zur Snyk Intel Vulnerability Database hinzugefügt. Die meisten dieser Schwachstellen sind proprietär, nicht in der NVD zu finden und wurden vom Snyk-Sicherheitsforschungsteam aufgedeckt.

Sie verwenden Go und möchten loslegen? Testen Sie Snyk kostenlos!

Starten Sie mit Capture the Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.