Schwach-Hash-Schwachstelle in crypto-js und crypto-es entdeckt (CVE-2023-46233 & CVE-2023-46133)
25. Oktober 2023
0 Min. LesezeitAm 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.
Direktlinks
Die Schwachstellen in crypto-js und crypto-es erläutert
Snyk hat zwei Sicherheitshinweise zur Schwachstelle erstellt:
SNYK-JS-CRYPTOJS-6028119 für
crypto-js(CVE-2023-46233)SNYK-JS-CRYPTOES-6032390 für
crypto-es(CVE-2023-46133)
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. WennPBKDF2 (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.

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.)

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.
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.

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.

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.

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:
…denn dadurch würde die vorherige Schwachstelle nachgebildet.
Nächste Schritte zur Behebung der Schwachstellen in crypto-js und crypto-es
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.
Ermitteln Sie mithilfe der Prioritätsbewertung oder von Insights (für Kunden mit Snyk Enterprise-Plan), welche Behebungen für die Schwachstellen in
crypto-jsundcrypto-esam wichtigsten sind.Beheben Sie die Probleme, indem Sie die Abhängigkeiten Ihrer Open-Source-Projekte oder Ihre Container-Images aktualisieren: auf
crypto-jsVersion 4.2.0 oder höher und aufcrypto-esVersion 2.1.0 oder höher.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.
Wenn Sie das nicht mehr gewartete
crypto-jsverwenden, sollten Sie den Wechsel zucrypto-esoder 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.
