
Scripts LUA de Suricata para detectar CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 y CVE-2019-12260
Scripts LUA de Suricata para detectar CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 y CVE-2019-12260
El script comprueba la CVE-2019-12255; el paquete que se comprueba debe tener los flags PSH, ACK y URG establecidos, y un tamaño de payload superior a 1500 bytes. Luego comprueba si el valor del puntero urgente está establecido a 0; esto provocará un underflow de enteros en dispositivos vulnerables.
El exploit se basa en provocar un underflow del puntero urgente estableciéndolo a 0. El fallo hace que la restricción de longitud en el recv() del objetivo se ignore y copie todos los datos disponibles de la ventana TCP al búfer proporcionado por el usuario. La regla comprueba si el payload supera los 1500 bytes.
El script comprueba la CVE-2019-12256; el paquete que se comprueba consta de dos opciones LSRR o SSRR en el paquete IP. Las opciones LSRR se reconocen con el valor hexadecimal 0x83, la opción SSRR con el valor hexadecimal 0x89; el exploit consiste en valores no válidos; la longitud es menor que la longitud usada normalmente al definir una ruta (mínimo 4 bytes), y esto está presente dos veces en el paquete enviado al servidor. Las siguientes opciones IP provocarán un desbordamiento de pila con opciones LSRR no válidas:
| Tipo LSRR | Longitud | Puntero LSRR | Tipo LSRR | Longitud | Puntero LSRR |
|---|---|---|---|---|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
Las siguientes opciones IP provocarán un desbordamiento de pila con opciones SSRR no válidas:
| Tipo SSRR | Longitud | Puntero SSRR | Tipo SSRR | Longitud | Puntero SSRR |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
El script comprueba la CVE-2019-12258; los paquetes involucrados están marcados con un comentario en el PCAP. La primera detección se comprueba con 2 opciones de window scale, 1 no válida y 1 válida. La segunda vez es la variante DoS no armada que contiene 1 opción de window scale no válida.
La opción Window Scale tiene el valor 03 para indicar que se está usando esta opción; esto se encuentra en un offset fijo de 57 en el paquete TCP. El exploit tiene que tener el valor 2 (no válido) para que se active; este valor se encuentra en el offset 58. Se comprueban los valores, devolviendo 1 (coincidencia) si este es el caso.
El script comprueba la CVE-2019-12260; el paquete que se comprueba consiste en un paquete SYN malformado; este paquete contiene un campo de opción TCP-AO con un valor en bytes de <= 3 bytes. La opción TCP-AO se puede establecer con el valor hexadecimal 0x29, según RFC: https://tools.ietf.org/html/rfc5925#page-7
El exploit se basa en malformar la opción TCP-AO estableciéndola a cualquier valor menor o igual a 3 bytes. Esto se puede comprobar verificando que el valor hexadecimal 0x29 está establecido como opción en el offset 56.