Skip to main content

Schwach-Hash-Schwachstelle in crypto-js und crypto-es entdeckt (CVE-2023-46233 & CVE-2023-46133)

Artikel von
feature crypto vuln

25. Oktober 2023

0 Min. Lesezeit

Am 18. Oktober leitete der Sicherheitsforscher Zemnmez die verantwortungsvolle Offenlegung einer Schwachstelle wegen der „Verwendung eines schwachen Hashs“ ein, die er in crypto-js entdeckt hatte – einer Open-Source-JavaScript-Bibliothek für Kryptografie-Standards, deren Wartung eingestellt wurde. Die Schwachstelle betrifft auch das Paket crypto-es (für ES6 und TypeScript). Der Forscher hat ein ähnliches Issue eröffnet und die Maintainer darin gebeten, vertrauliche Offenlegungen zu ermöglichen. Sowohl die Repositories crypto-js als auch crypto-es haben die von Zemnmez angeforderten Funktionen „Sicherheitsmeldungen“ und „Private Meldung von Schwachstellen“ aktiviert. Inzwischen haben wir erfahren, dass alle früheren Versionen der Bibliotheken von der Schwachstelle betroffen sind. Es gibt keine Hinweise darauf, dass die Schwachstellen die Kryptografie-Bibliotheken des Node.js-Kerns betreffen.

Die Schwachstellen in crypto-js und crypto-es erläutert

Snyk hat zwei Sicherheitshinweise zur Schwachstelle erstellt:

Neue Versionen der Bibliotheken crypto-es (2.1.0) und crypto-js (4.2.0) wurden veröffentlicht, um die von Zemnmez gemeldete Sicherheitslücke zu beheben. Der Commit für crypto-es weist darauf hin, dass die Änderung darin bestand, „Standardparameter zur Verbesserung der Sicherheit festzulegen“. Auch für die Bibliothek crypto-js gibt es eine Korrektur. Es ist jedoch wichtig zu beachten, dass die Bibliothek zwar nicht als deprecated gekennzeichnet ist, normalerweise aber nicht aktualisiert wird. Sie sollten daher Alternativen in Betracht ziehen (mehr dazu weiter unten).

Die zugehörigen Sicherheitshinweise enthalten ähnliche Beschreibungen des Problems:

„Betroffene Versionen dieses Pakets sind aufgrund unzureichender Sicherheitseinstellungen in der Klasse PBKDF2 (Algo) anfällig für die ‚Verwendung eines schwachen Hashs‘. Diese verwendet das unsichere Verfahren SHA1 und hat eine niedrige Iterationszahl von 1. Wenn PBKDF2 (Algo) mit den Standardparametern verwendet wird, ermöglichen diese unsicheren Einstellungen Angreifern Brute-Force-Angriffe. (Im Sicherheitshinweis zu crypto-js wird außerdem darauf hingewiesen, dass die Bibliothek nicht mehr gewartet wird.)“

Durch die Korrekturen wurde der Standardwert des Parameters iterations von 1 auf 250000 geändert. Das größte Risiko dieser Schwachstelle besteht darin, dass Daten, die mit dieser Funktion gehasht wurden (etwa gespeicherte Passwörter), Brute-Force-Angriffen ausgesetzt sind. Bei pbkdf2 sind gespeicherte Passwörter und Signaturen (zum Beispiel zur Dateiverifizierung) typische Anwendungsfälle. Wird pbkdf2 zur Signaturvalidierung verwendet, kann möglicherweise auch ein Angriff mit gewähltem Klartext durchgeführt werden, der zu einer identischen kryptografischen Signatur führt – allerdings unter Umständen mit erheblichem Aufwand. Der Angreifer kann so eine Eingabe erstellen, die die kryptografische Validierung im Wesentlichen besteht.

So bereiten Sie die Behebung vor

Prüfen Sie Ihre Betroffenheit

Mit Snyk können Sie schnell betroffene Open-Source-Projekte und Container-Images finden – auch bevor die korrigierten Versionen von crypto-js und crypto-es veröffentlicht wurden.

Navigieren Sie in der Seitenleiste der Snyk-App zur Ansicht Abhängigkeiten. Klappen Sie dort den Filter „Abhängigkeiten“ auf und geben Sie „crypto-js“ ein. Sie können einzelne Versionen auswählen oder die Verknüpfung Alle auswählen nutzen. Klicken Sie anschließend außerhalb des Filters, um die Ergebnisse anzuzeigen, und wiederholen Sie den Vorgang für „crypto-es“. Dadurch werden alle Ihre Projekte angezeigt, die die ausgewählten Versionen von crypto-es verwenden. Durchsuchen Sie die Projekte und Abhängigkeiten, um Ihre Betroffenheit einzuschätzen und zu priorisieren, was Sie zuerst beheben sollten.

Snyk-Seite „Dependencies“ mit einer Liste von Projekten, die crypto-js@3.3.0 verwenden, sowie Quellen und Anzahl der Probleme.
Ich habe 33 Projekte, die crypto-js@3.3.0 verwenden, darunter eines, bei dem es sich um ein Docker-Image handelt

Mit Snyk Advisor den Zustand Ihrer Pakete einschätzen

Snyk Advisor hilft Ihnen dabei, das passende Paket für Ihr nächstes Projekt zu finden. Eine kurze Suche nach crypto-js zeigt: Die Kryptografie-Bibliothek verfügt zwar über eine aktive Community, wird aber inactive und verweist auf ähnliche Pakete. (Dieser Screenshot entstand vor der Offenlegung und Vergabe der Schwachstellen. Da der Entwickler eine neue Version veröffentlicht hat, wird der Wartungsstatus derzeit als sustainable eingestuft.)

Snyk Advisor-Seite für das JavaScript-Paket crypto-js mit einem Health Score von 79/100 und dem Status „nicht aktiv gewartet“.

Verfolgen Sie Verbesserungen am Hauptprojekt oder Ökosystem

Die früheren Maintainer der nicht mehr weiterentwickelten Bibliothek crypto-js führen das Ende der Wartung unter anderem darauf zurück, dass „eine weitere Entwicklung von CryptoJS dazu führen würde, dass es nur noch ein Wrapper für die native Crypto-Funktionalität ist“. Wenn Sie die Zustandsbewertung der verwendeten Bibliotheken im Blick behalten, können Sie Schwachstellen proaktiv vermeiden. Ebenso wichtig ist es jedoch, sich über Verbesserungen im Ökosystem selbst auf dem Laufenden zu halten. Für manche Teams ist es in einer solchen Situation am sinnvollsten zu prüfen, ob sich Drittanbieter-Bibliotheken durch native Funktionen des Ökosystems ersetzen lassen.

Schwachstellen mit Snyk erkennen

Mit Snyk lassen sich die Schwachstellen in crypto-js und crypto-es auf verschiedene Weise erkennen. Mit der Snyk CLI können Sie Ihre Projekte lokal testen, sie über unsere SCM-Integrationen in Snyk importieren oder mithilfe von Snyk-Berichten schnell in allen bereits in Snyk importierten Projekten nach crypto-js und crypto-es suchen.

Projekte mit der Snyk CLI testen

Snyk Container und Snyk Open Source können Sie mithilfe von snyk container test bzw. snyk test auf Betriebssystempakete oder Open-Source-Bibliotheken hinweisen, die von anfälligen Versionen von crypto-js oder crypto-es abhängen. Snyk kann Ihre Container-Images und Open-Source-Projekte überwachen und Sie über neu auftretende Schwachstellen wie diese in crypto-js oder crypto-es benachrichtigen. Registrieren Sie sie dazu mit snyk container monitor (für Container-Images) oder snyk monitor (für die Nutzung von Open-Source-Bibliotheken).

Das folgende Beispiel zeigt, wie die Snyk CLI ein Node.js-Projekt scannt. In diesem Fall wird angezeigt, dass mein Projekt crypto-js in Version 4.0.0 verwendet und auf Version 4.2.0 aktualisiert werden sollte.

$ > snyk test

Testing /Users/jamie/Projects/GitRepo/gatsby-demo...

Tested 1367 dependencies for known issues, found 29 issues, 1008 vulnerable paths.

Issues to fix by upgrading:

  Upgrade crypto-js@4.0.0 to crypto-js@4.2.0 to fix
  ✗ Use of Weak Hash (new) [High Severity][https://security.snyk.io/vuln/SNYK-JS-CRYPTOJS-6028119] in crypto-js@4.0.0
    introduced by crypto-js@4.0.0

Projekte mithilfe einer SCM-Integration testen

Wenn Sie Ihr Projekt über eine unserer unterstützten SCM-Integrationen (GitHub, Bitbucket, GitLab, Azure Repos) in Snyk importieren, wird automatisch ein Test gestartet. Anschließend können Sie in der Snyk-Benutzeroberfläche die Schwachstellen in crypto-js und crypto-es in Ihren Projekten erkennen, priorisieren und beheben.

Mit Snyk Reporting oder Snyk Insights Schwachstellen in Ihren Projekten erkennen

Snyk-Kunden mit Zugriff auf Snyk Reporting (Enterprise-Plan) und Snyk Insights können crypto-js oder crypto-es schnell in den Projekten finden, die sie bereits importiert haben und mit Snyk überwachen. Beide Varianten der crypto--Schwachstelle haben dieselbe CWE. Filtern Sie auf der Insights-Seite nach dieser gemeinsamen CWE, CWE-328, wie unten gezeigt.

Snyk Insights-Dashboard mit offenen, nach CWE-328-Schwachstellen durch Verwendung schwacher Hashes gefilterten Problemen sowie aufgeführten Risikofaktoren und betroffenen Projekten.

Wenn Sie das Problem finden, können Sie genau sehen, wo es auftritt. Klicken Sie anschließend auf das jeweilige Projekt, um weitere Informationen zum Problem und Anweisungen zur Behebung aufzurufen.

Behebungen mit dem Snyk-Risikoscore priorisieren

Wahrscheinlich finden Sie mehrere Probleme mit crypto-js oder crypto-es in Ihren Projekten. Das kann die Entscheidung erschweren, worauf Sie sich bei der Behebung zuerst konzentrieren sollten. Snyk bietet verschiedene Möglichkeiten, den Priorisierungsprozess zu unterstützen. Wir empfehlen jedoch unseren Risikoscore.

Der Snyk-Risikoscore berechnet zahlreiche Risikofaktoren, damit Sie schnell die Probleme erkennen, die zuerst behoben werden sollten. Dabei werden verschiedene Signale wie EPSS, Reifegrad von Exploits, CVSS und Trends in sozialen Medien berücksichtigt. So können Sie die Liste der Schwachstellen schnell durchgehen und Behebungen entsprechend priorisieren. Bei crypto-js und crypto-es hängt der Score vom jeweiligen Kontext ab.

Snyk-Projekt-Dashboard mit einer Schwachstelle durch einen schwachen Hash in crypto-js, Risikowert 139 sowie Details zu Auswirkung und Wahrscheinlichkeit.

Der Score wird für jedes Problem mit crypto-js und crypto-es auf der Seite Projekte angezeigt und ist auch in Snyk Reporting verfügbar.

So beheben Sie die crypto- Schwachstellen in Open-Source-Projekten oder Container-Basis-Images

Aktualisieren Sie Ihr Basis-Image auf ein neueres Tag mit behobener Schwachstelle. Bei unterstützten Ökosystemen können Sie erforderliche Fix-Pull-Requests direkt in Snyk auslösen.

Snyk empfiehlt beispielsweise über die Benutzeroberfläche oder CLI alternative Container-Basis-Images. Wenn Sie Ihr Quellcode-Repository über ein SCM wie GitHub importieren, können Sie die Korrektur des Container-Images automatisieren: Snyk erstellt einen Pull-Request, der den FROM-Eintrag in der Dockerfile aktualisiert.

Snyk-Projekt-Dashboard mit Schwachstellen in einem Container-Image und Empfehlungen zum Aktualisieren des Basis-Images sowie einer Schaltfläche „Fix-PR erstellen“

Möglicherweise lässt sich die Auswirkung der Schwachstelle auch vermeiden, indem Sie den Parameter iterations bei der Verwendung von PBKDF2 angeben. Ebenso wichtig ist es, darauf zu achten, dass Sie für iterations keinen zu niedrigen Wert angeben:

{ 
    keySize: 256/32, 
    iterations: 1 
}

…denn dadurch würde die vorherige Schwachstelle nachgebildet.

Nächste Schritte zur Behebung der Schwachstellen in crypto-js und crypto-es

  1. Testen Sie Ihre Projekte mit Snyk mithilfe der in diesem Artikel beschriebenen Methoden. Erstellen Sie zunächst ein kostenloses Snyk-Konto und importieren und scannen Sie anschließend mit dem Import-Assistenten alle potenziell betroffenen Projekte.

  2. Ermitteln Sie mithilfe der Prioritätsbewertung oder von Insights (für Kunden mit Snyk Enterprise-Plan), welche Behebungen für die Schwachstellen in crypto-js und crypto-es am wichtigsten sind.

  3. Beheben Sie die Probleme, indem Sie die Abhängigkeiten Ihrer Open-Source-Projekte oder Ihre Container-Images aktualisieren: auf crypto-js Version 4.2.0 oder höher und auf crypto-es Version 2.1.0 oder höher.

  4. Verfolgen Sie die weitere Entwicklung und besuchen Sie den Snyk Blog, um über Neuigkeiten auf dem Laufenden zu bleiben. Die Sicherheitsteams von Snyk aktualisieren unsere Ressourcen regelmäßig mit den neuesten Informationen.

  5. Wenn Sie das nicht mehr gewartete crypto-js verwenden, sollten Sie den Wechsel zu crypto-es oder die Nutzung integrierter Funktionen in Betracht ziehen.

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.