Понижение версии HTTP-2
Поскольку HTTP/2 всё ещё относительно новый, веб-серверам, поддерживающим его, часто приходится взаимодействовать с устаревшей бэкэнд-инфраструктурой, которая работает только на HTTP/1. В результате распространённой практикой стало то, что фронтенд-серверы переписывают каждый входящий запрос HTTP/2 в синтаксис HTTP/1, фактически формируя его эквивалент на HTTP/1. Затем этот «пониженный» запрос пересылается соответствующему бэкэнд-серверу.

Когда бэкэнд, говорящий на HTTP/1, формирует ответ, фронтенд-сервер выполняет обратное преобразование, генерируя ответ HTTP/2, который возвращается клиенту. Это работает потому, что каждая версия протокола по сути представляет собой иной способ представления одной и той же информации. У каждого элемента сообщения HTTP/1 есть приблизительный эквивалент в HTTP/2.

В результате серверам относительно просто конвертировать эти запросы и ответы между двумя протоколами. Собственно, именно так Burp может отображать сообщения HTTP/2 в редакторе сообщений с использованием синтаксиса HTTP/1.
Понижение версии HTTP/2 чрезвычайно распространено и даже является поведением по умолчанию для ряда популярных сервисов обратного проксирования. В некоторых случаях опции отключить его просто нет.
Какие риски связаны с понижением версии HTTP/2?
Понижение версии HTTP/2 может подвергать сайты атакам контрабанды запросов, даже несмотря на то, что сам HTTP/2 при сквозном использовании обычно считается невосприимчивым к ним.
Из-за встроенного механизма определения длины в HTTP/2 при использовании понижения версии потенциально возникают три разных способа указать длину одного и того же запроса, и именно на этом и основаны все атаки контрабанды запросов.
Last updated