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. Senior Frontend Developer (m/w/d)
    Wikando GmbH, deutschlandweit (Home-Office)
  2. IT Performance Manager (m/w/d)
    CG Car-Garantie Versicherungs-AG, Freiburg im Breisgau
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 Karrierewelt
  1. IT-Sicherheit: (Anti-)Hacking für Administratoren und Systembetreuer: virtueller Drei-Tage-Workshop
    28.-30.06.2023, Virtuell
  2. Grundlagen für Virtual Reality mit Unreal Engine: virtueller Drei-Tage-Workshop
    23.-25.01.2023, Virtuell
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

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

GL 13. Okt 2021

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

Ninos 13. Okt 2021

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

Trollversteher 13. Okt 2021

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



Aktuell auf der Startseite von Golem.de
Deutscher Entwicklerpreis
Entwickler küren The Wandering Village zum besten Spiel

Beste technische Leistung, Innovationspreis und bestes Spiel: The Wandering Village ist der große Gewinner beim Deutschen Entwicklerpreis 2022.

Deutscher Entwicklerpreis: Entwickler küren The Wandering Village zum besten Spiel
Artikel
  1. Apple Watch Ultra im Test: Tolle Sportuhr - und trotzdem Trainingsbedarf
    Apple Watch Ultra im Test
    Tolle Sportuhr - und trotzdem Trainingsbedarf

    Akkulaufzeit, Navigation und das Ökosystem: Golem.de ist mit der für ausdauernde Athleten gedachten Sportuhr Apple Watch Ultra unterwegs gewesen.
    Von Peter Steinlechner

  2. Sensor Watch: Zwei neue Boards für die schlau gebastelte Casio-Uhr
    Sensor Watch
    Zwei neue Boards für die schlau gebastelte Casio-Uhr

    Um der steigenden Nachfrage gerecht zu werden, ohne den Preis erhöhen zu müssen, soll es künftig zwei Austauschplatinen für Casio-Digitaluhren geben.

  3. Responsible Disclosure: Obi macht das Melden einer Sicherheitslücke schwer
    Responsible Disclosure
    Obi macht das Melden einer Sicherheitslücke schwer

    Ein Sicherheitsforscher hat eine Lücke bei mehreren Unternehmen und Stadtverwaltungen gemeldet. Obi machte es ihm besonders schwer.

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 • Gaming-Monitore -37% • Asus RTX 4080 1.399€ • PS5 bestellbar • Gaming-Laptops & Desktop-PCs -29% • MindStar: Sapphire RX 6900 XT 799€ statt 1.192€, Apple iPad (2022) 256 GB 599€ statt 729€ • Samsung SSDs -28% • Logitech Mäuse, Tastaturen & Headsets -53% [Werbung]
    •  /