Pesquisadores da Netflix e do Google Existem oito vulnerabilidades em diversas implementações do protocolo HTTP/2 que permitem causar uma negação de serviço através do envio de um fluxo de requisições de rede especialmente criado. Esses problemas afetam a maioria dos servidores HTTP com suporte a HTTP/2 em diferentes graus e resultam no esgotamento da memória disponível para o processo de trabalho ou em sobrecarga da CPU. Atualizações para corrigir essas vulnerabilidades já foram lançadas. и Mas para agora para Apache httpd e .
Os problemas surgiram de complicações introduzidas no protocolo HTTP/2, incluindo o uso de estruturas binárias, o sistema de limitação do fluxo de dados dentro das conexões, o mecanismo de priorização de fluxo e a presença de mensagens de controle semelhantes ao ICMP operando no nível da conexão HTTP/2 (por exemplo, operações de ping, reset e configuração de fluxo). Muitas implementações não limitavam adequadamente o fluxo de mensagens de controle, gerenciavam a fila de prioridade de forma ineficiente ao processar solicitações ou utilizavam implementações subótimas de algoritmos de controle de fluxo.
A maioria dos métodos de ataque identificados envolve o envio de solicitações específicas ao servidor, que geram um grande número de respostas. Se o cliente não lê os dados do socket e não fecha a conexão, a fila de buffer de respostas do servidor se enche continuamente. Esse comportamento sobrecarrega o sistema de gerenciamento de filas de conexão de rede e, dependendo da implementação, leva ao esgotamento da memória disponível ou dos recursos da CPU.
Vulnerabilidades identificadas:
- CVE-2019-9511 (Data Dribble) - Um atacante solicita uma grande quantidade de dados em várias threads, manipulando o tamanho da janela deslizante e a prioridade da thread, forçando o servidor a enfileirar dados em blocos de 1 byte;
- CVE-2019-9512 (Ataque de Inundação de Ping) - Um atacante envenena continuamente mensagens de ping em uma conexão HTTP/2, fazendo com que a fila interna de respostas enviadas do outro lado se encha;
- CVE-2019-9513 (Loop de Recursos) - Um atacante cria várias threads de requisição e altera continuamente a prioridade das threads, fazendo com que a árvore de prioridades fique desordenada.
- CVE-2019-9514 (Inundação de reinicialização) – O atacante cria várias threads.
e envia uma solicitação inválida por meio de cada thread, fazendo com que o servidor envie quadros RST_STREAM, mas não os aceite para preencher a fila de resposta; - CVE-2019-9515 (Inundação de Configurações) - um atacante envia um fluxo de quadros "SETTINGS" vazios, em resposta aos quais o servidor é obrigado a confirmar o recebimento de cada solicitação;
- CVE-2019-9516 (Vazamento de cabeçalhos de comprimento zero) - Um atacante envia um fluxo de cabeçalhos com nome e valor zero, e o servidor aloca um buffer na memória para armazenar cada cabeçalho e não o libera até o final da sessão;
- CVE-2019-9517 (Buffer de dados interno) - O atacante abre
O HTTP/2 usa uma janela deslizante para permitir que o servidor envie dados ilimitados, mas também mantém a janela TCP fechada, impedindo que os dados sejam efetivamente gravados no socket. O atacante então envia solicitações que exigem uma resposta grande; - CVE-2019-9518 (Inundação de Quadros Vazios) – Um atacante envia um fluxo de quadros dos tipos DATA, HEADERS, CONTINUATION ou PUSH_PROMISE, mas com uma carga útil vazia e sem o sinalizador de término do fluxo. O servidor gasta um tempo de processamento de cada quadro desproporcional ao consumo de largura de banda do atacante.
Fonte: opennet.ru
