
Suricata-LUA-Skripte zur Erkennung von CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 und CVE-2019-12260
Suricata-LUA-Skripte zur Erkennung von CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 und CVE-2019-12260
Das Skript prüft auf CVE-2019-12255. Das untersuchte Paket muss die PSH-, ACK- und URG-Flags gesetzt haben und eine Nutzlastgröße von mehr als 1500 Bytes aufweisen. Anschließend wird geprüft, ob der Wert des Urgent Pointers auf 0 gesetzt ist. Dies führt bei verwundbaren Geräten zu einem Integer-Unterlauf.
Der Exploit basiert darauf, den Urgent Pointer durch Setzen auf 0 unterlaufen zu lassen. Der Fehler bewirkt, dass die Längenbeschränkung in der recv()-Funktion des Ziels ignoriert wird und alle verfügbaren Daten aus dem TCP-Fenster in den vom Benutzer bereitgestellten Puffer kopiert werden. Die Regel prüft, ob die Nutzlast 1500 Bytes überschreitet.
Das Skript prüft auf CVE-2019-12256. Das untersuchte Paket besteht aus zwei LSRR- oder SSRR-Optionen im IP-Paket. Die LSRR-Optionen sind am Hex-Wert 0x83 zu erkennen, die SSRR-Option am Hex-Wert 0x89. Der Exploit besteht aus ungültigen Werten; die Länge ist geringer als die normalerweise bei der Definition einer Route verwendete Länge (mindestens 4 Bytes). Dieser Zustand ist in dem an den Server gesendeten Paket zweimal vorhanden. Die folgenden IP-Optionen lösen mit ungültigen LSRR-Optionen einen Stack-Überlauf aus:
| Typ LSRR | Länge | LSRR-Zeiger | Typ LSRR | Länge | LSRR-Zeiger |
|---|---|---|---|---|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
Die folgenden IP-Optionen lösen mit ungültigen SSRR-Optionen einen Stack-Überlauf aus:
| Typ SSRR | Länge | SSRR-Zeiger | Typ SSRR | Länge | SSRR-Zeiger |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
Das Skript prüft auf CVE-2019-12258. Die betroffenen Pakete sind im PCAP mit einem Kommentar markiert. Die erste Erkennung wird anhand von 2 Window-Scale-Optionen geprüft, einer ungültigen und einer gültigen. Beim zweiten Mal handelt es sich um die unbewaffnete DoS-Variante, die eine ungültige Window-Scale-Option enthält.
Die Window-Scale-Option hat den Wert 03, um anzuzeigen, dass diese Option verwendet wird; dies geschieht an einem festen Offset von 57 im TCP-Paket. Der Exploit muss den Wert 2 (ungültig) haben, damit dieser Exploit ausgelöst wird. Dieser Wert befindet sich bei Offset 58. Die Werte werden geprüft; falls dies zutrifft, wird 1 (Übereinstimmung) zurückgegeben.
Das Skript prüft auf CVE-2019-12260. Das untersuchte Paket besteht aus einem fehlerhaften SYN-Paket; dieses Paket enthält ein TCP-AO-Optionsfeld mit einem Bytewert von <= 3 Bytes. Die TCP-AO-Option kann gemäß RFC mit dem Hex-Wert 0x29 gesetzt werden: https://tools.ietf.org/html/rfc5925#page-7
Der Exploit basiert darauf, die TCP-AO-Option zu verfälschen, indem sie auf einen Wert von weniger als oder gleich 3 Bytes gesetzt wird. Dies kann geprüft werden, indem verifiziert wird, dass der Hex-Wert 0x29 bei Offset 56 als Option gesetzt ist.