-
Notifications
You must be signed in to change notification settings - Fork 208
fix: comprehensive security and correctness fixes - round 59 #863
Copy link
Copy link
Open
Description
Why
Code review round 59 identified 18 issues across security, correctness, and performance categories requiring comprehensive fixes.
What
Apply security and correctness fixes:
MUST-FIX (Security Critical)
- JWT expiration check missing - Add
claims.ExpiresAt.Time.Before(time.Now())check inpkg/web/auth.go:parseJWT() - Plaintext password storage - Validate passwords are bcrypt hashed in
pkg/store/database/user.go - SQL injection - Use parameterized queries in
pkg/store/database/repo.goinstead of string concatenation - User deletion race condition - Move repo deletion inside transaction in
pkg/backend/user.goor use CASCADE - Connection pool exhaustion - Set connection limits in
pkg/db/db.go:Open() - Path traversal - Sanitize repo names to prevent
../inpkg/utils/utils.go:SanitizeRepo() - Certificate injection - Validate public key fingerprints in
pkg/ssh/middleware.go
SHOULD-FIX (Security Moderate)
- Timing attack mitigation - Use constant-time comparison for all auth checks
- Weak token entropy - Increase JWT token entropy to 32 bytes (256 bits)
- SQLite pragma injection - Validate data source before DSN concatenation in
pkg/config/config.go - TLS certificate validation - Verify certificate validity in
pkg/web/http.go:Serve() - Password field validation - Check passwords are bcrypt hashed before storage in
pkg/db/models/user.go
NIT (Style/Minor)
- Incomplete error handling - Remove misleading comments in
pkg/config/config.go - Environment sanitization - Validate environment variable values in
pkg/ssh/middleware.go - Username uniqueness check - Optimize duplicate key validation in
pkg/store/database/user.go - Redundant normalization - Remove duplicate lowercase normalization in
pkg/backend/user.go - Inconsistent validation - Harmonize character rules between
ValidateUsername()andValidateRepo() - Authorization header split - Validate second part exists in
pkg/web/auth.go:parseAuthHdr()
Where
- pkg/web/auth.go - JWT parsing and validation
- pkg/store/database/user.go - User password storage
- pkg/store/database/repo.go - Repository operations
- pkg/backend/user.go - User management
- pkg/db/db.go - Database connection management
- pkg/utils/utils.go - Input sanitization
- pkg/ssh/middleware.go - SSH authentication
- pkg/config/config.go - Configuration handling
- pkg/web/http.go - HTTP serving
- pkg/db/models/user.go - User model validation
Plan
- Add JWT expiration check after token validation
- Validate password hashing before storage
- Implement parameterized queries for repo name lookups
- Move repo deletion into database transaction
- Add connection pool configuration
- Enhance path sanitization to prevent directory traversal
- Validate SSH certificate fingerprints
- Implement constant-time password comparisons
- Increase JWT token entropy
- Validate SQLite DSN before concatenation
- Add TLS certificate chain validation
- Add password field validation in model layer
Security Impact
Critical: Multiple security vulnerabilities requiring immediate attention:
- Plaintext password storage could lead to credential exposure
- SQL injection vulnerabilities
- Path traversal allowing arbitrary file access
- Certificate injection allowing unauthorized SSH access
- Connection pool exhaustion (DoS vulnerability)
Recommendation: Treat as CRITICAL security issue requiring immediate remediation.
Notes
Round 59 found 18 issues total: 7 MUST-FIX, 6 SHOULD-FIX, 5 NIT. This is a comprehensive security remediation requiring careful implementation and testing.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels