🇰🇷 한글 설명
Envoy Gateway의 특정 버전에서 HTTPServer.ServeHTTP가 동기화 없이 mappingPath2Cache 맵을 읽는 동안 HTTPServer.Get이 해당 맵에 쓰기 작업을 수행하여 경합 조건이 발생합니다. 공격자가 정책을 빈번하게 변경하며 GET 요청을 보내면 Go 런타임 오류로 인해 컨트롤러 프로세스가 종료되어 서비스 거부(DoS) 상태가 발생할 수 있습니다.
💡 쉬운 설명
여러 작업이 동시에 같은 데이터를 수정하려고 시도할 때 발생하는 충돌 문제입니다. 공격자가 이 충돌을 유도하면 관리 시스템이 갑자기 꺼져버려 서비스 운영에 차질을 줄 수 있습니다.
🇺🇸 원문 (English)
Envoy Gateway is an open source project for managing Envoy Proxy as a standalone or Kubernetes-based application gateway. Prior to 1.7.4 and 1.8.1, HTTPServer.ServeHTTP in internal/wasm/httpserver.go reads the plain mappingPath2Cache map without synchronization while HTTPServer.Get writes the same map during EnvoyExtensionPolicy translation. An attacker with pod-network access to unauthenticated port 18002 and tenant permission to churn policies with distinct Wasm URLs can flood GET requests until a per-request reader overlaps a writer. Go's concurrent map read and write detection invokes runtime.throw, which the net/http connection recovery cannot catch, terminating the controller process and causing a timing-dependent, cross-tenant control-plane denial of service until Kubernetes restarts the pod. This issue is fixed in versions 1.7.4 and 1.8.1.
📍 영향받는 시스템
Envoy Gateway 1.7.4 미만 및 1.8.1 미만 버전
⚔️ 공격 벡터
인증되지 않은 포트(18002)를 통해 정책 변경과 GET 요청을 동시에 수행하여 프로세스 강제 종료 유도
🛡️ 대응 방법
Envoy Gateway를 1.7.4 또는 1.8.1 이상의 버전으로 업데이트
🔧 검증 코드
명령어 결과에 1.7.4 또는 1.8.1 이상의 버전이 포함되어 있으면 안전합니다.
envoy-gateway version | grep -E '1.7.4|1.8.1'