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

SwiftNIO: :path проверяется до HTTP/1 translation

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

Безопасная проверка SwiftNIO HTTP2ToHTTP1 codec по ghsa-4px2-pw77-vc85: применимость, обратимый fixture, pseudo-header / control-class / validator-result / h1-parts-emitted / channel-state, PASS и stop-rule без production-данных.

Разберите симптом SwiftNIO HTTP2ToHTTP1 codec

Отдельная пользовательская боль: control bytes из pseudo-header попадают в HTTP/1 start-line/headers и меняют границы запроса. Reviewed advisory описывает «SwiftNIO HTTP/2: HTTP/2-to-HTTP/1 Request Smuggling via unvalidated :path pseudo-header in HTTP2ToHTTP1Codec»; практический механизм: Переводчик протоколов обязан валидировать HTTP/2 pseudo-header grammar до сериализации HTTP/1. Отфильтровать готовые bytes после emission поздно. Проверяем invariant «:path и другие pseudo-headers без CR/LF/NUL проходят, любой control byte даёт protocol error до output», а не общий класс проблем. Запись ghsa-4px2-pw77-vc85 опубликована 2026-06-12, обновлена 2026-07-15; ecosystem boundary: «swift/github.com/apple/swift-nio-http2 < 1.44.0; first patched 1.44.0». Это не доказывает affected code в fork, факт эксплуатации, популярность или поисковый спрос.

Сопоставьте runtime и безопасный control

Зафиксируйте source package, runtime version, build digest, commit provenance, feature/config state и роль, достигающую ветви. Нормальный control: обычный path создаёт один корректный HTTP/1 request head. Отдельно укажите самый ранний read/write/send/execute/cache/credential side effect. Если provenance или reachability неизвестна, статус unknown. Версионный диапазон «swift/github.com/apple/swift-nio-http2 < 1.44.0; first patched 1.44.0» — фильтр; backport подтверждается diff и поведением, а не предположением.

Запустите обратимый fixture

Лабораторный опыт: В EmbeddedChannel подать normal :path и короткие synthetic variants с одиночным control marker; downstream collector записывает emitted parts. Все идентификаторы и данные синтетические; network отключён или заменён recorder, filesystem ограничен mkdtemp, persistence — memory adapter/rollback. До запуска сохраните input digest, ожидаемое правило «invalid input закрывает/ошибает stream, ни start-line, ни header не emitted» и нулевые counters. После — строку «pseudo-header / control-class / validator-result / h1-parts-emitted / channel-state», final-state digest и cleanup proof. Реальный payload, credential, нагрузка или production mutation запрещены.

Прочитайте матрицу pseudo-header / control-class / validator-result / h1-parts-emitted / channel-state

Убедитесь, что control прошёл именно нужную ветвь, затем найдите stage policy и любой чувствительный action. PASS возможен только если invalid input закрывает/ошибает stream, ни start-line, ни header не emitted. Один status code, отсутствие exception или запись в лог не доказывают защиту. Для concurrency/state boundary используйте fixed barriers и малый детерминированный повтор. Любой неожиданный side effect переводит результат в fail/unknown до объяснения и полного cleanup.

Свяжите patch, stop-rule и решение

Diff исправления должен реализовать смысл «:path и другие pseudo-headers без CR/LF/NUL проходят, любой control byte даёт protocol error до output» до side effect. Красные флаги: fail-open, policy после action, несовпадение requested/effective target, неполный transport/path coverage или отсутствующий negative control. Stop-rule: не отправлять сетевой запрос и не собирать smuggling chain. Также остановитесь при privilege prompt, реальных данных, необратимой записи, росте ресурсов или невозможности cleanup. Дерево: proven patched — not-applicable; недостижимо — not-reachable; PASS — ready-for-reviewed-update; наблюдается «control bytes из pseudo-header попадают в HTTP/1 start-line/headers и меняют границы запроса» — fail; иначе unknown. В support packet включите ghsa-4px2-pw77-vc85, build provenance, «pseudo-header / control-class / validator-result / h1-parts-emitted / channel-state», expected/observed, stop reason и две source URL без секретов/персональных данных. Production rollout требует отдельного backup, canary, readiness и rollback.

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

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

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

Ответы

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

Ваш ответ

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

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

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