К обсуждениям

Micronaut HTTP Client: redirect chain имеет предел

Редакция VOne Технологии

Практическая защитная проверка Micronaut HTTP Client по ghsa-387m-935m-c4vw: применимость, обратимый тест границы «явный максимальный redirect count с детерминированной ошибкой до бесконечного цикла», измеримый результат и stop-rule без production-данных.

Проверьте применимость к Micronaut HTTP Client

Не начинайте с граничного input: сначала зафиксируйте provenance процесса, digest сборки и normal-control. Для границы «явный максимальный redirect count с детерминированной ошибкой до бесконечного цикла» запишите runtime version, build digest, способ установки, активную конфигурацию и роль вызывающего субъекта. Reviewed Advisory указывает «io.micronaut:micronaut-http-client < 3.10.7; first patched 3.10.7 | io.micronaut:micronaut-http-client >= 4.0.0-M1, < 4.10.24; first patched 4.10.24 | io.micronaut:micronaut-http-client >= 5.0.0-M1, < 5.0.1; first patched 5.0.1», но это не заменяет проверку живого процесса. Not-applicable допустим только при доказанной версии вне affected range или документированно выключенной функции. При неполном provenance оставьте статус unknown и не переносите оценку advisory на всё развёртывание.

Фактическая рамка GHSA-387m-935m-c4vw

GitHub Reviewed Advisory опубликована 2026-07-09, обновлена 2026-07-09 и описывает механизм: Micronaut doesn't set a maximum redirect count for its HTTP Client, enabling infinite loop DoS. Package boundaries: «io.micronaut:micronaut-http-client < 3.10.7; first patched 3.10.7 | io.micronaut:micronaut-http-client >= 4.0.0-M1, < 4.10.24; first patched 4.10.24 | io.micronaut:micronaut-http-client >= 5.0.0-M1, < 5.0.1; first patched 5.0.1». Upstream https://github.com/micronaut-projects/micronaut-core подтверждает происхождение проекта, но не состояние вашей установки. Дата, summary и границы берутся с прямой страницы https://github.com/advisories/GHSA-387m-935m-c4vw, а не из forum post или search snippet. Запись не доказывает эксплуатацию, ущерб, популярность темы, индексацию или позицию страницы; для таких выводов нужны отдельные данные.

Отдельная боль и измеримое доказательство

Материал отвечает на одну самостоятельную боль: циклические Location могут удерживать клиент в повторных запросах без общего лимита. До запуска создайте артефакт «ledger hop / normalized-location / visited-set / max-redirects / terminal-result» и назначьте допустимые значения каждой колонке. Normal-control проходит тем же кодовым путём, на той же версии и с теми же ресурсными пределами. Исключение, status code или отсутствие события без trace не считаются окончательным доказательством. Marker должен быть синтетическим: без credentials, IP, настоящих имён, файлов, документов, журналов и внутренних адресов.

Безопасный обратимый опыт

Подготовьте stub transport с цепочкой A-B-A и отдельным single-hop normal response без внешней сети. Затем нужно запустить client через recorder, сначала normal redirect, затем cycle, считая вызовы и terminal result. Ожидаемый защитный исход задаётся до выполнения: normal hop завершается, cycle останавливается не позднее configured limit и возвращает контролируемую ошибку. Работайте только локально или в одноразовой среде с лимитами wall-time, CPU, памяти, файлов, сокетов и запросов. Не используйте production secrets, персональные данные, удалённые цели или эксплуатационные payload. Этот контур отделяет механизм от случайного timeout и сохраняет обратимость. После опыта удалите fixtures, повторите normal-control и сравните digest состояния с baseline.

Решение без догадок

Passed возможен, когда одновременно наблюдается: normal hop завершается, cycle останавливается не позднее configured limit и возвращает контролируемую ошибку; normal-control успешен; cleanup возвращает baseline. Failed фиксируется лишь после повторения с тем же fixture, версией и лимитами. Unknown остаётся при неполном provenance, нестабильном trace или неоднозначной конфигурации. Храните результат как «ledger hop / normalized-location / visited-set / max-redirects / terminal-result», чтобы другой инженер мог проверить вывод. Не расширяйте локальное наблюдение на всю систему и не обещайте абсолютную защищённость после одного теста.

Стоп-правило, обновление и поддержка

Stop-rule: остановить recorder при превышении max-redirects плюс один вызов. Если runtime входит в affected range, получите исправление только из доверенного upstream https://github.com/micronaut-projects/micronaut-core, зафиксируйте новый digest и повторите прежний fixture с неизменными лимитами. Новый сценарий не подтверждает исправление исходной границы. В обезличенный пакет поддержки включите runtime version, package boundary, config branch, expected/observed, timestamps, resource limits, error class и fixture hashes. Исключите tokens, cookies, абсолютные пути, внутренние hostname и содержимое данных.

Материал подготовлен редакцией VOne с помощью ИИ; даты, диапазоны, прямые ссылки, безопасный опыт, privacy-ограничения и отсутствие рекламных обещаний затем перепроверены по первичным источникам.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.