Как HTTP Terminator нашёл новые способы рассинхронизации веб-серверов?

Созданная Джеймсом Кеттлом система HTTP Terminator самостоятельно сгенерировала и проверила новые техники HTTP-десинхронизации. Директор по исследованиям PortSwigger передал ей 138 спецификаций HTTP и SMTP, разбитых примерно на 15 000 небольших фрагментов. На их основе система подготовила 30 000 уникальных потенциальных векторов атаки. Идеи извлекались непосредственно из технических стандартов, а затем превращались в запросы, пригодные для практической проверки.
Как HTTP Terminator нашёл новые способы рассинхронизации веб-серверов?
Изображение носит иллюстративный характер

HTTP Terminator протестировал 30 000 сайтов, доступ к которым был разрешён программами поиска ошибок и раскрытия уязвимостей. До углублённой проверки и экспериментов с отравлением очереди ответов система отметила около 700 потенциально уязвимых целей. Среди них оказались банки, государственная инфраструктура, продукты информационной безопасности и аэропорт. Одна из найденных техник сработала более чем на 200 сайтах, включая неназванный банк США.
Суть HTTP-десинхронизации состоит в разном понимании границ запроса двумя узлами одной цепочки. Фронтенд может решить, что запрос закончился, тогда как бэкенд продолжит читать поступившие данные, либо наоборот. HTTP Terminator нашёл новые условия для такого расхождения, включая схему с двойным совпадением Content-Length. При неодинаковой трактовке длины содержимого часть запроса способна превратиться для внутреннего сервера в начало следующего.
Наиболее массовым оказался вариант с заголовком Content-Type: multipart/byteranges. Он работал сразу в нескольких серверных реализациях и затронул свыше 200 ресурсов из разрешённой тестовой выборки. Приём использовал различия в том, как компоненты разбирают многочастное содержимое и определяют границы передаваемых данных. Масштаб здесь особенно неприятен: ошибка не была привязана к одному редкому серверу или единственной конфигурации.
Отдельная часть работы касалась Response Queue Poisoning, или RQP, — отравления очереди ответов. После рассинхронизации фронтенд может потерять связь между запросом пользователя и ответом внутреннего сервера. Тогда клиент рискует получить чужой ответ вместе с сеансовыми cookie, API-ключами или иными закрытыми данными. HTTP Terminator оценил 16 способов сделать RQP стабильнее, но проверку выдержал только один: техника «висячего байта».
При такой атаке внедрённый запрос намеренно оставляют короче ровно на один байт. Бэкенд не формирует второй ответ, пока следующий, уже принадлежащий жертве запрос не принесёт недостающий байт. Это убирает гонку, из-за которой обычное отравление очереди ответов на многих сайтах срабатывает непредсказуемо. Нападающему больше не требуется удачно попасть в короткий временной промежуток: запрос жертвы сам завершает подготовленную конструкцию.
Другая цепочка экспериментов, уже направляемая человеком, привела к заявленной уязвимости нулевого дня в Apache Traffic Server. Причиной стал некорректно сформированный запрос, вызвавший рассинхронизацию. Уязвимость, по сведениям исследователей, исправили и присвоили ей идентификатор CVE-2026-63078. Но при проверке 7 августа издание The Hacker News не нашло запись с таким номером ни на , ни в National Vulnerability Database (NVD). В июльском бюллетене Apache, содержавшем 34 уязвимости, этого CVE тоже не оказалось. Поэтому по открытым данным нельзя установить затронутые версии Apache Traffic Server, точный выпуск с исправлением и полное техническое описание проблемы.
Из наблюдений HTTP Terminator выросла более общая концепция Shared-Parser Confusion — путаница общего парсера. Система заметила, что правила, предназначенные для разбора HTTP-ответов, иногда применяются к запросам. Такое возможно, если сервер повторно использует одну и ту же логику обработки для обоих направлений обмена. HTTP Terminator предложил исходную идею, после чего Джеймс Кеттл проверил её и обобщил до отдельного класса атак. Границу между машинной находкой и человеческой работой он сформулировал прямо: «Ни один из нас не обнаружил бы это в одиночку».
Автономно система получила новые триггеры десинхронизации, схему двойного совпадения Content-Length, технику multipart/byteranges и «висячий байт» для RQP, а также ряд кандидатов, навеянных фрагментами RFC. Человеческое участие понадобилось в цепочке, раскрывшей ошибку Apache Traffic Server, и при превращении наблюдения о парсерах в Shared-Parser Confusion. PortSwigger опубликовала исходный код HTTP Terminator, однако исследовательская работа не связывает каждую автономную находку с точной моделью и её версией. В открытой реализации Claude извлекает сведения из документов и создаёт тестовые случаи, а Claude Code используется на исследовательском этапе. В отдельном тесте повторного обнаружения Джеймс Кеттл проверил более новые модели: GPT-5.6 Sol показала результат 30% при наличии «техники-вдохновения».
Рекомендация PortSwigger для защиты осталась прежней: не использовать HTTP/1.1 между фронтендом и внутренним сервером. Если отказаться от него нельзя, допустимые HTTP-методы следует занести в белые списки одновременно на обоих уровнях, а право передавать тело запроса оставить только строго определённым методам. Это сокращает число ситуаций, которые разные компоненты могут разобрать по-разному. Для отдельного класса атак на базе CRLF исследователи также выпустили публичные инструменты crlf-desyncs и crlf-powered-desync-scanner; они не входят в основную работу HTTP Terminator и предназначены для самостоятельного изучения CRLF-десинхронизации.


Новое на сайте

Ссылка