
Scripts LUA Suricata pour détecter CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 et CVE-2019-12260
Scripts Suricata LUA pour détecter CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 et CVE-2019-12260
Le script vérifie la CVE-2019-12255. Le paquet vérifié doit avoir les indicateurs PSH, ACK et URG positionnés, ainsi qu'une taille de charge utile dépassant 1500 octets. Il vérifie ensuite si la valeur du pointeur urgent est définie à 0, ce qui provoque un dépassement négatif d'entier sur les dispositifs vulnérables.
L'exploit repose sur un dépassement négatif du pointeur urgent en le définissant à 0. La faille fait que la contrainte de longueur dans recv() de la cible est ignorée, et copie toutes les données disponibles de la fenêtre TCP vers le tampon fourni par l'utilisateur. La règle vérifie si la charge utile dépasse 1500 octets.
Le script vérifie la CVE-2019-12256. Le paquet vérifié contient deux options LSRR ou SSRR dans le paquet IP. Les options LSRR peuvent être reconnues par la valeur hexadécimale 0x83, les options SSRR par la valeur hexadécimale 0x89. L'exploit consiste en des valeurs invalides, la longueur est inférieure à la longueur normalement utilisée lors de la définition d'une route (4 octets minimum), ceci est présent deux fois dans le paquet envoyé au serveur. Les options IP suivantes déclenchent un débordement de pile avec des options LSRR invalides :
| Type LSRR | Length | LSRR-Pointer | Type LSRR | Length | LSRR-Pointer |
|---|---|---|---|---|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
Les options IP suivantes déclenchent un débordement de pile avec des options SSRR invalides :
| Type SSRR | Length | SSRR-Pointer | Type SSRR | Length | SSRR-Pointer |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
Le script vérifie la CVE-2019-12258. Les paquets concernés sont marqués d'un commentaire dans le PCAP. La première détection est vérifiée en présence de 2 options d'échelle de fenêtre, 1 invalide et 1 valide. La deuxième fois, il s'agit de la variante DoS non armée qui contient 1 option d'échelle de fenêtre invalide.
L'option d'échelle de fenêtre a la valeur 03 pour indiquer que cette option est utilisée, à un décalage défini de 57 dans le paquet TCP. L'exploit doit avoir la valeur 2 (invalide) pour que cet exploit se déclenche, cette valeur se trouve au décalage 58. Les valeurs sont vérifiées, renvoyant 1 (correspondance) si c'est le cas.
Le script vérifie la CVE-2019-12260. Le paquet vérifié consiste en un paquet SYN malformé, contenant un champ d'option TCP-AO avec une valeur d'octet <= 3 octets. L'option TCP-AO peut être définie avec la valeur hexadécimale 0x29, conformément à la RFC : https://tools.ietf.org/html/rfc5925#page-7
L'exploit est basé sur la malformation de l'option TCP-AO en la définissant à une valeur inférieure ou égale à 3 octets. Ceci peut être vérifié en s'assurant que la valeur hexadécimale 0x29 est définie comme option au décalage 56.