Improper Restriction of Excessive Authentication Attempts
The product does not implement sufficient measures to prevent multiple failed authentication attempts within a short time frame, making it more susceptible to brute force attacks.
Without a limit on the number of failed authentication attempts, an attacker can systematically guess user credentials through brute-force or dictionary attacks.
How to fix this vulnerability
Add rate limiting middleware to Chi auth endpoints using x/time/rate
package main import ( "net/http" - "github.com/go-chi/chi/v5" - ) - - func main() { - r := chi.NewRouter() + "time" + "golang.org/x/time/rate" + "github.com/go-chi/chi/v5" + ) + + func main() { + r := chi.NewRouter() + limiter := rate.NewLimiter(rate.Every(time.Second/5), 10) + r.Use(func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if !limiter.Allow() { + http.Error(w, "Rate limit exceeded", 429) + return + } + next.ServeHTTP(w, r) + }) + }) r.Post("/login", loginHandler) http.ListenAndServe(":8080", r) }
Add rate limiting middleware to prevent brute force attacks on Echo auth endpoints
package main - import "github.com/labstack/echo/v4" - - func main() { - e := echo.New() - e.POST("/login", loginHandler) + import ( + "time" + "github.com/labstack/echo/v4" + "github.com/ulule/limiter/v3" + mecho "github.com/ulule/limiter/v3/drivers/middleware/echo" + "github.com/ulule/limiter/v3/drivers/store/memory" + ) + + func main() { + e := echo.New() + rate := limiter.Rate{Period: time.Minute, Limit: 10} + store := memory.NewStore() + mw := mecho.NewMiddleware(limiter.New(store, rate)) + e.POST("/login", loginHandler, mw) e.Start(":8080") }
Add Fiber limiter middleware to prevent brute force attacks on auth endpoints
package main - import "github.com/gofiber/fiber/v2" - - func main() { - app := fiber.New() + import ( + "time" + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/limiter" + ) + + func main() { + app := fiber.New() + app.Use(limiter.New(limiter.Config{ + Max: 10, + Expiration: time.Minute, + })) app.Post("/login", loginHandler) app.Listen(":3000") }
Find vulnerabilities in your code
Use Shoulder to scan your codebase for Improper Restriction of Excessive Authentication Attempts patterns. 5 rules.
# Scan with Shoulder CLI npx @shoulderdev/cli trust --cwe=307 # Or scan entire project npx @shoulderdev/cli trust .
Detection Rules (5)
What to watch for in code reviews
These patterns indicate potential Improper Restriction of Excessive Authentication Attempts vulnerabilities. Look for these during code reviews and security audits.
Scan your codebase for Improper Restriction of Excessive Authentication Attempts
Shoulder CLI finds vulnerable patterns across your entire codebase.