HTTP-сад
HTTP Garden — это набор HTTP-серверов и прокси-серверов, настроенных для компоновки, а также скриптов для взаимодействия с ними таким образом, чтобы значительно упростить поиск уязвимостей. Несколько интересных демонстраций уязвимостей, которые можно найти в HTTP Garden, можно найти в нашем докладе на ShmooCon 2024.
Благодарности
Мы хотели бы поблагодарить наших друзей из Galois, Trail of Bits, Narf Industries и Дартмутского колледжа за то, что они сделали этот проект возможным.
Этот материал основан на работе, поддержанной Агентством перспективных исследовательских проектов Министерства обороны (DARPA) по контракту номер HR0011-19-C-0076.
Начиная
Зависимости
- HTTP Garden работает на Linux x86_64 и не тестировался на других платформах.
- Целевые серверы создаются и работают в контейнерах Docker, поэтому вам понадобится Docker.
- Вам также понадобятся следующие пакеты Python, которые вы можете получить из PyPI (т. е. с помощью
pip
) или из менеджера пакетов вашей системы:
-
docker
- Для взаимодействия с Docker
-
pyyaml
-
tqdm
- Для индикаторов выполнения
Если вы устанавливаете пакеты Python с помощью системного менеджера пакетов, имейте в виду, что имена пакетов могут иметь префикс py3-
, python3-
или python-
, в зависимости от системы.
- Я также настоятельно рекомендую установить rlwrap из вашего менеджера пакетов, потому что это делает Garden repl намного интереснее.
Здание
- Создайте базовое изображение:
docker build ./images/http-garden-soil -t http-garden-soil
Этот образ содержит несколько основных утилит, а также разветвленную версию AFL++, которая упрощает сбор данных о процессах, не убивая их.
- Создайте несколько HTTP-серверов и прокси:
docker compose build gunicorn hyper nginx haproxy nginx_proxy
Конечно, в HTTP-саде гораздо больше целей, чем те, которые мы только что создали. Просто создание их всех занимает много времени. Даже создание этих немногих займет несколько минут!
Бег
- Запустите несколько серверов и прокси:
docker compose up gunicorn hyper nginx haproxy nginx_proxy
rlwrap python3 tools/repl.py
- Отфильтруйте базовый запрос GET через HAProxy, затем через обратный прокси-сервер Nginx, затем отправьте результат на исходные серверы Gunicorn, Hyper и Nginx и отобразите, совпадают ли их интерпретации:
garden> payload 'GET / HTTP/1.1rnHost: whateverrnrn' # Set the payload
garden> transduce haproxy nginx_proxy # Run the payload through the reverse proxies
[1]: 'GET / HTTP/1.1rnHost: whateverrnrn'
haproxy
[2]: 'GET / HTTP/1.1rnhost: whateverrnrn'
nginx_proxy
[3]: 'GET / HTTP/1.1rnHost: echornConnection: closernrn'
garden> servers gunicorn hyper nginx # Select the servers
garden> grid # Show their interpretations
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ ✓
hyper | ✓ ✓
nginx | ✓
Кажется, они все согласны. Давайте попробуем более интересную полезную нагрузку:
garden> payload 'POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0nrn'
garden> grid
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ X
hyper | ✓ X
nginx | ✓
Есть несоответствие! Это связано с тем, что Nginx поддерживает n
как строку, заканчивающуюся строками фрагментов, а Hyper и Gunicorn — нет. Технически Nginx нарушает RFC 9112, но влияние, скорее всего, минимально.
Макет каталога
images
Каталог images
содержит подкаталог для каждого HTTP-сервера и преобразователя в Garden. Каждая цель получает свой собственный образ Docker. Все программы по возможности собираются из исходного кода. Чтобы мы могли легко создавать несколько версий каждой цели, все цели парметризуются с помощью URL-адреса репозитория ( APP_REPO
), имени ветки ( APP_BRANCH
) и хеша фиксации ( APP_VERSION
).
tools
Каталог tools
содержит скрипты, используемые для взаимодействия с серверами. Внутри него вы найдете
-
diagnose_anomalies.py
: сценарий для перечисления неопасных особенностей парсинга HTTP в тестируемых системах, которые следует игнорировать во время фаззинга. -
repl.py
: основной пользовательский интерфейс HTTP Garden. -
update.py
: скрипт, который обновляет хеши коммитов в docker-compose.yml
, - ... и еще несколько сценариев, не ориентированных на пользователя.
Цели
HTTP-серверы
Имя | Запускается локально? | Страховое покрытие получено? |
---|
айоhttp | да | да |
apache_httpd | да | да |
apache_tomcat | да | нет |
сигара | да | да |
cpp_httplib | да | нет |
dart_stdlib | да | нет |
eclipse_grizzly | да | нет |
eclipse_jetty | да | нет |
быстрыйhttp | да | нет |
go_stdlib | да | нет |
пушка | да | да |
вода | да | да |
haproxy_fcgi | да | нет |
гипер | да | нет |
гиперкорн | да | да |
ктотор | да | нет |
libevent | да | нет |
libmicrohttpd | да | нет |
библиотека | да | нет |
лайттпд | да | да |
мангуста | да | да |
Нетти | да | нет |
nginx | да | да |
node_stdlib | да | нет |
openliteскорость | да | нет |
openwrt_uhttpd | да | да |
php_stdlib | да | нет |
phusion_passenger | да | нет |
протокол_http1 | да | нет |
пума | да | нет |
служебный разговор | да | нет |
торнадо | да | нет |
искривленный | да | нет |
единорог | да | нет |
Ювирог | да | да |
официантка | да | да |
Вебрик | да | нет |
иис | нет | нет |
openbsd_httpd | нет | нет |
HTTP-преобразователи
Имя | Запускается локально? |
---|
apache_httpd_proxy | да |
apache_traffic_server | да |
go_stdlib_proxy | да |
h2o_proxy | да |
гапрокси | да |
haproxy_invalid | да |
Lighttpd_proxy | да |
нгhttpx | да |
nginx_proxy | да |
openlitespeed_proxy | да |
пингора | да |
фунт | да |
кальмар | да |
лак | да |
акамай | нет |
awselb_classic | нет |
awselb_application | нет |
aws_cloudfront | нет |
вспышка облака | нет |
быстро | нет |
google_classic | нет |
google_global | нет |
iis_proxy | нет |
openbsd_relayd | нет |
Ошибки
Это ошибки, которые мы обнаружили с помощью HTTP Garden. Если вы найдете что-то свое, отправьте PR, чтобы добавить их в этот список! Каждая ошибка описывается следующими полями:
- Вариант использования: тип атаки, которую злоумышленник может выполнить с помощью этой ошибки.
- Требования: необходимые параметры конфигурации или другие серверы для использования этой ошибки.
- Риск: Нет|Низкий|Средний|Высокий, после чего следует краткое объяснение.
- Нет: ошибка, скорее всего, не может быть использована.
- Низкий: ошибку можно использовать, но она требует действительно странной конфигурации или будет зависеть от поведения прокси-сервера, которого я никогда не видел.
- Средний: ошибка, вероятно, пригодна для использования, но оказывает лишь умеренное влияние или требует маловероятной комбинации сервера и преобразователя.
- Высокий: ошибка может быть использована в обычных конфигурациях и комбинациях сервер/преобразователь.
- Полезная нагрузка: пример полезной нагрузки, вызывающей ошибку.
- Затронутые программы: список серверов, на которых присутствует эта ошибка, а также сроки отчетов и исправлений. Так как некоторые ошибки реализации являются общими, и это не позволяет им загромождать список :)
Ошибки сервера
Это ошибки в том, как серверы принимают и интерпретируют запросы.
- Конструктор Python
int
используется для анализа размеров фрагментов, поэтому 0x
, _
, +
и -
интерпретируются неправильно.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который интерпретирует размеры фрагментов как самый длинный действительный префикс, но пересылает их как есть.
- Риск: Средний. См. ошибку преобразователя 7.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- Затронутые программы:
- АИОНТП:
- 1 августа 2023 г.: сообщается в рекомендациях по безопасности GH.
- 7 октября 2023 г.: исправлено в версии 3.8.6.
- Ганикорн:
- 1 августа 2023 г.: сообщается в выпуске GH.
- 25 декабря 2023 г.: исправлено в коммите.
- Торнадо:
- 2 августа 2023 г.: сообщается в рекомендациях по безопасности GH.
- 10 августа 2023 г.: исправлено в коммите.
-
x00
, r
или n
неправильно разрешены в значениях заголовка.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает эти байты в значениях заголовка или принимает и пересылает
n
в качестве признака конца строки заголовка. - Риск: высокий. См. ошибки преобразователя 10, 12 и 16.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnHeader: vnx00raluernrn
- Затронутые программы:
- АИОНТП:
- 1 августа 2023 г.: сообщается в рекомендациях по безопасности GH.
- 7 октября 2023 г.: исправлено в версии 3.8.6.
- Ганикорн:
- 31 января 2024 г.: сообщается в выпуске GH.
- 31 января 2024 г.: осталось не исправленным.
- Торнадо:
- 11 августа 2023 г.: сообщается в выпуске GH.
- 31 января 2024 г.: осталось не исправленным.
- Пробелы неправильно удаляются с концов имен заголовков.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который считает пробелы перед
:
частью имени заголовка. - Риск: Низкий. Мне неизвестны какие-либо уязвимые датчики, но Джеймс Кеттл говорит, что по крайней мере один существует.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnContent-Length : 34rnrnGET / HTTP/1.1rnHost: whateverrnrn
- Затронутые программы:
- АИОНТП:
- 2 августа 2023 г.: сообщается в рекомендациях по безопасности GH.
- 7 октября 2023 г.: исправлено в версии 3.8.6.
- Черут:
- 4 февраля 2024 г.: сообщается в выпуске GH.
- 4 февраля 2024 г.: осталось не исправленным.
- OpenLiteСкорость:
- 31 июля 2023 г.: Сообщено по электронной почте.
- 10 августа 2023 г.: исправлено в OLS 1.7.18.
- 14 августа 2023 г.: присвоен CVE-2023-40518.
- Пробелы неправильно удаляются из начала первого имени заголовка.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который считает пробелы в начале имени первого заголовка частью имени заголовка.
- Риск: Низкий. Мне не известны какие-либо уязвимые датчики.
- Полезная нагрузка:
GET / HTTP/1.1rntContent-Length: 1rnrnX
- Затронутые программы:
- АИОНТП:
- 20 августа 2023 г.: сообщается в консультативном комментарии по безопасности GH.
- 7 октября 2023 г.: исправлено в версии 3.8.6.
- Версии HTTP интерпретируются как самый длинный допустимый префикс.
- Вариант использования: ???
- Требования: нет данных
- Риск: Нет
- Полезная нагрузка:
GET /test HTTP/1.32rnrn
- Затронутые программы:
- АИОНТП:
- 14 октября 2023 г.: сообщается в выпуске GH и по связям с общественностью.
- 15 октября 2023 г.: исправлено в коммите.
- Методы HTTP интерпретируются как их самый длинный допустимый префикс.
- Вариант использования: обход ACL
- Требования: Преобразователь, который пересылает недопустимые имена методов как есть.
- Риск: Средний. Объяснение опущено, поскольку о соответствующих ошибках еще не сообщалось.
- Полезная нагрузка:
G=":<>(e),[T];?" /get HTTP/1.1rnrn
- Затронутые программы:
- АИОНТП:
- 14 октября 2023 г.: сообщается в выпуске GH и по связям с общественностью.
- 15 октября 2023 г.: исправлено в коммите.
- URI вообще не проверяются.
- Вариант использования: ???
- Требования: нет данных
- Риск: Нет
- Полезная нагрузка:
GET ! HTTP/1.1rnrn
- Затронутые программы:
- АИОНТП:
- 16 октября 2023 г.: сообщается в выпуске GH.
- 16 октября 2023 г.: Исправлено в PR.
- Некоторые байты, отличные от ASCII, неправильно разрешены в именах заголовков.
- Вариант использования: ???
- Требования: нет данных
- Риск: Нет
- Полезная нагрузка:
GET / HTTP/1.1rnxefoo: barrnrn
- Затронутые программы:
- АИОНТП:
- 17 октября 2023 г.: сообщается через PR.
- 18 октября 2023 г.: исправлено путем объединения вышеуказанного PR.
- Дафна:
- 4 февраля 2024 г.: сообщается в выпуске GH.
- 10 февраля 2024 г.: исправлено в коммите.
- Мангуста:
- 13 октября 2023 г.: сообщается в выпуске GH.
- 5 декабря 2023 г.: исправлено в коммите.
-
n
допускается использовать в качестве разделителя пробелов в строке запроса.
- Вариант использования: контрабанда запросов
- Требования: преобразователь, который пересылает запросы HTTP/0.9 с пустым
n
как есть и повторно использует базовое соединение. - Риск: Низкий. Мне не известны какие-либо уязвимые датчики.
- Полезная нагрузка:
GET /nHTTP/1.1rnrn
- Затронутые программы:
- АИОНТП:
- 17 октября 2023 г.: сообщается через PR.
- 18 октября 2023 г.: исправлено слиянием.
- Конструктор Python
int
используется для анализа значений Content-Length
, поэтому _
, +
и -
интерпретируются неправильно.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который интерпретирует значения
Content-Length
как самый длинный допустимый префикс, но пересылает их как есть. - Риск: Низкий. Мне неизвестны какие-либо уязвимые датчики, но Мэтт Гренфельдт говорит, что по крайней мере один существует.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnContent-Length: +1_0rnrn0123456789
- Затронутые программы:
- АИОНТП:
- 1 августа 2023 г.: сообщается в рекомендациях по безопасности GH.
- 7 октября 2023 г.: исправлено в версии 3.8.6.
- http.сервер CPython:
- 2 апреля 2023 г.: сообщается в выпуске GH.
- 2 апреля 2023 г.: исправлено в коммите.
- Торнадо:
- 2 августа 2023 г.: сообщается в рекомендациях по безопасности GH.
- 10 августа 2023 г.: исправлено в коммите.
- Веркцойг:
- 1 июня 2023 г.: сообщается в выпуске GH.
- 7 июня 2023 г.: исправлено в коммите 88c5c78.
- Запросы, содержащие несколько
Transfer-Encoding: chunked
принимаются и обрабатываются как не имеющие тела сообщения.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает запросы, содержащие несколько заголовков
Transfer-Encoding
. - Риск: высокий. См. ошибку преобразователя 28.
- Полезная нагрузка:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnTransfer-Encoding: chunkedrnrn1rnZrn0rnrn
- Затронутые программы:
- Торнадо:
- 7 октября 2023 г.: сообщается в рекомендациях по безопасности GH.
- 6 июня 2024 г.: исправлено в выпуске рекомендаций по безопасности.
-
xa0
и x85
удаляются из начала и конца значений заголовка.
- Вариант использования: контрабанда запросов
- Требования: преобразователь, который пересылает неизвестные значения
Transfer-Encoding
и обрабатывает их отдельно от chunked
значений. - Риск: Средний. См. ошибку преобразователя 18.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: xa0chunkedxa0rnrn0rnrn
- Затронутые программы:
- Торнадо:
- 4 февраля 2024 г.: сообщается в консультативном комментарии по безопасности GH.
- 4 февраля 2024 г.: осталось не исправленным.
-
r
рассматривается как признак конца строки в строках поля заголовка.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает
r
в именах заголовков. - Риск: высокий. См. ошибку преобразователя 10.
- Полезная нагрузка:
GET / HTTP/1.1rnVisible: :/rSmuggled: :)rnrn
- Затронутые программы:
- http.сервер CPython:
- 31 января 2024 г.: сообщается в выпуске GH.
- 31 января 2024 г.: осталось не исправленным.
- Мангуста:
- 7 июля 2023 г.: сообщается в выпуске GH.
- 9 июля 2023 г.: исправлено в коммите 6957c37.
- Недопустимые символы ASCII неправильно разрешены в именах заголовков.
- Вариант использования: ???
- Требования: нет данных
- Риск: Нет
- Полезная нагрузка:
GET / HTTP/1.1rnx00x01x02x03x04x05x06x07x08tx0bx0cx0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f "(),/;<=>?@[/]{}: whateverrnrn
- Затронутые программы:
- Дафна:
- 4 февраля 2024 г.: сообщается в выпуске GH.
- 10 февраля 2024 г.: исправлено в коммите.
- Мангуста:
- 13 октября 2023 г.: сообщается в выпуске GH.
- 5 декабря 2023 г.: исправлено в коммите.
- Торнадо:
- 11 августа 2023 г.: сообщается в выпуске GH.
- 31 января 2024 г.: осталось не исправленным. OpenLiteСкорость:
- 31 июля 2023 г.: Сообщено по электронной почте.
- 10 августа 2023 г.: исправлено в OLS 1.7.18.
- Версии HTTP не проверяются.
- Вариант использования: ???
- Требования: нет данных
- Риск: Нет
- Полезная нагрузка:
GET / HTTP/rr1.1rnrn
- Затронутые программы:
- ФастHTTP:
- 4 февраля 2024 г.: сообщается в выпуске GH.
- 11 февраля 2024 г.: исправлено в коммите.
- Пустые значения
Content-Length
обрабатываются так, как если бы они были равны 0
.
- Вариант использования: контрабанда запросов
- Требования: преобразователь, который интерпретирует пустые значения
Content-Length
как любые, отличные от 0. - Риск: Низкий. Я не знаю ни одного такого преобразователя.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnContent-Length: rnrn
- Затронутые программы:
- Зайдите в сеть/http:
- 31 июля 2023 г.: сообщается в выпуске GH.
- 11 августа 2023 г.: исправлено в коммите.
- Лайтпд:
- 1 августа 2023 г.: сообщается через систему отслеживания ошибок.
- 3 августа 2023 г.: исправлено в коммите.
- OpenLiteСкорость:
- 31 июля 2023 г.: Сообщено по электронной почте.
- 10 августа 2023 г.: исправлено в OLS 1.7.18.
- Пустые размеры блоков обрабатываются так, как если бы они были равны
0
.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который принимает и пересылает дополнительные
rn
между фрагментами. - Риск: Низкий. Я не знаю ни одного такого преобразователя.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnrnrn
- Затронутые программы:
- Зайдите в сеть/http:
- 2 декабря 2023 г.: сообщается в выпуске GH.
- 4 января 2024 г.: исправлено в коммите.
- Гипер:
- 1 декабря 2023 г.: сообщение отправлено по электронной почте.
- 18 декабря 2023 г.: исправлено в коммите.
- Мангуста:
- 3 января 2024 г.: сообщается в выпуске GH.
- 3 января 2024 г.: Исправлено в PR.
- Пустые имена заголовков принимаются ошибочно.
- Вариант использования: контрабанда запросов
- Требования: преобразователь, который принимает и пересылает
rn:rn
и рассматривает его как конец блока заголовка. - Риск: Низкий. Я не знаю ни одного такого преобразователя.
- Полезная нагрузка:
GET / HTTP/1.1rn: ignoredrnHost: whateverrnrn
- Затронутые программы:
- Зайдите в сеть/http:
- 24 января 2024 г.: сообщается в выпуске GH.
- 30 января 2024 г.: исправлено в коммите.
- Ганикорн:
- 4 декабря 2023 г.: сообщается в выпуске GH.
- 25 декабря 2023 г.: исправлено в коммите.
- Node.js:
- 13 октября 2023 г.: сообщается в выпуске GH.
- 17 октября 2023 г.: исправлено в коммите.
- Торнадо:
- 13 октября 2023 г.: Об этом сообщается в комментарии к выпуску GH.
- 15 октября 2023 г.: остается неисправленной.
- Все последовательности пробелов, отличные от
rn
удаляются с начала значений заголовка (после :
).
- Вариант использования: контрабанда запросов
- Требования: преобразователь, который принимает и пересылает окончания пустых строк
n
в строках поля. - Риск: Средний. См. ошибку преобразователя 16.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnUseless:nnGET / HTTP/1.1rnrn
- Затронутые программы:
- Ганикорн:
- 2 июня 2023 г.: Сообщено по электронной почте.
- 31 января 2024 г.: сообщается в выпуске GH.
- 31 января 2024 г.: осталось не исправленным.
- Байты
xa0
и x85
удаляются с концов имен заголовков перед :
.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который принимает и пересылает
xa0
или x85
в именах заголовков. - Риск: Средний. См. ошибку преобразователя 6.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnContent-Lengthx85: 10rnrn0123456789
- Затронутые программы:
- Ганикорн:
- 27 июня 2023 г.: Сообщено по электронной почте.
- 25 декабря 2023 г.: исправлено в коммите.
-
,chunked
рассматривается как кодировка, отличная от chunked
.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает значение
Transfer-Encoding
,chunked
как есть и интерпретирует его как эквивалент chunked
значения. - Риск: высокий. См. ошибку преобразователя 9.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- Затронутые программы:
- Ганикорн:
- 6 ноября 2023 г.: сообщается в выпуске GH.
- 25 декабря 2023 г.: исправлено в коммите.
- Мангуста:
- 6 ноября 2023 г.: сообщается в выпуске GH.
- 1 декабря 2023 г.: исправлено в коммите.
- Пассажир:
- 6 ноября 2023 г.: сообщение отправлено по электронной почте.
- 22 января 2024 г.: исправлено в выпуске.
- Недопустимые размеры фрагментов интерпретируются как их самый длинный действительный префикс.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который принимает и пересылает фрагменты с недопустимым префиксом (например, с префиксом
0x
). - Риск: высокий. См. ошибки преобразователя 2 и 19.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- Затронутые программы:
- Н2О:
- 1 августа 2023 г.: Сообщено по электронной почте.
- 12 декабря 2023 г.: Исправлено в PR.
- OpenLiteСкорость:
- 31 июля 2023 г.: Сообщено по электронной почте.
- 10 августа 2023 г.: исправлено в OLS 1.7.18.
- ВЕБрик:
- 9 ноября 2023 г.: сообщается в выпуске GH.
- 3 февраля 2024 г.: Исправлено в PR.
- Запросы с несколькими конфликтующими заголовками
Content-Length
принимаются, приоритет отдается первому.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который принимает и пересылает запросы с двумя заголовками
Content-Length
, отдавая приоритет последнему. - Риск: Средний. См. ошибку преобразователя 22.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnContent-Length: 1rnContent-Length: 0rnrnZ
- Затронутые программы:
- Н2О:
- 30 ноября 2023 г.: Сообщено по электронной почте.
- 10 июля 2024 г.: сообщается в выпуске GH.
- 10 июля 2024 г.: остается неисправленной.
- OpenLiteСкорость:
- 26 июня 2024 г.: сообщается в выпуске GH.
- 10 июля 2024 г.: остается неисправленной.
- Переполнение 8-битного целого числа в номерах версий HTTP.
- Вариант использования: ???
- Требования: нет данных
- Риск: Нет
- Полезная нагрузка:
GET / HTTP/4294967295.255rnrn
- Затронутые программы:
- Либевент:
- 17 января 2024 г.: подан PR.
- 18 января 2024 г.: исправлено слияние.
- Размеры фрагментов анализируются с помощью
strtoll(,,16)
, поэтому префиксы 0x
, +
и -
принимаются ошибочно.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который интерпретирует размеры фрагментов как самый длинный допустимый префикс, но пересылает их как есть.
- Риск: Средний. См. ошибку преобразователя 2.
- Полезная нагрузка:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn
- Затронутые программы:
- Либевент:
- 18 января 2024 г.: подан PR.
- 18 февраля 2024 г.: исправлено слияние.
- OpenLiteСкорость:
- 2 августа 2023 г.: Сообщено по электронной почте.
- 11 августа 2023 г.: исправлено в OLS 1.7.18.
- Отрицательные заголовки
Content-Length
могут использоваться для включения сервера в бесконечный цикл занятости.
- Вариант использования: DoS
- Требования: Нет.
- Риск: высокий. Эту ошибку легко использовать.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnContent-Length: -48rnrn
- Затронутые программы:
- Мангуста:
- 27 апреля 2023 г.: Сообщено по электронной почте.
- 16–18 мая 2023 г.: исправлено в коммитах 4663090, 926959a и 2669991.
- Присвоен CVE-2023-34188.
- Блок заголовка HTTP усекается при получении заголовка без имени или значения.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает пустые имена заголовков.
- Риск: Средний. См. бонус-бонусную ошибку 2.
- Полезная нагрузка:
GET / HTTP/1.1rn:rnI: am chopped offrnrn
- Затронутые программы:
- Мангуста:
- 26 июня 2023 г.: сообщается в выпуске GH.
- 29 июня 2023 г.: исправлено в коммите 415bbf2.
- Имена заголовков могут быть отделены от значений только пробелом; нет
:
требуется.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает строки заголовка, которые не содержат
:
. - Риск: Средний. См. ошибку преобразователя 14.
- Полезная нагрузка:
GET / HTTP/1.1rnContent-Length 10rnrn0123456789
- Затронутые программы:
- Мангуста:
- 7 июля 2023 г.: сообщается в выпуске GH.
- 7 июля 2023 г.: исправлено в коммите 5dff282.
- Недопустимые заголовки
Content-Length
интерпретируются как эквиваленты их самого длинного допустимого префикса.
- Вариант использования: контрабанда запросов
- Требования: преобразователь, который пересылает значения
Content-Length
с недопустимыми префиксами (например, 0x
или +
). - Риск: высокий. См. ошибку преобразователя 1.
- Полезная нагрузка:
GET / HTTP/1.1rnContent-Length: 1ZrnrnZ
- Затронутые программы:
- Мангуста:
- 31 июля 2023 г.: сообщается в выпуске GH.
- 17 августа 2023 г.: исправлено в коммите.
- OpenLiteСкорость:
- 31 июля 2023 г.: Сообщено по электронной почте.
- 10 августа 2023 г.: исправлено в OLS 1.7.18.
- Блок заголовка может быть неправильно завершен на
rnrX
, где X
может быть любым байтом.
- Вариант использования: ???
- Требования: Преобразователь, который пересылает имена заголовков, начинающиеся с
r
, или допускает r
в качестве пробела в начале строки. - Риск: Низкий. Я не знаю такого преобразователя.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnrZGET /evil: HTTP/1.1rnHost: arnrn
- Затронутые программы:
- Node.js:
- 7 июля 2023 г.: сообщается в отчете HackerOne.
- 31 июля 2023 г.: исправлено в коммите llhttp.
- 16 сентября 2023 г.: исправлено в фиксации узла.
- Строки фрагментов неправильно завершаются на
rX
, где X
может быть любым байтом.
- Вариант использования: запрос на контрабанду.
- Требования: преобразователь, который пересылает
r
внутри необязательных пробелов в фрагменте-ext. - Риск: высокий. См. ошибку преобразователя 3.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn5rr;ABCDrn34rnErn0rnrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- Затронутые программы:
- Node.js:
- 9 июля 2023 г.: сообщается в комментарии HackerOne.
- 31 июля 2023 г.: исправлено в коммите llhttp.
- 16 сентября 2023 г.: исправлено в фиксации узла.
- Заголовки
Content-Length
интерпретируются с помощью strtoll(,,0)
, поэтому ведущие 0
, +
, -
и 0x
интерпретируются неправильно.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает начальные
0
с в значениях Content-Length
, что разрешено стандартом. - Риск: высокий. Это можно использовать против преобразователей, соответствующих стандартам.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnContent-Length: 010rnrn01234567
- Затронутые программы:
- OpenLiteСкорость:
- 31 июля 2023 г.: Сообщено по электронной почте.
- 10 августа 2023 г.: исправлено в OLS 1.7.18.
- Запросы с несколькими конфликтующими заголовками
Content-Length
принимаются, приоритет отдается последнему.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который принимает и пересылает запросы с двумя заголовками
Content-Length
, отдавая приоритет первому. - Риск: Низкий. Мне не известен ни один такой преобразователь, но его существование кажется весьма вероятным.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 1rnrnZ
- Затронутые программы:
- ФастHTTP:
- 4 февраля 2024 г.: сообщение отправлено по электронной почте.
- 11 февраля 2024 г.: исправлено в коммите.
-
r
разрешен в значениях заголовков.
- Вариант использования: ???
- Требования: Преобразователь, который неправильно интерпретирует и пересылает
r
в значениях заголовка. - Риск: Низкий. Я не знаю ни одного такого преобразователя.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnHeader: varluernrn
- Затронутые программы:
- OpenLiteСкорость:
- 31 июля 2023 г.: Сообщено по электронной почте.
- 10 августа 2023 г.: исправлено в OLS 1.7.18.
- Значения заголовка обрезаются до
x00
.
- Вариант использования: обход ACL
- Требования: преобразователь, который пересылает
x00
в значениях заголовка. - Риск: Средний. См. ошибку преобразователя 12.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnTest: testx00THESE BYTES GET DROPPEDrnConnection: closernrn
- Затронутые программы:
- OpenLiteСкорость:
- 3 ноября 2023 г.: Сообщено по электронной почте.
- 10 июля 2024 г.: исправлено не позднее этой даты.
- Либевент:
- 29 января 2024 г.: сообщается в рекомендациях по безопасности GH.
- 31 января 2024 г.: осталось не исправленным.
- Возврат каретки пересылается внутри необязательного пробела после точки с запятой в расширении фрагмента.
- Вариант использования: контрабанда запросов
- Требования: Сервер, который рассматривает
rr
как эквивалент rn
в этом расположении. - Риск: высокий. См. ошибку сервера 31.
- Полезная нагрузка:
POST /abc HTTP/1.1rnTransfer-Encoding: chunkedrnHost: h2o.http-garden.usrnrn41;a=brrXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXrn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 412rnrn0rnrnGET /def HTTP/1.1rnHost: h2o.http-garden.usrnrn
- Затронутые программы:
- Акамай CDN:
- 3 декабря 2023 г.: Сообщено по электронной почте.
- 10 июля 2024 г.: исправлено не позднее этой даты.
- Имена заголовков могут продолжаться на протяжении всей строки.
- Вариант использования: запрос на контрабанду.
- Требования: Преобразователь, который пересылает строки заголовка, которые не содержат
:
. - Риск: Средний. См. ошибку преобразователя 14.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: whateverrnTransfer-rnEncoding: chunkedrnContent-Length: 5rnrn0rnrn
- Затронутые программы:
- Пассажир:
- 6 ноября 2023 г.: сообщение отправлено по электронной почте.
- 22 января 2024 г.: исправлено в выпуске.
- Пустой
Content-Length
в запросах интерпретируется как «чтение до истечения времени ожидания».
- Вариант использования: контрабанда запросов
- Требования: преобразователь, который принимает и пересылает пустые значения заголовка
Content-Length
и обрабатывает их как эквивалентные 0. - Риск: Средний. См. ошибки преобразователя 5 и 11.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: localhostrnContent-Length: rnrnGET / HTTP/1.1rnHost: localhostrnrn
- Затронутые программы:
- Пума:
- 16 июня 2023 г.: сообщение отправлено по электронной почте.
- 17 августа 2023 г.: исправлено в Puma 6.3.1 и 5.6.7. См. рекомендацию.
- Частичные тела сообщений завершаются на
rnXX
, где XX
могут быть любыми двумя байтами.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который сохраняет поля концевика и не добавляет пробелы между
:
и значением в полях трейлера. (ATS — один из таких серверов) - Риск: высокий. Требования по использованию этой ошибки не требуют от преобразователя нарушения стандартов.
- Полезная нагрузка:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn0rnX:POST / HTTP/1.1rnrn
- Затронутые программы:
- Пума:
- 31 июля 2023 г.: Сообщено по электронной почте.
- 17 августа 2023 г.: исправлено в Puma 6.3.1 и 5.6.7. См. рекомендацию.
- Присвоен CVE-2023-40175.
- Методы и версии HTTP не проверяются.
- Вариант использования: ???
- Требования: нет данных
- Риск: Нет.
- Полезная нагрузка:
x00 / HTTP/............0596.7407.rnrn
- Затронутые программы:
- Официантка:
- 17 октября 2023 г.: подан PR.
- 4 февраля 2024 г.: исправлено в объединении PR.
-
xa0
и x85
удаляются из начала и конца значений заголовка, за исключением заголовка Transfer-Encoding
.
- Вариант использования: обход значения заголовка ACL
- Требования: Преобразователь, который принимает и пересылает
xa0
и x85
на место. - Риск: Средний. Стандарт позволяет преобразователям пересылать obs-текст в значениях заголовков.
- Полезная нагрузка:
GET /login HTTP/1.1rnHost: arnUser: x85adminxa0rnrn
- Затронутые программы:
- Официантка:
- 4 февраля 2024 г.: сообщается в выпуске GH.
- 4 февраля 2024 г.: исправлено в коммите.
- Пустые значения
Content-Length
интерпретируются как эквивалентные 0
и имеют приоритет над любыми последующими значениями Content-Length
.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает пустые значения
Content-Length
перед непустыми и интерпретирует непустые. - Риск: высокий. См. ошибку преобразователя 11.
- Полезная нагрузка:
GET / HTTP/1.1rnContent-Length: rnContent-Length: 43rnrnPOST /evil HTTP/1.1rnContent-Length: 18rnrnGET / HTTP/1.1rnrn
- Затронутые программы:
- ВЕБрик:
- 14 августа 2023 г.: сообщается в выпуске GH.
- 15 августа 2023 г.: Исправлено в PR.
-
x00
удаляется с концов значений заголовка.
- Вариант использования: обход ACL
- Требования: преобразователь, который пересылает
x00
в значениях заголовка. - Риск: Средний. См. ошибку преобразователя 12.
- Полезная нагрузка:
GET / HTTP/1.1rnEvil: evilx00rnrn
- Затронутые программы:
- ВЕБрик:
- 30 ноября 2023 г.: сообщается в выпуске GH.
- 3 февраля 2024 г.: Исправлено в PR.
- Все неизвестные кодировки передачи рассматриваются как эквивалентные
chunked
.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, который пересылает кодировки передачи, отличные от
identity
и chunked
. Это разрешено стандартом. - Риск: высокий. Это позволяет осуществлять контрабанду запросов на некоторые преобразователи, соответствующие стандартам.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: bleghrnrn1rnZrn0rnrn
- Затронутые программы:
- ФастHTTP:
- 4 февраля 2024 г.: сообщение отправлено по электронной почте.
- 11 февраля 2024 г.: исправлено в коммите.
- Соединения закрываются преждевременно, если недопустимый запрос передается в конвейер после действительного запроса.
- Вариант использования: ???
- Требования: Нет.
- Риск: Нет.
- Полезная нагрузка:
GET / HTTP/1.1rnConnection: closernrnInvalidrnrn
- Затронутые программы:
- Мангуста:
- 29 января 2024 г.: сообщается в выпуске GH.
- 13 февраля 2024 г.: исправлено в коммите.
- Ювикорн:
- 29 января 2024 г.: сообщается в комментариях к обсуждению GH.
- 6 февраля 2024 г.: случайно исправлено в фиксации.
- Байты, превышающие
x80
удаляются из начала и конца значений заголовка.
- Вариант использования: множество неприятностей.
- Требования: преобразователь, который пересылает заголовки хоста, содержащие байты больше
x80
. - Риск: Средний.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: xffaxffrnTransfer-Encoding: xffchunkedxffrnrn1rnZrn0rnrn
- Затронутые программы:
- Булочка:
- 13 февраля 2024 г.: сообщается в выпуске GH.
- 13 февраля 2024 г.: осталось не исправленным.
- При получении недопустимого фрагмента соединение не закрывается, а начало следующего сообщения помещается после первого
rn
следующего за недопустимым фрагментом.
- Вариант использования: отравление очереди ответов.
- Требования: Преобразователь, который пересылает недопустимые фрагменты.
- Риск: Средний.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnINVALID!!!rnGET / HTTP/1.1rnHost: whateverrnrn
- Затронутые программы:
- Черут:
- 14 февраля 2024 г.: сообщается в выпуске GH.
- 14 февраля 2024 г.: осталось не исправленным.
- Конвейерные запросы в исходном буфере запросов интерпретируются как тело сообщения первого запроса в буфере, даже если он имеет заголовок
Content-Length: 0
.
- Вариант использования: контрабанда запросов
- Требования: Преобразователь, не меняющий границ элементов входящего потока.
- Риск: Низкий. Я не знаю такого преобразователя
- Полезная нагрузка:
POST / HTTP/1.1rnContent-Length: 0rnConnection:keep-alivernHost: arnid: 0rnrnPOST / HTTP/1.1rnHost: arnid: 1rnContent-Length: 34rnrn
GET / HTTP/1.1rnHost: arnid: 2rnrn
- Затронутые программы:
- Пума:
- 2 февраля 2024 г.: сообщение отправлено по электронной почте.
- 2 февраля 2024 г.: исправлено в коммите.
Ошибки преобразователя
Это ошибки в том, как датчики интерпретируют, нормализуют и пересылают запросы.
- Значения
Content-Length
с префиксом 0x
неправильно принимаются и пересылаются без проверки тела сообщения.
- Вариант использования: контрабанда запросов
- Требования: Сервер, который либо интерпретирует
Content-Length
как самый длинный допустимый префикс, либо интерпретирует Content-Length
с префиксом 0x
. - Риск: Средний. См. ошибки серверов 10, 29 и 32.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnContent-Length: 0x10rnrnZ
- Затронутые программы:
- Акамай CDN:
- 7 сентября 2023 г.: Сообщено по электронной почте.
- 27 ноября 2023 г.: уведомление об исправлении отправлено по электронной почте.
- Неверные значения размера фрагмента неправильно принимаются и пересылаются.
- Вариант использования: контрабанда запросов
- Требования: внутренний сервер HTTP/1.1.
- Риск: высокий. Эту ошибку можно было использовать для перенаправления запросов на произвольные серверные части.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnTransfer-Encoding: chunkedrnrnZrnZZrnZZZrnrn
- Затронутые программы:
- Акамай CDN:
- 7 сентября 2023 г.: Сообщено по электронной почте.
- 27 ноября 2023 г.: уведомление об исправлении отправлено по электронной почте.
-
r
неправильно разрешен в пробелах chunk-ext перед ;
.
- Вариант использования: контрабанда запросов
- Требования: Сервер, который неправильно интерпретирует
r
в этом месте. - Риск: высокий. См. ошибку сервера 31.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: server.my-domain.coolrnTransfer-Encoding: chunkedrnrn2rr;arn02rn41rn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 430rnrn0rnrnGET / HTTP/1.1rnHost: server.my-domain.coolrnrn
- Затронутые программы:
- Акамай CDN:
- 7 сентября 2023 г.: Сообщено по электронной почте.
- 27 ноября 2023 г.: уведомление об исправлении отправлено по электронной почте.
- Сервер трафика Apache:
- 20 сентября 2023 г.: сообщается в выпуске GH.
- 13 февраля 2024 г.: Исправлено в PR.
- Балансировщик нагрузки приложений Google Cloud Classic:
- 13 сентября 2023 г.: сообщается через Google IssueTracker.
- 30 января 2024 г.: исправлено не позднее этой даты.
- Сообщения, содержащие недопустимые фрагменты, пересылаются без тела сообщения.
- Вариант использования: ???
- Требования: нет данных
- Риск: Нет.
- Полезная нагрузка:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1r0n
- Затронутые программы:
- Фунт:
- 13 июня 2024 г.: сообщается в выпуске GH.
- 14 июня 2024 г.: исправлено в коммите.
- Пустые заголовки
Content-Length
пересылаются неправильно.
- Вариант использования: контрабанда запросов
- Требования: сервер, который интерпретирует пустые значения
Content-Length
как любые, отличные от 0. - Риск: Средний. См. ошибку сервера 38.
- Полезная нагрузка:
GET / HTTP/1.1rnhost: whateverrncontent-length: rnrn
- Затронутые программы:
- Сервер трафика Apache:
- 2 августа 2023 г.: сообщается в выпуске GH.
- 6 августа 2023 г.: исправлено посредством PR.
- Запрещенные байты принимаются и пересылаются в именах заголовков.
- Вариант использования: контрабанда запросов
- Требования: Сервер, который неправильно интерпретирует эти недопустимые байты в именах заголовков.
- Риск: Средний. См. ошибку сервера 41.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: fanoutrnHeaderx85: valuernrn
- Затронутые программы:
- Сервер трафика Apache:
- 29 июня 2023 г.: Сообщено по электронной почте.
- 18 сентября 2023 г.: сообщается в выпуске GH.
- 31 января 2024 г.: осталось не исправленным.
- OpenBSD ретранслировал:
- 10 ноября 2023 г.: сообщение отправлено по электронной почте.
- 28 ноября 2023 г.: исправлено в коммите.
- Размер фрагмента интерпретируется как самый длинный допустимый префикс и пересылается.
- Вариант использования: контрабанда запросов
- Требования: Сервер, который интерпретирует префиксы
0_
или 0x
для размеров фрагментов. - Риск: высокий. См. Ошибки сервера 1 и 25, и ошибка Transducer 19.
- Полезная нагрузка:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1these-bytes-never-get-validatedrnZrn0rnrn
- Пострадавшие программы:
- Apache Traffic Server:
- 10 октября 2023 года. Сообщено через выпуск GH.
- 13 февраля 2024 года: исправлен в пир.
- Заполнитель :)
-
Transfer-Encoding: ,chunked
заголовки перенаправлены неповреждены и интерпретируются как эквивалентные для chunked
.
- В случае использования: запрос контрабанды
- Требования: Сервер, который игнорирует неизвестные
Transfer-Encoding
и угощается ,chunked
в отличие от chunked
. - Риск: высокий. Смотрите ошибку сервера 21.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: ,chunkedrnrn0rnrn
- Пострадавшие программы:
- Azure CDN:
- 15 октября 2023 года. Сообщается через отчет об уязвимости MSRC.
- 29 ноября 2023 года: исправлена или до этой даты.
- 12 декабря 2023 года: «Этот случай не соответствует бару для обслуживания MSRC, поскольку контрабанда HTTP не рассматривает уязвимость, и мы будем закрывать это дело».
- nghttpx:
- 14 октября 2023 года: сообщено по электронной почте.
- 17 октября 2023 года: исправлен в Pr.
-
r
неправильно пересылается в значениях заголовка.
- В случае использования: запрос контрабанды
- Требования: сервер, который рассматривает
r
как эквивалент rn
в поле заголовка. - Риск: средний. Смотрите ошибку сервера 13.
- Полезная нагрузка:
GET / HTTP/1.1rnInvalid-Header: thisrvaluerisrinvalidrnrn
- Google Cloud Cloud Classic Application Balancer Balancer:
- 7 сентября 2023 года. Сообщено через Google EssuTracker.
- 30 января 2024 года. Исправлена или до этой даты.
- Пустые заголовки
Content-Length
неверно пересылаются, даже в присутствии других заголовков Content-Length
, если на первом появлении заголовок пустой Content-Length
.
- В случае использования: запрос контрабанды
- Требования: сервер, который интерпретирует пустые значения
Content-Length
как 0 и принимает несколько заголовков Content-Length
в входящих запросах, приоритетных первого. - Риск: средний. Смотрите ошибку сервера 42.
- Полезная нагрузка:
GET / HTTP/1.1rnhost: whateverrncontent-length: rncontent-length: 59rnrnPOST /evil HTTP/1.1rnhost: whateverrncontent-length: 34rnrnGET / HTTP/1.1rnhost: whateverrnrn
- Пострадавшие программы:
- HAPROXY:
- 2 августа 2023 года. Сообщено через выпуск GH.
- 9 августа 2023 года: исправлено в коммите.
- 10 августа 2023 года: назначен CVE-2023-40225.
-
x00
пересылается в значениях заголовка.
- В случае использования: обход ACL
- Требования: сервер, который усекает значения заголовка на
x00
. - Риск: средний. См. Серверные ошибки 35 и 43, и ошибка Transducer 20.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: google.comx00.kallus.orgrnrn
- Пострадавшие программы:
- HAPROXY:
- 19 сентября 2023 года. Сообщено по электронной почте.
- 31 января 2024 года: исправлено в коммите.
- OpenLiteSpeed:
- 3 ноября 2023 года: сообщено по электронной почте.
- 10 июля 2024 года. Исправлена или до этой даты.
- Bare
n
принимается в качестве терминатора Chunk Line.
- Использование: ???
- Требования: n/a
- Риск: нет
- Полезная нагрузка:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrnarn0123456789n0rnrn
- Пострадавшие программы:
- HAPROXY:
- 25 января 2024 года. Сообщается по электронной почте.
- 30 января 2024 года: исправлено в Commmits 7B737DA и 4837E99.
- Полевые линии без
:
пересылаются как есть.
- В случае использования: запрос контрабанды
- Требования: Бэкэнд -сервер, который неправильно обретает линии полевых линий без
:
. - Риск: средний. Смотрите ошибки преобразователей 28 и 37.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnTenst: testrnConnection: closernrn
- Пострадавшие программы:
- OpenLiteSpeed:
- 3 ноября 2023 года: сообщено по электронной почте.
- 10 июля 2024 года. Исправлена или до этой даты.
- Запросы, содержащие как
Content-Length
так и заголовки Transfer-Encoding
пересылаются как есть, если значение Transfer-Encoding
не признается.
- В случае использования: запрос контрабанды
- Требования: Бэкэнд-сервер, который рассматривает
,chunked
как эквивалент chunked
, и распределяет приоритеты Transfer-Encoding
по Content-Length
. Это поведение разрешено стандартами. - Риск: высокий. Это позволяет контрабанду запросов на стандарты, соответствующие серверам.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnConnection: closernrn0rnrn
- Пострадавшие программы:
- OpenLiteSpeed:
- 3 ноября 2023 года: сообщено по электронной почте.
- 10 июля 2024 года. Исправлена или до этой даты.
- Фунт:
- 4 февраля 2024 года. Сообщено через выпуск GH.
- 29 марта 2024 года: исправлено в коммите.
-
n
не нормализован до rn
в перенаправленных сообщениях.
- В случае использования: запрос контрабанды
- Требования: Бэкэнд -сервер, который не интерпретирует
n
как строку, заканчивающуюся в строках заголовков. Стандарт позволяет серверам переводить n
на
. - Риск: высокий. Эта ошибка используется против стандартов, соответствующих серверам.
- Полезная нагрузка:
GET / HTTP/1.1nHost: whatevernConnection: closenn
- Пострадавшие программы:
- OpenLiteSpeed:
- 3 ноября 2023 года: сообщено по электронной почте.
- 31 января 2024 года: остается нефиксированным.
- Борьбаные тела сообщений, содержащие дополнительное
rn
до того, как кусок терминатора не будет заменена без замены заголовка Transfer-Encoding
с Content-Length
.
- В случае использования: запрос контрабанды
- Требования: нет.
- Риск: высокий. Эта ошибка используется против произвольных серверов бэкэнд.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn17rn0rnrnGET / HTTP/1.1rnrnrnrn0rnrn
- Пострадавшие программы:
- OpenLitSpeed
- 30 ноября 2023 года: сообщено по электронной почте.
- 10 июля 2024 года. Исправлена или до этой даты.
-
Transfer-Encoding: ,chunked
заголовки перенаправлены неповреждены и не интерпретируются как эквивалентные для chunked
.
- В случае использования: запрос контрабанды
- Требования: сервер, который интерпретирует
,chunked
как эквивалент chunked
, что, как говорит стандарт, вы можете сделать. - Риск: высокий. Это уязвимость контрабанды контрабанды, которая используется против стандартов, соответствующих бэкэндам.
- Полезная нагрузка:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- Пострадавшие программы:
- Openbsd реле:
- 10 ноября 2023 года: сообщено по электронной почте.
- 28 ноября 2023 года: исправлено в коммите.
- Размер размеров с префиксами
+
, -
и 0x
интерпретируются и пересылаются.
- В случае использования: запрос контрабанды
- Требования: сервер, который интерпретирует размеры кусок как самый длинный действительный префикс.
- Риск: высокий. Смотрите ошибку сервера 22.
- Полезная нагрузка:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn-0x0rnrn
- Пострадавшие программы:
- Openbsd реле:
- 10 ноября 2023 года: сообщено по электронной почте.
- 28 ноября 2023 года: исправлено в коммите.
- Фунт:
- 10 октября 2023 года. Сообщено через выпуск GH.
- 11 октября 2023 года: исправлено через Commits 60A4F42 и F70DB92.
- Заголовки, содержащие
x00
или n
объединяются в значение предыдущего заголовка.
- В случае использования: запрос контрабанды
- Требования: любой бэкэнд-сервер, соответствующий стандартам.
- Риск: высокий. Это общая уязвимость контрабанды.
- Полезная нагрузка:
GET / HTTP/1.1rna:brncx00rnrn
- Пострадавшие программы:
- Openbsd реле:
- 10 ноября 2023 года: сообщено по электронной почте.
- 29 ноября 2023 года: исправлено в коммите.
- Тела сообщения снимаются из запросов
GET
без удаления их заголовков Content-Length
.
- В случае использования: запрос контрабанды
- Требования: любой бэкэнд -сервер, который поддерживает трубопровод.
- Риск: высокий. Это общая уязвимость контрабанды.
- Полезная нагрузка:
GET / HTTP/1.1rnContent-Length: 10rnrn1234567890
- Пострадавшие программы:
- Openbsd реле:
- 28 ноября 2023 года: сообщено по электронной почте.
- 1 декабря 2023 года: исправлено в коммите.
- Запросы, содержащие несколько заголовков
Content-Length
пересылаются, что приоритет последнему.
- В случае использования: запрос контрабанды
- Требования: сервер, который принимает запросы, содержащие несколько заголовков
Content-Length
, приоритетные первые. - Риск: высокий. Смотрите ошибку сервера 23.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 31rnrnGET /evil HTTP/1.1rnHost: arnrn
- Пострадавшие программы:
- Openbsd реле:
- 30 ноября 2023 года: сообщено по электронной почте.
- 10 июля 2024 года: остается нефиксированным.
- Запросы, содержащие как
Content-Length
так и Transfer-Encoding
пересылаются.
- В случае использования: запрос контрабанды
- Требования: сервер, который приоритет
Content-Length
по сравнению с Transfer-Encoding
или не поддерживает Transfer-Encoding: chunked
. - Риск: высокий. Это классический вектор контрабанды.
- Полезная нагрузка:
POST / HTTP/1.1rnHost: arnCon