HTTPX2 — это HTTP-клиент нового поколения для Python. До версии 2.11.0 Request._prepare() в src/httpx2/httpx2/_models.py мог добавлять заголовок Content-Length, полученный из тела, к запросу, который уже содержит заголовок Transfer-Encoding, предоставленный вызывающей стороной, поскольку его обработка setdefault() проверяет каждый заголовок по умолчанию независимо, а не рассматривает два кадрирующих заголовка как взаимоисключающие. Таким образом, байты фиксированного размера, JSON, формы и составные тела известной длины могут быть сериализованы через HTTP/1.1 с обоими заголовками, что позволяет осуществлять контрабанду запросов или десинхронизацию соединения, когда нижестоящие посредники не согласны с тем, какой заголовок кадра имеет приоритет.
Эта проблема исправлена в версии 2.11.0.
Показать оригинальное описание (EN)
HTTPX2 is a next generation HTTP client for Python. Prior to 2.11.0, Request._prepare() in src/httpx2/httpx2/_models.py can add a body-derived Content-Length header to a request that already contains a caller-supplied Transfer-Encoding header because its setdefault() processing checks each default header independently rather than treating the two framing headers as mutually exclusive. Fixed-size byte, JSON, form, and known-length multipart bodies can therefore be serialized over HTTP/1.1 with both headers, allowing request smuggling or connection desynchronization when downstream intermediaries disagree about which framing header takes precedence. This issue is fixed in version 2.11.0.
Характеристики атаки
Последствия
Строка CVSS v3.1