🇰🇷 한글 설명
Netty의 HTTP/3 코덱에서 HTTP/1 Host 헤더가 절대 경로 형태의 request-target에 포함된 authority보다 우선시되는 취약점이 발견되었습니다. 이로 인해 HTTP/1-to-HTTP/3 게이트웨이나 프록시 환경에서 인증, 라우팅, 캐시 키 생성 시 권한 혼동이 발생할 수 있습니다.
💡 쉬운 설명
웹 서버가 요청을 처리할 때, 공격자가 보낸 가짜 주소와 실제 주소 사이에서 혼란을 일으켜 보안 검사를 우회할 수 있는 문제입니다. 이를 통해 공격자는 허용되지 않은 관리자 페이지나 다른 서버로 접속을 시도할 수 있습니다.
🇺🇸 원문 (English)
Netty's HTTP/3 codec (io.netty:netty-codec-http3) versions 4.2.2.Final through 4.2.17.Final builds the HTTP/3 :authority pseudo-header from the HTTP/1 Host header before considering the authority of an absolute-form HTTP/1 request-target. In HttpConversionUtil.toHttp3Headers(HttpMessage, boolean) — reached via Http3FrameToHttpObjectCodec(false) — a non-empty Host header takes precedence over the request-target authority, contrary to the HTTP/1.1 rule that a server receiving an absolute-form request-target must ignore the Host header. In a Netty-based HTTP/1-to-HTTP/3 gateway, proxy, or protocol bridge, a remote client can send a request such as "GET https://trusted.example/admin HTTP/1.1" with "Host: attacker.example", causing components that validate, authorize, or route on the RFC-defined request-target authority to reach a different decision than the upstream HTTP/3 peer, which receives :authority derived from the conflicting Host header. This authority confusion can affect virtual-host routing, allow-list checks, backend selection, cache keys, and URL generation. The advisory reports integrity impact only (no code execution, memory corruption, or availability impact). Fixed in 4.2.18.Final.
📍 영향받는 시스템
io.netty:netty-codec-http3 4.2.2.Final ~ 4.2.17.Final
⚔️ 공격 벡터
HTTP/1.1 요청 시 Host 헤더와 절대 경로 형태의 request-target을 다르게 구성하여 전송
🛡️ 대응 방법
Netty 라이브러리를 4.2.18.Final 버전 이상으로 업데이트
🔧 검증 코드
출력된 결과에서 netty-codec-http3의 버전이 4.2.18.Final보다 낮은지 확인
mvn dependency:list | grep 'netty-codec-http3'
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
💻 영향받는 소프트웨어
Spring Cloud Gateway Server