Envoy — это высокопроизводительный периферийный/средний/сервисный прокси. До версий 1.37.1, 1.36.5, 1.35.8 и 1.34.13 — логическая уязвимость в диспетчере HTTP-соединений Envoy (FilterManager), которая позволяет выполнять фильтр Zombie Stream Filter. Эта проблема создает окно «Использовать после освобождения» (UAF) или окно повреждения состояния, в котором обратные вызовы фильтра вызываются в потоке HTTP, который уже был логически сброшен и очищен.
Уязвимость находится в source/common/http/filter_manager.cc внутри метода FilterManager::decodeData. Объект ActiveStream остается действительным в памяти в течение окна отложенного удаления. Если кадр DATA поступает в этот поток сразу после сброса (например, в том же цикле обработки пакета), кодек HTTP/2 вызывает ActiveStream::decodeData, который каскадно передается в FilterManager::decodeData. FilterManager::decodeData не может проверить флаг Saw_downstream_reset_.
Он перебирает список decoder_filters_ и вызывает decodeData() для фильтров, которые уже получили onDestroy(). Эта уязвимость исправлена в версиях 1.37.1, 1.36.5, 1.35.8 и 1.34.13.
Показать оригинальное описание (EN)
Envoy is a high-performance edge/middle/service proxy. Prior to 1.37.1, 1.36.5, 1.35.8, and 1.34.13, a logic vulnerability in Envoy's HTTP connection manager (FilterManager) that allows for Zombie Stream Filter Execution. This issue creates a "Use-After-Free" (UAF) or state-corruption window where filter callbacks are invoked on an HTTP stream that has already been logically reset and cleaned up. The vulnerability resides in source/common/http/filter_manager.cc within the FilterManager::decodeData method. The ActiveStream object remains valid in memory during the deferred deletion window. If a DATA frame arrives on this stream immediately after the reset (e.g., in the same packet processing cycle), the HTTP/2 codec invokes ActiveStream::decodeData, which cascades to FilterManager::decodeData. FilterManager::decodeData fails to check the saw_downstream_reset_ flag. It iterates over the decoder_filters_ list and invokes decodeData() on filters that have already received onDestroy(). This vulnerability is fixed in 1.37.1, 1.36.5, 1.35.8, and 1.34.13.
Характеристики атаки
Последствия
Строка CVSS v3.1