Skip to content

kAuth v1.0.4 - Güvenlik + Code Review

Latest

Choose a tag to compare

@KEYDALTR KEYDALTR released this 09 Apr 12:27

kAuth v1.0.4 - Güvenlik Denetimi + Kapsamlı Code Review

Bu sürüm 35 sorun içeren kapsamlı bir güvenlik denetimi ve code review sonucudur.

🔴 Kritik Güvenlik Düzeltmeleri

  • DataAccessException: DB hataları artık "kayıtlı değil" veya "yanlış şifre" gibi business fact'lere sessizce dönüştürülmüyor. MySQL hiccup'ında legitim kullanıcılar yanlışlıkla banlanmıyor.
  • Brute force bypass race: VerificationEntry.attempts artık AtomicInteger + ConcurrentHashMap.compute ile atomik check-and-update. İki paralel /dogrula denemesi artık race etmiyor.
  • Unified password validation: ChangePasswordCommand, PasswordResetCommand, admin /kauth sifredegistir artık AuthService.validatePassword() helper'ını kullanıyor. Weak password listesini (90+ entry) bypass edemiyor.
  • SQLite thread safety: Tüm metodlar synchronized(lock) içinde, WAL mode + busy_timeout aktif.
  • getIp null bucket: Null address'li oyuncular artık "unknown" bucket'ına eklenmiyor (cross-user session/ban collision önlendi).

🟠 Performans & Concurrency

  • setAuthenticated async-safe: Bukkit API çağrıları (sendPluginMessage, updateLastLogin) async thread'den çağrıldığında main thread'e trampoline ediliyor.
  • Admin komutları async: LogoutCommand, VerifyCommand, ChangePasswordCommand, KAuthCommand (kayitsil/sifredegistir/cikis) DB yazımları async.
  • Settings atomic snapshot: AtomicReference<Snapshot> pattern, cross-field invariant garantili. /kauth reload artık atomik.
  • ipAttempts decay: 5 dakikada bir tamamen silinmek yerine TTL bazlı decay.
  • ResultSet try-with-resources: Tüm DB query'lerinde explicit close.

🟡 Hata Yönetimi & UX

  • AsyncChatEvent: Deprecated AsyncPlayerChatEvent → Paper native AsyncChatEvent (1.21.11'de chat engeli aslında çalışmıyordu).
  • Dialog exception fallback: DialogProvider exception'ları log'luyor ve chat fallback'e düşüyor (stuck player önlendi).
  • Command blocked feedback: Giriş yapmamış oyuncular artık "giriş yapmadan kullanamazsınız" mesajı görüyor.
  • EmailService future tracking: .whenComplete callback ile SMTP fail → user'a "kod gönderilemedi" mesajı, pending code iptal.
  • LOGOUT → beginAuthFlow: Velocity remote logout sonrası oyuncu stuck kalmıyor, tam auth flow yeniden başlıyor.
  • onDisable teardown: Tüm session task'ları kapatılıyor, stale bossbar yok.
  • LoginCommand logAction %attempts%: Unlimited attempts case'i düzgün handle ediliyor.

Ayrıca

  • auth.max-login-attempts=0 uyarısı (güvenlik riski)
  • email.verification.code-length 4-9 arası clamp (int overflow önlendi)
  • Velocity config read fail → severe log + secret=empty (güvenli fallback)
  • sessionsByName secondary index → offline user için de clearSession çalışıyor
  • AuthMessage compact constructor validation (null/empty reject)
  • Task self-cancel handler throw ederse temizlenir
  • Duplicate root src/ dizini silindi

Test Sonuçları

  • 46/46 unit test geçti (PasswordUtil, AuthMessage, SQLiteDatabase)
  • 15/15 entegrasyon testi (Paper 1.21.11 + mineflayer bot)

Kurulum

Dosya Nereye
kAuth-1.0.4.jar Paper sunucusu plugins/
kAuth-Velocity-1.0.4.jar Velocity proxy plugins/

Velocity secret'ı ilk başlatmada otomatik oluşur, konsola basılır. Paper config.yml'de velocity.secret olarak yapıştırın.