Javascript: RSA-Schlüsselerzeugung mit vielen Nullen

Github sperrt unsichere SSH-Schlüssel, die durch einen Fehler in einer Javascript-Bibliothek erzeugt wurden.

Artikel veröffentlicht am ,
Immer wieder sind es Zufallszahlen, die für Probleme in kryptographischem Code führen.
Immer wieder sind es Zufallszahlen, die für Probleme in kryptographischem Code führen. (Bild: Sankar 1995/Wikimedia Commons/CC-BY-SA 3.0)

Ein Fehler in einer Javascript-Bibliothek namens "keypair" hat zur Erzeugung von zahlreichen unsicheren SSH-Schlüsseln geführt. Die Bibliothek wird unter anderem von der Software Gitkraken verwendet, um SSH-Keys für den Upload bei Github und andere Git-Entwicklungsplattformen zu erzeugen. Wie das Sicherheitsteam von Github schreibt wurden entsprechende SSH-Schlüssel in Github-Benutzerkonten gesperrt und die Betroffenen informiert.

Stellenmarkt
  1. IT-Systemadministrator (m/w)
    Marc Cain GmbH, Bodelshausen
  2. Solution Architekt PLM (w/m/d)
    Dassault Systèmes Deutschland GmbH, München, Stuttgart, Düsseldorf, Hamburg, Berlin (Home-Office)
Detailsuche

Mit dem "keypair"-Paket können RSA-Schlüssel in Javascript und NodeJS erzeugt werden. Dabei traten mehrere Fehler bei der Erzeugung von Zufallszahlen auf. Das "keypair"-Paket hat einen eigenen Zufallszahlengenerator implementiert und verwendet dafür nicht die von Javascript bereitgestellten Funktionen.

Variable mit Namen "crypto" sorgt für Ärger

Die Bibliothek versucht zunächst, bei der Initialisierung des Zufallszahlengenerator das in NodeJS vorhandene Crypto-Modul zu verwenden. Doch gleichzeitig verwendete der Code eine Variable mit dem Namen "crypto", die mit dem Wert "null" vorinitialisiert wurde. Sprich: Die Variable überschrieb den Namensraum des Crypto-Moduls.

Alternativ nutzte der Code eine Routine, bei der der Zufallszahlengenerator mit der Javascript-Funktion "Math.random" initialisiert wurde. Das alleine wäre schon eine Sicherheitslücke, denn "Math.random" ist nicht dafür gedacht, sichere Zufallszahlen zu erzeugen.

Golem Akademie
  1. Webentwicklung mit React and Typescript
    6.-10. Dezember 2021, online
  2. IT-Sicherheit für Webentwickler
    2.-3. November 2021, online
  3. Kotlin für Java-Entwickler
    14.-15. Oktober 2021, online
Weitere IT-Trainings

Doch es gab noch einen weiteren Fehler: Die Ausgabe von "Math.random" sollte zu einem Byte konvertiert werden, dabei trat jedoch ein Fehler auf, der dazu führte, dass in den meisten Fällen lediglich eine Null erzeugt wurde.

Zufallscode erzeugt zu 97 Prozent Nullen

Laut Github erzeugt diese Codestelle in 97 Prozent der Fälle eine Null und in anderen Fällen eine Zahl zwischen 1 und 9. Wenig überraschend führt das dazu, dass insgesamt die Zahl der möglichen Varianten relativ gering ist. Dadurch wurde der Bug letztendlich auch gefunden: Einem Entwickler der Firma Axosoft, dem Hersteller der Software Gitkraken, ist aufgefallen, dass der Code manchmal identische RSA-Schlüssel mehrfach erzeugte.

Vom "keypair"-Paket wurden ein Sicherheitsadvisory und Version 1.0.4 veröffentlicht, die das Problem beheben sollen. Problematisch sieht der Code allerdings weiterhin aus. So wird etwa nach wie vor in dem Fall, dass das Crypto-Modul nicht gefunden werden kann, die unsichere Funktion "Math.random" verwendet.

Auch von Gitkraken gibt es ein Update. Nutzer sollten auf die Version 8.0.1 aktualisieren. Nutzer, die mittels älteren Gitkraken-Versionen SSH-Keys erstellt haben, sollten diese umgehend auswechseln. Neben mit Gitkraken erstellten SSH-Schlüsseln ist potenziell auch andere Software, die das "keypair"-Paket verwendet und damit kryptographische Schlüssel erstellt, betroffen.

Github hat seine Nutzer zwar über kompromittierte Schlüssel informiert, der Blogpost der Firma deutet allerdings an, dass es nicht möglich war, zuverlässig alle betroffenen Schlüssel zu identifizieren.

Wer kryptographische Schlüssel in Javascript erzeugen möchte, sollte dabei idealerweise nicht auf externe Pakete zurückgreifen, sondern die Javascript-eigene Webcrypto-API verwenden. Damit ist es möglich, RSA-Schlüssel und andere kryptographische Schlüssel zu erzeugen. In den gängigen Javascript-Engines ist davon auszugehen, dass der kryptographische Code keine derart gravierenden Fehler enthält.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed


Vanger 13. Okt 2021 / Themenstart

Achso, das meintest du. Sorry, falsch verstanden. Dann will ich nichts gesagt haben :v:

GL 13. Okt 2021 / Themenstart

Genau so sieht ja der eine Test auch aus. Nur dass Trap als Framework verwendet wird...

Ninos 13. Okt 2021 / Themenstart

Ok, hab mir den Code grad angeschaut. Ich hätte erst gar nicht auf eine freiwillige...

Trollversteher 13. Okt 2021 / Themenstart

Richtig, denn erst mit TypeScript wird aus der Friggelkatastrophe JS eine ordentliche...

Engel 13. Okt 2021 / Themenstart

Darf ich ganz kurz argumentieren, dass das Verhalten bei CentOS 7.x noch erheblich...

Kommentieren



Aktuell auf der Startseite von Golem.de
WSL 2 in Windows 11
Von der Hassliebe zur fast perfekten Windows-Linux-Symbiose

Das Windows Subsystem für Linux bietet in Windows 11 theoretisch alles, was sich der Linux-Redakteur wünscht. Einige Fehler und Abstürze trüben jedoch den Eindruck.
Ein Test von Sebastian Grüner

WSL 2 in Windows 11: Von der Hassliebe zur fast perfekten Windows-Linux-Symbiose
Artikel
  1. Metaversum: Facebook plant wohl seine Umbenennung
    Metaversum
    Facebook plant wohl seine Umbenennung

    Einem Gerücht zufolge will Facebook seinen Firmennamen ändern. Der neue Name soll reflektieren, dass das Unternehmen mittlerweile mehr bietet.

  2. Google: Pixel-Smartphones erhalten Android 12
    Google
    Pixel-Smartphones erhalten Android 12

    Nach der Vorstellung des Pixel 6 hat Google mit der Verteilung von Android 12 für ältere Pixel-Modelle begonnen.

  3. Kaufberatung: Macbook Air oder Macbook Pro und wenn ja, welches?
    Kaufberatung
    Macbook Air oder Macbook Pro und wenn ja, welches?

    Apple macht es Kunden nicht leicht, das richtige Macbook zu finden. Wir geben Entscheidungshilfe.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Jetzt PS5 bestellbar • Cyber Week: Bis zu 16% auf SSDs & RAM von Adata & bis zu 30% auf Alternate • Google Pixel 6 vorbestellbar ab 649€ + Bose Headphone als Geschenk) • 3 Spiele für 49€: PC, PS5 uvm. • Switch OLED 369,99€ • 6 Blu-rays für 40€ [Werbung]
    •  /