fix(security): pre-release security batch #121
Reference in New Issue
Block a user
Delete Branch "fix/prerelease-security-batch"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Final security items before v1.0.0 tag. Cleans section B of review-findings.local.md.
Changes
1. DNS-rebind TOCTOU on ping/port checks (
checker.go)Pre-check resolved+validated the target, then
runPingCheck/runPortCheckre-resolved by hostname — DNS rebind between lookups bypassed SSRF guard. Fix: resolve once, pin validated IP, pass to check functions. HTTP unaffected (SafeDialContext validates at dial time).2. API import no longer replaces user accounts (
server.go,sqlstore.go, dialects)Cluster-secret holder could POST a backup replacing all admin accounts via
/api/backup/import. Also, Kuma imports (zero users) unconditionally wiped the users table — locked out all accounts until restart. Fix: API handlers stripdata.Users; store only wipes+replaces users when explicitly provided (CLI restore). NewImportWipeUsersdialect method.3. Email send respects context deadline (
alert.go)smtp.SendMailignores context — blackholed SMTP hung alert goroutines for OS TCP timeout (minutes). Replaced withsendMailContext: dials with ctx deadline, sets connection deadlines, handles STARTTLS/AUTH. 200ms timeout test validates.4. Split-brain failover docs (
docs/clustering.md)Honest documentation: no leader fencing, both-active during partitions, duplicate alerts expected, ~15s takeover, converges on heal.
Test plan
go test -race ./...— all passgolangci-lint run ./...— 0 issues