Безопасная проверка 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-границы и отсутствие рекламных обещаний затем перепроверены.
Источники и проверка
- GitHub Reviewed Advisory ghsa-4px2-pw77-vc85 проверено 2026-08-31
- Official/upstream source for SwiftNIO HTTP2ToHTTP1 codec проверено 2026-08-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.