AuthCore 1.0.1 для Minecraft 1.18.2 (Fabric)
Файлы · 1
Что изменилось
Список изменений переведён автоматическиПоказать оригинал (EN)
[1.0.1] - 2026-10-22
Выпуск с аудитом безопасности: обход проверки команд в лобби, повтор TOTP, гонки второго фактора, асинхронная проверка пароля, укрепление базы данных, а также исправление краша при входе на 26.1/26.2.
Исправления по итогам аудита безопасности (2026-10-21)
- Высокий — исправлен обход проверки команд в лобби.
Security.isCommandAllowedInLobbyопределял корень команды по тексту после первого/в любом месте строки. Команды приходят без ведущего слэша, поэтомуmsg bob hi /loginоценивался как всегда разрешённый кореньlogin, и любую команду можно было протащить мимо белого/чёрного списка. Теперь отбрасывается только ведущий слэш.- Защита от повтора TOTP. Принятый код TOTP больше нельзя использовать повторно в пределах окна его действия (RFC 6238 §5.2). Игрок, который только что вошёл, должен дождаться следующего кода, чтобы войти снова.
- Атомарность второго фактора. Использование кода восстановления, email-OTP и кодов email-восстановления теперь одноразовое и с ограничением попыток при одновременных отправках.
/loginбольше не хеширует в потоке сервера. Проверка Argon2/bcrypt выполняется в IO executor (не более 4 одновременно, одна на аккаунт), а её результат применяется обратно в потоке сервера, где сначала заново проверяется состояние лобби (игрок мог за это время отключиться или аутентифицироваться). Спам неверными паролями больше не может подвесить сервер.- Никаких слабых алгоритмов для новых паролей.
md5,sha-256,sha-512и неизвестные значенияpassword-hash-algorithmзаменяются наargon2при создании или смене пароля (регистрация,/changepassword, сбросы админом и через веб-панель); метка алгоритма в хранилище всегда соответствует хешу. Существующие устаревшие хеши по-прежнему проверяются и обновляются при входе.- Укрепление: проверка offline-UUID больше не зависит от кодировки по умолчанию платформы, а два запроса админа/истории теперь закрывают свои JDBC-стейтменты.
- База данных. Записи
User(upsert + расширенные столбцы) выполняются в одной транзакции, JDBC- стейтменты/результаты закрываются, удаление аккаунта сопоставляется по uuid или имени без учёта регистра, а индексы поиска (LOWER(username),LOGIN_HISTORY.uuid) создаются идемпотентно при запуске (по возможности; при сбоях пишется только debug-лог).Исправлен краш при входе на Minecraft 26.1/26.2 (2026-10-21)
- Исправлен
NoSuchMethodError: ServerPlayer.setPermanentlyInvulnerable(boolean), который ронял серверы Fabric/NeoForge 26.1 и 26.2 в момент входа игрока (issue #10): собранный на 26.3 G3 jar — один артефакт для всего открытого диапазона>=26.1, а переключатель Stonecutter на этапе компиляции всегда зашивал в байткод переименованный в 26.3 сеттер. Теперь щит урона в лимбе выбирает междуsetPermanentlyInvulnerable(26.3+) иsetInvulnerable(26.2 и старше) во время выполнения черезCompat(Compat.setInvulnerable/Compat.isInvulnerable) — тот же шаблон «один jar на диапазон», что и уsetFallDistance.- Снимок лимба теперь захватывает флаг неуязвимости ДО лобби и восстанавливает его при разблокировке, так что игрок, уже бывший неуязвимым до лимба, сохраняет это состояние после аутентификации. Устойчивый к крашам файл снимка лимба тоже сохраняет флаг (в старых файлах без этого ключа флаг сбрасывается, как и раньше).