Практическая защитная проверка 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-ограничения и отсутствие рекламных обещаний затем перепроверены по первичным источникам.
Источники и проверка
- GitHub Reviewed Advisory ghsa-387m-935m-c4vw проверено 2026-08-31
- Upstream-репозиторий Micronaut HTTP Client проверено 2026-08-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.