
PoC para CVE-2023-45288, vulnerabilidade de flood de continuação
Este é um código de prova de conceito para a vulnerabilidade de inundação CONTINUATION encontrada e documentada por Bartek Nowotarski. Os detalhes técnicos estão muito bem documentados na postagem do blog dele aqui. Embora meu foco tenha sido no bug do Go conforme documentado pelo pesquisador, este código deve ser útil para testar outros CVEs relacionados a este problema.
Este código se inspira em:
Meu objetivo inicial foi entender a vulnerabilidade em detalhes, além de desenvolver uma ferramenta para testar esse problema no trabalho. Isso também foi muito útil ao trabalhar no entendimento do funcionamento interno do http2 em detalhes. Outras fontes que foram úteis incluem:
Você pode executar o arquivo server.go incluído, que roda em uma versão vulnerável do golang.org/x/net (0.20.0).
$ go run server.go
O servidor roda na porta 8443, para onde o cliente aponta por padrão.
Quando executado contra servidores vulneráveis, o cliente será capaz de continuar enviando frames CONTINUATION pelo tempo que você especificar para a flag wait em segundos. O servidor imprime seu uso de CPU a cada 2 segundos, que você verá aumentar rapidamente enquanto o cliente executa. Em versões corrigidas (0.23.0 e superiores), o servidor fechará a conexão assim que o limite de tamanho do cabeçalho for atingido.
Execute o cliente, criando 6 conexões concorrentes, chamando https://localhost:8443, e enviando frames de continuação por 200 segundos para cada conexão:
$ go run client.go -time-limit 200 -connections 6 -url https://localhost:8443