🇰🇷 한글 설명
FOSSBilling 0.5.6에서 0.7.2 버전 사이에서 비밀번호 재설정 토큰이 재사용되는 취약점이 발견되었습니다. 사용자가 새로운 비밀번호 재설정을 요청하더라도 기존에 생성된 토큰이 무효화되지 않고 이전 생성 시간을 기준으로 유효성이 유지됩니다. 이로 인해 공격자가 이전에 탈취한 재설정 링크를 통해 계정을 탈취할 수 있습니다.
💡 쉬운 설명
비밀번호를 새로 바꾸려고 요청해도 예전에 만들어진 비밀번호 변경 링크가 여전히 작동하는 문제입니다. 해커가 예전에 몰래 가져간 링크가 있다면, 사용자가 새로 요청을 해도 여전히 그 링크로 비밀번호를 바꿀 수 있습니다.
🇺🇸 원문 (English)
FOSSBilling is a free, open-source billing and client management system. In versions 0.5.6 through 0.7.2, when a `ClientPasswordReset` record already exists for a client (from a previous unexpired reset request), subsequent calls to the `reset_password` guest API endpoint reuse the existing token instead of generating a new one. The 15-minute validity window is anchored to the first request's `created_at` timestamp, not the time of the most recent email. An attacker who obtained the original reset link remains able to use it even after the victim requests a new reset, because the original token is never invalidated or rotated. Version 0.8.0 patches the issue. Some workarounds are available. Configure a reverse proxy (e.g., Nginx, Apache, Cloudflare) to apply per-IP rate limiting to the `/client/reset-password` endpoint to minimize the window of opportunity, and/or manually clear expired `client_password_reset` records from the database after a client reports a suspected compromise.
📍 영향받는 시스템
FOSSBilling versions 0.5.6 through 0.7.2
⚔️ 공격 벡터
이전에 탈취한 비밀번호 재설정 토큰을 사용하여 유효 기간 내에 계정 권한을 획득
🛡️ 대응 방법
FOSSBilling을 0.8.0 버전 이상으로 업데이트하거나, 리버스 프록시를 통해 해당 엔드포인트에 IP당 속도 제한을 적용하십시오.
🔧 검증 코드
설치된 FOSSBilling의 버전을 확인하여 0.8.0 미만인지 확인하십시오.
php artisan --version 2>/dev/null || echo 'Check FOSSBilling version via installed files or database'