
PoC для CVE-2023-45288, уязвимость типа continuation flood
Это PoC-код для уязвимости CONTINUATION flood, обнаруженной и задокументированной Бартеком Новотарским. Технические детали очень хорошо описаны в его сообщении в блоге здесь. Хотя мой основной интерес был направлен на ошибку в Go, как описано исследователем, этот код может быть полезен при тестировании других CVE, связанных с этой проблемой.
Этот код частично вдохновлён:
Моей первоначальной целью было детально разобраться в уязвимости, а также разработать инструмент для тестирования этой проблемы на работе. Это также очень помогло при детальном изучении внутреннего устройства http2. Другие полезные источники:
Вы можете запустить прилагаемый файл server.go, который работает на уязвимой версии golang.org/x/net (0.20.0).
$ go run server.go
Сервер работает на порту 8443, на который клиент указывает по умолчанию.
При запуске против уязвимых серверов клиент сможет продолжать отправлять CONTINUATION-кадры в течение времени, указанного вами в флаге wait в секундах. Сервер выводит загрузку ЦП каждые 2 секунды — вы увидите, как она быстро растёт во время работы клиента. В исправленных версиях (0.23.0 и выше) сервер закроет соединение, как только будет достигнут предел размера заголовков.
Запустите клиент, создающий 6 одновременных подключений, обращающийся к https://localhost:8443 и отправляющий CONTINUATION-кадры в течение 200 секунд для каждого подключения:
$ go run client.go -time-limit 200 -connections 6 -url https://localhost:8443