
KeePass 2.X Dumper (CVE-2023-32784)
Dies ist meine PoC-Implementierung für CVE-2023-32784
Meine Version ist ein Python-Port von @vdohneys PoC mit einigen Änderungen und zusätzlichen Funktionen.
Eine Änderung bestand darin, bekannte Zeichenfolgen zu verwenden, die innerhalb der Dump-Datei gefunden werden können, um genauer zur Position der Masterkey-Zeichen zu springen. Dies führt zu weniger falsch-positiven Zeichen und reduziert die Zeit zum Scannen der Datei erheblich. Falls die Zeichenfolgen nicht in der Dump-Datei gefunden werden, beginnt der Scan von Anfang an. Diese Option ist standardmäßig aktiviert, aber wenn Sie stattdessen einen vollständigen Scan durchführen möchten, können Sie --full-scan verwenden. Für diese Fälle habe ich auch ein --skip-Flag hinzugefügt, um den Scan zu beschleunigen. Dies geschieht durch Versetzen des Zeigers, um über die nächsten 1000 Bytes zu springen, da diese typischerweise nur dasselbe Zeichen mehrfach wiederholt enthalten. Wenn beispielsweise das Zeichen ●e in der Dump-Datei gefunden wurde, würde es wie folgt aussehen:
●e
●e
●e
●e
●e
●e
●e
●e
●e
●e
●●c
Mit dem --skip-Flag ist es möglich, über diese wiederholten Bytes zu springen, um den Scan zu beschleunigen, obwohl dies bei Verwendung der Sprungpunkte nicht notwendig ist.
[*] 15567777 | Gefunden: ●e
[*] 15568797 | Gefunden: ●e
[*] 15570355 | Gefunden: ●●c
[*] 15571375 | Gefunden: ●●c
[*] 15572925 | Gefunden: ●●●r
[*] 15573973 | Gefunden: ●●●r

Diese Version enthält eine Wiederherstellungsfunktion, die versucht, alle verbleibenden unbekannten Zeichen für den Schlüssel zu finden. Dies geschieht durch den Versuch, die verschiedenen möglichen Kombinationen der im Dump gefundenen Zeichen zu lokalisieren. Wenn eine Übereinstimmung gefunden wird, werden die restlichen Zeichen aus dem Dump gezogen, bis das nächste Nicht-ASCII-Zeichen gefunden wird.
Dies funktioniert, wenn das vollständige Klartext-Passwort in der Dump-Datei gespeichert ist (dies scheint zu passieren, wenn der Benutzer den Masterkey anzeigt, indem er das Ausblenden mit Sternchen deaktiviert).
Sie können dieses Verhalten mit dem --recover-Flag aktivieren.

Sie können auch eine Ausgabedatei mit -o angeben, um die verschiedenen gefundenen Kombinationen zu exportieren. Hier sehen Sie, dass selbst wenn Zeichen für einen anderen Masterkey gefunden wurden und das Klartext-Passwort nicht im Dump gespeichert ist, wir in der Kombinationsliste dennoch in der Lage sind, 23/24 Zeichen für den Schlüssel in der unten gefundenen endgültigen Kombination zu erhalten.

In diesem Fall zeigt der erste Eintrag tatsächlich auch 4/5 Zeichen für den zweiten Schlüssel, ducks, der ebenfalls im Dump enthalten war, allerdings wurde er mit den Zeichen für den anderen Schlüssel kombiniert, was zu ducks|tMasterPassword123! führte. Es scheint möglicherweise einen Workaround dafür zu geben, aber dies ist noch in Arbeit.
Ich habe auch die Möglichkeit hinzugefügt, nach potenziellen Passwörtern in der Dump-Datei zu suchen, indem eine Wortliste mit -w bereitgestellt wird. Dieses Flag erzeugt Zeichenfolgen, die Zeichen aus den in der Liste gefundenen Wörtern enthalten, um in der Dump-Datei zu suchen. Sie können auch die Auffüllung für die erstellten Zeichenfolgen mit den Flags -p oder --padding angeben.
Beispiel: --padding 2 => ●●a | --padding 3 => ●●●a

Für das obige Beispiel wurde das Passwort im Klartext im Dump gespeichert. Daher war es möglich, die gefundene Zeichenfolge abzugleichen, um die zusätzlichen Zeichen zu extrahieren. Falls das Klartext-Passwort jedoch nicht im Klartext im Dump gespeichert ist, ist es dennoch möglich, die verbleibenden Zeichen zu extrahieren:

In diesem Fall konnte es zwar keine Klartext-Übereinstimmung im Dump finden, konnte aber dennoch alle zusätzlichen Zeichen extrahieren.
Dank an @vdohney, der diese Schwachstelle ursprünglich entdeckt hat. Link zu seinem Projekt ist hier
CVE-Details: CVE-2023-32784