MyTube — это автономный загрузчик и проигрыватель для нескольких видеосайтов. До версии 1.8.72 злоумышленник, не прошедший проверку подлинности, мог заблокировать учетные записи администратора и посетителей от аутентификации на основе пароля, вызывая неудачные попытки входа в систему. Приложение предоставляет три конечные точки проверки пароля, все из которых общедоступны.
Все три конечные точки имеют одно состояние попытки входа в систему, хранящееся в файле `login-attempts.json`. Когда какая-либо конечная точка регистрирует неудачную попытку аутентификации через `recordFailedAttempt()`, общее состояние попытки входа в систему обновляется, увеличивая счетчик `failedAttempts` и корректируя связанные временные метки и значения времени восстановления. Перед проверкой пароля каждая конечная точка вызывает canAttemptLogin().
Эта функция проверяет общий файл JSON, чтобы определить, активен ли период восстановления. Если время восстановления не истекло, запрос отклоняется до проверки пароля. Поскольку счетчик неудачных попыток и таймер восстановления являются глобальными, неудачные попытки аутентификации на любой конечной точке влияют на все остальные конечные точки.
Злоумышленник может воспользоваться этим, неоднократно отправляя недействительные запросы аутентификации на любую из этих конечных точек, увеличивая общий счетчик и ожидая периода восстановления между попытками. Таким образом, злоумышленник может постепенно увеличивать продолжительность блокировки, пока она не достигнет 24 часов, эффективно предотвращая аутентификацию законных пользователей. Как только максимальная блокировка достигнута, злоумышленник может поддерживать отказ в обслуживании в течение неопределенного времени, дожидаясь истечения времени восстановления и отправляя еще одну неудачную попытку, которая немедленно запускает еще одну 24-часовую блокировку, если за это время не произошло успешного входа в систему.
Версия 1.8.72 устраняет уязвимость.
Показать оригинальное описание (EN)
MyTube is a self-hosted downloader and player for several video websites Prior to version 1.8.72, an unauthenticated attacker can lock out administrator and visitor accounts from password-based authentication by triggering failed login attempts. The application exposes three password verification endpoints, all of which are publicly accessible. All three endpoints share a single file-backed login attempt state stored in `login-attempts.json`. When any endpoint records a failed authentication attempt via `recordFailedAttempt()`, the shared login attempt state is updated, increasing the `failedAttempts` counter and adjusting the associated timestamps and cooldown values. Before verifying a password, each endpoint calls `canAttemptLogin()`. This function checks the shared JSON file to determine whether a cooldown period is active. If the cooldown has not expired, the request is rejected before the password is validated. Because the failed attempt counter and cooldown timer are globally shared, failed authentication attempts against any endpoint affect all other endpoints. An attacker can exploit this by repeatedly sending invalid authentication requests to any of these endpoints, incrementing the shared counter and waiting for the cooldown period between attempts. By doing so, the attacker can progressively increase the lockout duration until it reaches 24 hours, effectively preventing legitimate users from authenticating. Once the maximum lockout is reached, the attacker can maintain the denial of service indefinitely by waiting for the cooldown to expire and sending another failed attempt, which immediately triggers another 24-hour lockout if no successful login occurred in the meantime. Version 1.8.72 fixes the vulnerability.
Характеристики атаки
Последствия
Строка CVSS v4.0