🇰🇷 한글 설명
Envoy의 HTTP 연결 관리자(FilterManager)에서 발생하는 로직 취약점으로, 이미 논리적으로 초기화된 HTTP 스트림에 대해 필터 콜백이 호출되는 'Zombie Stream Filter Execution' 문제가 발생합니다. 이로 인해 Use-After-Free(UAF) 또는 상태 손상이 발생할 수 있으며, FilterManager::decodeData 메서드가 스트림 리셋 여부를 확인하지 않아 발생합니다.
💡 쉬운 설명
이미 종료되어 정리된 데이터 통로에 갑자기 새로운 데이터가 들어올 때, 시스템이 이를 제대로 처리하지 못하고 이미 사라진 정보를 참조하여 오류를 일으키는 문제입니다. 이 과정에서 프로그램이 비정상적으로 종료되거나 보안상 취약한 상태가 될 수 있습니다.
🇺🇸 원문 (English)
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.
📍 영향받는 시스템
Envoy versions prior to 1.37.1, 1.36.5, 1.35.8, and 1.34.13
⚔️ 공격 벡터
HTTP/2 스트림이 리셋된 직후 동일한 패킷 처리 주기 내에 DATA 프레임을 전송하여 취약한 로직을 트리거함
🛡️ 대응 방법
Envoy를 최신 패치 버전(1.37.1, 1.36.5, 1.35.8, 1.34.13 이상)으로 업데이트하십시오.
🔧 검증 코드
명령어 실행 결과로 패치된 버전 번호가 출력되면 안전하며, 다른 버전이 출력되면 취약할 수 있습니다.
envoy --version | grep -E 'v(1\.37\.1|1\.36\.5|1\.35\.8|1\.34\.13)'