
Heap-Überlauf vor der Authentifizierung im Xlight SFTP Server <= 3.9.4.2
Xlight 32- und 64-Bit-Versionen <= 3.9.4.2
Ein nicht authentifizierter Angreifer mit Zugriff auf Xlight SFTP könnte Codeausführung erlangen oder einen Denial-of-Service verursachen.
Über das Netzwerk gesendete Zeichenketten im SFTP-Protokoll sind mit einer vier Byte langen Längenangabe versehen. Die Funktion, die Xlight zum Lesen dieser Zeichenketten aus dem Netzwerkpaket verwendet, weist einen Integer-Überlauf auf, wenn die Länge validiert und der erforderliche Speicher reserviert wird. Durch das Manipulieren der vier Byte langen Längenangabe einer Zeichenkette können wir einen großen memmove (~4 GB) aus einem vom Angreifer kontrollierten Puffer außerhalb der Grenzen auf den Heap auslösen.
Die anfällige Funktion wird zum Empfangen von Zeichenketten während des gesamten SSH-Handshakes verwendet, einschließlich vor der Authentifizierung, wenn unterstützte Algorithmen, Cipher Suites sowie ein Benutzername und ein Passwort vom Client empfangen werden. Wir können jede dieser Zeichenketten mit einer manipulierten Länge anvisieren, um den Exploit auszulösen.
Dies ist leicht auslösbar, aber die Leichtigkeit der Ausnutzung hängt von der Bitness der Xlight-Binärdatei ab.
Bei 32-Bit läuft die Kopie über das Ende des Heaps hinaus, überschreibt dabei alles im Prozess und führt zu einem Absturz. Es ist wahrscheinlich möglich, eine benachbarte Struktur auf dem Heap zu beschädigen und die Multithread-Fähigkeit dieses Servers auszunutzen, um auf die beschädigten Daten zuzugreifen, bevor die wilde Kopie den Prozess zum Absturz bringt.
Bei 64-Bit können wir keinen OOB write erreichen, da das Größenargument des Speicherzuweisungsaufrufs ein size_t ist (d.h. 64 Bit breit, wenn für 64-Bit kompiliert), was bedeutet, dass wir diesen Wert nicht durch Addition zweier 32-Bit-Integer überlaufen lassen können. Stattdessen wird einfach ein großer ~4-GB-Puffer reserviert. Dieser Fehler führt stattdessen zu einem OOB read, der den Prozess zum Absturz bringt.