| Package | Affected versions | Patched versions |
|---|---|---|
| github.com/gofiber/fiber/v3 | < 3.2.0 | 3.2.0 |
| fiber | ≤ 3.1.0 |
Fiber cache middleware's default key generator uses only c.Path() and does not include the query string.
As a result, requests like /?id=1 and /?id=2 can map to the same cache key and share the same cached response.
This can cause response mix-up (cache poisoning-like behavior) for endpoints where response content depends on query parameters.
Default configuration in cache middleware:
KeyGenerator: func(c fiber.Ctx) string { return utils.CopyString(c.Path()) }References:
The existing test demonstrates that when handler output depends on query parameter id, a second request with a different query still returns the first cached response (cache hit), confirming query is not part of the default cache key.
Minimal PoC:
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/cache"
)
func main() {
app := fiber.New()
app.Use(cache.New()) // default config
app.Get("/", func(c fiber.Ctx) error {
return c.SendString(c.Query("id", "1"))
})
log.Fatal(app.Listen(":3000"))
}
Reproduction:
GET /?id=1
1GET /?id=2
1 (expected 2)Local verification command used:
go test ./middleware/cache -run Test_Cache_WithNoCacheRequestDirective -count=1
Observed result: test passes, confirming this is current behavior.
Running one of these products? Scan your site to see whether it exposes a vulnerable version.
Scan my site free