ID: SUM-SEC-09
Wave: P1
Severity: Medium
Labels: security, auth, brute-force, P1, medium
Branch: fix/SUM-SEC-09-login-timing-lockout
Languages: Go
CWE: CWE-208 / CWE-307
Summary
Unknown login returns before bcrypt.CompareHashAndPassword; known login always pays bcrypt cost → remote timing / user enumeration. Rate limit is IP RPM on /web/login and RPC only — no per-login lockout; failures only audit.
Acceptance criteria
Files to check / change
sumeru/core/server/web/auth.go (authenticate ~L263–273, ~L401–404)
sumeru/core/server/web/ratelimit.go
sumeru/core/server/config/ (lockout thresholds)
ID: SUM-SEC-09
Wave: P1
Severity: Medium
Labels: security, auth, brute-force, P1, medium
Branch:
fix/SUM-SEC-09-login-timing-lockoutLanguages: Go
CWE: CWE-208 / CWE-307
Summary
Unknown login returns before
bcrypt.CompareHashAndPassword; known login always pays bcrypt cost → remote timing / user enumeration. Rate limit is IP RPM on/web/loginand RPC only — no per-login lockout; failures only audit.Acceptance criteria
Files to check / change
sumeru/core/server/web/auth.go(authenticate ~L263–273, ~L401–404)sumeru/core/server/web/ratelimit.gosumeru/core/server/config/(lockout thresholds)