
Scripts Suricata LUA para detectar CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 e CVE-2019-12260
Scripts LUA do Suricata para detectar CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 e CVE-2019-12260
O script verifica a CVE-2019-12255, o pacote verificado precisa ter as flags PSH, ACK e URG definidas, e ter um tamanho de payload que exceda 1500 bytes. Em seguida, verifica se o valor do ponteiro urgente está definido como 0, o que causará um underflow de inteiro em dispositivos vulneráveis.
O exploit baseia-se em causar underflow no ponteiro urgente, definindo-o como 0. A falha faz com que a restrição de comprimento no recv() do alvo seja ignorada, e copiará todos os dados disponíveis da janela TCP para o buffer fornecido pelo usuário. A regra verifica se o payload excede 1500 bytes.
O script verifica a CVE-2019-12256, o pacote verificado consiste em duas opções LSRR ou SSRR no pacote IP. As opções LSRR podem ser reconhecidas pelo valor hexadecimal 0x83, a opção SSRR pelo valor hexadecimal 0x89, o exploit consiste em valores inválidos, o comprimento é menor do que o comprimento normalmente usado ao definir uma rota (mínimo de 4 bytes), isso está presente duas vezes no pacote enviado ao servidor. As seguintes opções IP acionarão um estouro de pilha com opções LSRR inválidas:
| Type LSRR | Length | LSRR-Pointer | Type LSRR | Length | LSRR-Pointer |
|---|---|---|---|---|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
As seguintes opções IP acionarão um estouro de pilha com opções SSRR inválidas:
| Type SSRR | Length | SSRR-Pointer | Type SSRR | Length | SSRR-Pointer |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
O script verifica a CVE-2019-12258, os pacotes envolvidos são marcados com um comentário no PCAP. A primeira detecção é verificada com 2 opções de janela de escala, 1 inválida e 1 válida. Na segunda vez, é a variante DoS não armada que contém 1 opção de janela de escala inválida.
A opção de Janela de Escala tem valor 03 para indicar que esta opção está sendo usada, isso está em um offset fixo de 57 no pacote TCP. O exploit deve ter valor 2 (inválido) para que este exploit seja acionado, esse valor está localizado no offset 58. Os valores são verificados, retornando 1 (correspondência) se for o caso.
O script verifica a CVE-2019-12260, o pacote verificado consiste em um pacote SYN malformado, este pacote contém um campo de opção TCP-AO com um valor de byte de <= 3 bytes. A opção TCP-AO pode ser definida com o valor hexadecimal 0x29, conforme RFC: https://tools.ietf.org/html/rfc5925#page-7
O exploit baseia-se em malformar a opção TCP-AO, definindo-a para qualquer coisa menor ou igual a 3 bytes. Isso pode ser verificado verificando se o valor hexadecimal 0x29 está definido como uma opção no offset 56.