AuthCore 1.0.1 для Minecraft 26.3 (NeoForge)
Файлы · 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.- Снимок лимба теперь захватывает флаг неуязвимости ДО лобби и восстанавливает его при разблокировке, так что игрок, уже бывший неуязвимым до лимба, сохраняет это состояние после аутентификации. Устойчивый к крашам файл снимка лимба тоже сохраняет флаг (старые файлы без этого ключа сбрасывают флаг, как и раньше).