🇰🇷 한글 설명
Pterodactyl 1.7.0부터 1.13.0 이전 버전에서는 로그인 및 2단계 인증 엔드포인트의 요청 제한기가 IP나 계정별로 구분되지 않고 전체 공유 버킷을 사용합니다. 인증되지 않은 공격자가 단일 IP에서 분당 약 10회 요청하는 것만으로 모든 사용자의 로그인이 HTTP 429로 차단되어 관리자를 포함한 패널 전체의 인증이 마비될 수 있습니다.
💡 쉬운 설명
요청 횟수 제한이 모든 사용자에게 하나의 공용 카운터로 적용되는 잘못된 설정입니다. 공격자가 아주 적은 요청만으로 이 카운터를 소진시켜 모든 사용자가 로그인하지 못하게 만듭니다.
🇺🇸 원문 (English)
Pterodactyl is a free, open-source game server management panel. From 1.7.0 until 1.13.0, the authentication rate limiter defined in RouteServiceProvider::configureRateLimiting() applied a single global bucket to the login and two-factor checkpoint endpoints instead of keying by IP or account: the fall-through Limit::perMinute(10) covering POST /auth/login and POST /auth/login/checkpoint omitted ->by(), so Laravel derived a constant cache key (md5('authentication')) shared by every request. An unauthenticated attacker sending roughly ten requests per minute from a single IP, most cheaply against the checkpoint endpoint (which has no reCAPTCHA), exhausts the shared counter and causes HTTP 429 for every user attempting to log in or complete two-factor authentication, a panel-wide authentication denial of service that also locks out administrators. This issue is fixed in version 1.13.0.
📍 영향받는 시스템
Pterodactyl Panel 1.7.0 ~ 1.13.0 미만 버전
⚔️ 공격 벡터
인증되지 않은 공격자가 단일 IP에서 분당 약 10회 POST /auth/login/checkpoint 등 인증 엔드포인트에 요청을 보내 공유 요청 제한 카운터를 고갈시킴
🛡️ 대응 방법
Pterodactyl Panel을 1.13.0 이상으로 업그레이드
🔧 검증 코드
출력된 버전이 1.13.0 이상이면 패치 적용된 것이며, 1.7.0 이상 1.13.0 미만이면 취약한 버전이므로 즉시 업그레이드가 필요합니다.
cat /var/www/pterodactyl/config/app.php 2>/dev/null | grep -i version