
LUA-скрипты Suricata для обнаружения CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 и CVE-2019-12260
Скрипты Suricata LUA для обнаружения CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 и CVE-2019-12260
Скрипт проверяет CVE-2019-12255. Проверяемый пакет должен иметь установленные флаги PSH, ACK и URG, а размер полезной нагрузки должен превышать 1500 байт. Затем проверяется, установлено ли значение указателя срочности (urgent pointer) в 0 — это приведёт к целочисленному переполнению вниз (integer underflow) на уязвимых устройствах.
Эксплойт основан на создании integer underflow для указателя срочности путём установки его в 0. Из-за этой уязвимости ограничение длины в recv() целевой системы игнорируется, и все доступные данные из TCP-окна копируются в предоставленный пользователем буфер. Правило проверяет, превышает ли полезная нагрузка 1500 байт.
Скрипт проверяет CVE-2019-12256. Проверяемый пакет содержит две опции LSRR или SSRR в IP-пакете. Опции LSRR можно распознать по шестнадцатеричному значению 0x83, опцию SSRR — по значению 0x89. Эксплойт состоит из недопустимых значений: длина меньше длины, обычно используемой при определении маршрута (минимум 4 байта), и в пакете, отправляемом на сервер, это встречается дважды. Следующие IP-опции вызовут переполнение стека при использовании недопустимых опций LSRR:
| Тип LSRR | Длина | Указатель LSRR | Тип LSRR | Длина | Указатель LSRR |
|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
Следующие IP-опции вызовут переполнение стека при использовании недопустимых опций SSRR:
| Тип SSRR | Длина | Указатель SSRR | Тип SSRR | Длина | Указатель SSRR |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
Скрипт проверяет CVE-2019-12258. Соответствующие пакеты помечены комментарием в PCAP. Первое срабатывание проверяется при наличии двух опций window scale: одной недействительной и одной действительной. Второй случай — это невооружённый вариант DoS, содержащий одну недействительную опцию window scale.
Опция Window Scale имеет значение 03, указывающее на использование этой опции; это значение расположено по заданному смещению 57 в TCP-пакете. Для срабатывания эксплойта значение должно быть равно 2 (недействительное); это значение находится по смещению 58. Значения проверяются, и в этом случае возвращается 1 (совпадение).
Скрипт проверяет CVE-2019-12260. Проверяемый пакет представляет собой повреждённый SYN-пакет, содержащий поле опции TCP-AO с байтовым значением <= 3 байт. Опция TCP-AO может быть задана шестнадцатеричным значением 0x29, как указано в RFC: https://tools.ietf.org/html/rfc5925#page-7
Эксплойт основан на повреждении опции TCP-AO путём установки её в значение, меньшее или равное 3 байтам. Это можно проверить, убедившись, что шестнадцатеричное значение 0x29 установлено в качестве опции по смещению 56.