🇰🇷 한글 설명
RansomLook의 인증 엔드포인트에서 사용자 이름을 열거할 수 있는 타이밍 공격 취약점과 무제한 비밀번호 대입 공격이 가능한 취약점이 발견되었습니다. 공격자는 응답 시간 차이를 이용해 유효한 계정을 식별하거나, 과도한 인증 시도를 통해 CPU 자원을 고갈시켜 서비스 거부(DoS)를 유발할 수 있습니다.
💡 쉬운 설명
해커가 로그인 화면에서 아이디가 맞는지 틀린지 알아내거나, 비밀번호를 무작위로 계속 입력하여 서버를 마비시킬 수 있는 문제입니다. 로그인 시도 횟수를 제한하지 않아 발생하는 보안 허점입니다.
🇺🇸 원문 (English)
RansomLook contains multiple weaknesses in its authentication endpoint that allow an unauthenticated remote attacker to enumerate valid usernames, perform unrestricted password-guessing attacks, and potentially exhaust application worker resources.
For local authentication, the login implementation previously checked whether a submitted username existed before invoking the password hash verification function. Requests containing a nonexistent username therefore returned significantly faster than requests for valid accounts, for which the computationally expensive password verification routine was executed. A remote attacker could measure these response-time differences to determine which usernames correspond to valid RansomLook accounts.
In addition, the /login endpoint did not restrict the number or frequency of failed authentication attempts. An attacker could consequently perform password brute-force, dictionary, password-spraying, or credential-stuffing attacks against known accounts without server-side throttling. For valid usernames, each authentication attempt also invokes the password key-derivation function, which consumes a significant amount of CPU time. A sufficiently high rate of login attempts could therefore occupy the application's synchronous Gunicorn workers and cause a denial of service affecting the entire application.
The issue has been addressed by always performing password verification using a randomly generated dummy password hash when the supplied username does not exist, eliminating the username-dependent timing discrepancy. Failed authentication attempts are additionally rate-limited per client IP address using Valkey/Redis, with five failed attempts within five minutes resulting in a one-hour block. The reverse-proxy configuration was also updated so that the application derives the client address from a trusted X-Forwarded-For value that cannot be overridden by a client-supplied header.
📍 영향받는 시스템
RansomLook (패치 적용 전 버전)
⚔️ 공격 벡터
인증 엔드포인트에 대한 타이밍 공격 및 무제한 브루트포스/DoS 공격
🛡️ 대응 방법
더미 해시를 사용한 타이밍 공격 방지 적용 및 IP 기반 로그인 시도 횟수 제한(Rate-limiting) 설정
🔧 검증 코드
존재하지 않는 아이디와 존재하는 아이디로 요청했을 때의 응답 시간 차이가 거의 없는지 확인합니다.
curl -s -o /dev/null -w "%{time_total}\n" https://<target_url>/login
💻 영향받는 소프트웨어
IBM WebSphere Application Server