
Script LUA Suricata per rilevare CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 e CVE-2019-12260
Script LUA Suricata per rilevare CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 e CVE-2019-12260
Lo script verifica la CVE-2019-12255: il pacchetto controllato deve avere i flag PSH, ACK e URG impostati e una dimensione del payload superiore a 1500 byte. Verifica inoltre che il valore del puntatore urgente sia impostato a 0; questo causa un underflow di intero sui dispositivi vulnerabili.
Lo sfruttamento si basa sul portare il puntatore urgente in underflow impostandolo a 0. Il difetto fa sì che il vincolo di lunghezza nella recv() del target venga ignorato e che tutti i dati disponibili dalla finestra TCP vengano copiati nel buffer fornito dall'utente. La regola verifica che il payload superi i 1500 byte.
Lo script verifica la CVE-2019-12256: il pacchetto controllato è composto da due opzioni LSRR o SSRR nel pacchetto IP. Le opzioni LSRR possono essere riconosciute dal valore esadecimale 0x83, le opzioni SSRR dal valore esadecimale 0x89. Lo sfruttamento è costituito da valori non validi: la lunghezza è inferiore a quella normalmente usata per definire una route (minimo 4 byte); questo è presente due volte nel pacchetto inviato al server. Le seguenti opzioni IP attivano uno stack overflow con opzioni LSRR non valide:
| Type LSRR | Length | LSRR-Pointer | Type LSRR | Length | LSRR-Pointer |
|---|---|---|---|---|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
Le seguenti opzioni IP attivano uno stack overflow con opzioni SSRR non valide:
| Type SSRR | Length | SSRR-Pointer | Type SSRR | Length | SSRR-Pointer |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
Lo script verifica la CVE-2019-12258; i pacchetti coinvolti sono contrassegnati da un commento nel PCAP. La prima rilevazione viene controllata con 2 opzioni window scale, 1 non valida e 1 valida. La seconda volta si tratta della variante DoS non armata, che contiene 1 opzione window scale non valida.
L'opzione Window Scale ha valore 03 per indicare che questa opzione è in uso; si trova a un offset fisso di 57 nel pacchetto TCP. Lo sfruttamento deve avere valore 2 (non valido) per attivarsi; questo valore si trova all'offset 58. I valori vengono controllati e, se corrispondono, viene restituito 1 (corrispondenza).
Lo script verifica la CVE-2019-12260: il pacchetto controllato è composto da un pacchetto SYN malformato, contenente un campo di opzione TCP-AO con un valore in byte <= 3 byte. L'opzione TCP-AO può essere impostata con il valore esadecimale 0x29, come da RFC: https://tools.ietf.org/html/rfc5925#page-7
Lo sfruttamento si basa sul malformare l'opzione TCP-AO impostandola a un valore minore o uguale a 3 byte. Questo può essere verificato controllando che il valore esadecimale 0x29 sia impostato come opzione all'offset 56.