
Proof-of-Concept für einen kritischen Pufferüberlauf in der DNS-Verarbeitung von Kemp LoadMaster, der Remote-Denial-of-Service über manipulierte DNS-Anfragen verursacht.
Kemp LoadMaster-Geräte (Firmware < 7.2.60) leiden unter einer kritischen Pufferüberlauf-Schwachstelle in den Methoden isreverse() und locate_fqdn() der Bibliothek libkemplink.so. Die Schwachstelle resultiert aus einem zu kleinen 256-Byte-Puffer, der für DNS-Namen zugewiesen wurde und durch das Senden einer speziell gestalteten DNS-Anfrage mit Sonder- oder Unicode-Zeichen ausgenutzt werden kann.
Eine erfolgreiche Ausnutzung führt zu einem sofortigen Absturz und einem Denial-of-Service (DoS)-Zustand. Das Vorhandensein eines Stack-Canary-Tokens verhindert eine weitere Ausnutzung, aber die Möglichkeit einer Remote-Code-Ausführung (RCE) kann nicht ausgeschlossen werden, wenn ein Angreifer eine andere Schwachstelle findet, um das Stack-Canary-Token preiszugeben.
Die Schwachstelle wird leicht ausgelöst, indem eine DNS-Anfrage über TCP oder UDP an die exponierten DNS-Dienste des LoadMaster-Geräts gesendet wird. Ein einfacher Proof-of-Concept ist:
dig @kempdeviceip 😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀.com (Unter einigen Linux-Distributionen müssen Sie +noidnout +noidnin hinzufügen)
Der Exploit nutzt einen bestimmten Schritt im DNS-Namensauflösungsprozess. Während der zugewiesene Puffer von 256 Byte die Standard-Maximalgröße für über das Netzwerk übertragene DNS-Namen ist und der Proof-of-Concept innerhalb dieser Grenze liegt, vergrößern sich die Sonder- und Unicode-Zeichen in ihrer Größe, wenn sie während der Verarbeitung maskiert werden. Daher überschreitet die Puffergröße nach dem Maskieren die ursprüngliche Zuweisung. Die Dokumentation und der Quellcode der Bind9-Bibliothek (von der die DNS-Komponente abgeleitet ist) zeigen, dass ein Puffer von mindestens 1004 Byte für den sicheren Betrieb erforderlich ist, wobei eine konservative Puffergröße von 1023 Byte empfohlen wird. Weitere Einzelheiten finden Sie hier.
Timeline: