🇰🇷 한글 설명
Echo 웹 프레임워크의 4.0.0부터 5.1.0 이전 버전에서는 Echo.IPExtractor가 설정되지 않은 경우 Context.RealIP가 클라이언트가 보낸 X-Forwarded-For 또는 X-Real-IP 값을 신뢰합니다. 기본 RateLimiter가 이 값을 클라이언트 식별자로 사용하기 때문에 공격자가 임의의 전달 주소 값을 바꿔 가며 IP 기반 요청 제한을 우회할 수 있습니다. 이 문제는 Echo v5.1.0에서 수정되었습니다.
💡 쉬운 설명
웹 서버가 요청자의 IP를 확인할 때 요청에 포함된 헤더 값을 그대로 믿는 문제가 있습니다. 공격자는 이 헤더 값을 바꿔서 매번 다른 사용자인 것처럼 보이게 하여 횟수 제한을 피할 수 있습니다.
🇺🇸 원문 (English)
Echo is a Go web framework. From 4.0.0 until 5.1.0, Context.RealIP falls back to client-supplied X-Forwarded-For or X-Real-IP values when Echo.IPExtractor is unset, and the default RateLimiter uses that result as its client identifier. A remote attacker can rotate arbitrary forwarded-address values to obtain new rate-limit buckets and bypass IP-based throttling used for controls such as brute-force or request-volume protection. This issue is fixed in Echo v5.1.0.
📍 영향받는 시스템
Echo Go 웹 프레임워크 4.0.0 이상 5.1.0 미만 버전 (IPExtractor 미설정 시)
⚔️ 공격 벡터
X-Forwarded-For 또는 X-Real-IP 헤더 값을 요청마다 변경하여 IP 기반 속도 제한 버킷을 계속 새로 얻어 무차별 대입 또는 대량 요청을 수행
🛡️ 대응 방법
Echo를 v5.1.0 이상으로 업그레이드하거나 Echo.IPExtractor를 명시적으로 설정하여 신뢰할 수 있는 프록시 헤더만 사용하도록 구성
🔧 검증 코드
출력된 버전이 v5.1.0 미만이면 취약하며, v5.1.0 이상이면 수정된 버전이고, 출력이 없으면 해당 프로젝트에 Echo 모듈이 없는 것입니다.
go list -m github.com/labstack/echo/v5 2>/dev/null || grep -E 'labstack/echo' go.mod 2>/dev/null