🇰🇷 한글 설명
Fleet 4.80.1 이전 버전에서 신뢰할 수 없는 프록시 헤더(True-Client-IP, X-Real-IP, X-Forwarded-For)의 IP 주소를 검증 없이 추출하여 레이트 리미팅에 사용합니다. 공격자가 각 요청마다 헤더 값을 변경하여 다른 클라이언트로 위장하고 로그인 API에 대한 무제한 무차별 공격을 수행할 수 있습니다.
💡 쉬운 설명
Fleet 시스템에서 공격자가 가짜 IP 주소를 보내 여러 사용자처럼 보이게 할 수 있습니다. 이를 통해 비밀번호 대입 공격을 무제한으로 시도할 수 있게 됩니다.
🇺🇸 원문 (English)
Fleet is open source device management software. Prior to version 4.80.1, a vulnerability in Fleet's IP extraction logic allows unauthenticated attackers to bypass API rate limiting by spoofing client IP headers. This may allow brute-force login attempts or other abuse against Fleet instances exposed to the public internet. Fleet extracted client IP addresses from request headers (`True-Client-IP`, `X-Real-IP`, `X-Forwarded-For`) without validating that those headers originate from a trusted proxy. The extracted IP is used as the key for rate limiting and IP ban decisions. As a result, an attacker could rotate the value of these headers on each request, causing Fleet to treat each attempt as coming from a different client. This effectively bypasses per-IP rate limits on sensitive endpoints such as the login API, enabling unrestricted brute-force or credential stuffing attacks. This issue primarily affects Fleet instances that are directly exposed to the internet without a reverse proxy that overwrites forwarded-IP headers. Instances behind a properly configured proxy or WAF are less affected. Version 4.80.1 contains a patch. If an immediate upgrade is not possible, administrators should ensure Fleet is deployed behind a reverse proxy (e.g., nginx, Cloudflare, AWS ALB) that overwrites `X-Forwarded-For` with the true client IP, and apply rate limiting at the proxy or WAF layer.
📍 영향받는 시스템
Fleet 4.80.1 이전 모든 버전
⚔️ 공격 벡터
X-Forwarded-For, X-Real-IP, True-Client-IP 헤더를 요청마다 변경하여 다른 클라이언트로 위장 후 레이트 리미팅 우회
🛡️ 대응 방법
Fleet을 4.80.1 이상으로 즉시 업그레이드하거나 X-Forwarded-For를 검증하는 리버스 프록시(nginx, Cloudflare, AWS ALB) 뒤에 배치
🔧 검증 코드
4.80.1 이상이면 패치됨. 4.80.1 미만이거나 Fleet이 설치되지 않았으면 취약점 존재 또는 미설치
fleet version 2>/dev/null | grep -oP 'version \K[0-9.]+' || echo 'Fleet not found'