chi Middleware Vulnerable to Potential IP Spoofing via `X-Forwarded-For` Header in `Request.RemoteAddr` Resolution
Key facts
- Attack vector
- —
- Privileges required
- —
- User interaction
- —
- Attack complexity
- —
- Impact type
- Security bypass
- Confidentiality · integrity · availability
- —
- Fix status
- Fixed
No CVSS vector from any source. Fix status from GitHub. Impact type from CWE-346.
Summary
### Summary The vulnerability allows the `Request.RemoteAddr` to be spoofed when determining the request source IP via the `X-Forwarded-For` header. This could result in misidentification of the request source and potentially compromise access control and logging integrity. ### Details Currently, the `RealIP()` implementation splits the `X-Forwarded-For` header by `,` and uses the first IP. https://github.com/go-chi/chi/blob/v5.1.0/middleware/realip.go#L50-L54 However, relying on the first IP in the `X-Forwarded-For` header is insecure because it can be manipulated by attackers to falsify the source IP. Malicious Case: 1. A malicious client sends a request with a forged IP in the X-Forwarded-For header: `X-Forwarded-For: <forged-ip>` 2. The proxy appends the actual client’s IP and forwards the request: `X-Forwarded-For: <forged-ip>,<client-ip>` 3. If the server always uses the first IP, it becomes vulnerable to IP spoofing. Ideally, the implementation should verify IPs starting from the end of the `X-Forwarded-For` header value, skipping trusted IPs within the system, and using the first untrusted IP as the actual client IP. For example, the `labstack/echo` web framework processes the `X-Forwarded-For` header by checking IPs from the end, skipping trusted IPs, and using the first untrusted IP as the client's ip. https://github.com/labstack/echo/blob/v4.13.2/ip.go#L261-L273 ### PoC #### 1. Run the Go application with the following code: ```go package main import ( "fmt" "log" "net/http" "github.com/go-chi/chi/v5/middleware" ) func main() { // Set handler to print the remote address handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln( w, fmt.Sprintf("remote addr: %s (want 192.0.2.1)", r.RemoteAddr), ) }) // Use RealIP middleware log.Fatal(http.ListenAndServe(":8080", middleware.RealIP(handler))) } ``` #### 2. Send a request to the server using curl with a manipulated X-Forwarded-For header: ``` $ curl localhost:8080 -H 'X-Forwarded-For: 192.0.2.2, 192.0.2.1' remote addr: 192.0.2.2 (want 192.0.2.1) ``` ### Impact This vulnerability can lead to a request source IP spoofing issue, which may allow attackers to bypass access controls or falsify request logs. It primarily affects systems that rely on X-Forwarded-For to determine the actual client IP, particularly in scenarios where intermediary proxies or load balancers are involved.
Why it matters now
SSVC decision points
Not available: CISA has not published SSVC decision points for this record.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| — | github.com/go-chi/chi/middleware (Go) | 0.9.0 – 1.5.5 | — | No fix listed | GHSA-9g5q-2w5x-hmxf |
| — | github.com/go-chi/chi/v2/middleware (Go) | up to 2.1.1 | — | No fix listed | GHSA-9g5q-2w5x-hmxf |
| — | github.com/go-chi/chi/v3/middleware (Go) | up to 3.3.5 | — | No fix listed | GHSA-9g5q-2w5x-hmxf |
| — | github.com/go-chi/chi/v4/middleware (Go) | up to 4.1.3 | — | No fix listed | GHSA-9g5q-2w5x-hmxf |
| — | github.com/go-chi/chi/v5/middleware (Go) | before 5.3.0 | 5.3.0 | Patch available | GHSA-9g5q-2w5x-hmxf |
- github.com/go-chi/chi/middleware (Go) Vendor— Affected 0.9.0 – 1.5.5 Fixed in — No fix listed GHSA-9g5q-2w5x-hmxf
- github.com/go-chi/chi/v2/middleware (Go) Vendor— Affected up to 2.1.1 Fixed in — No fix listed GHSA-9g5q-2w5x-hmxf
- github.com/go-chi/chi/v3/middleware (Go) Vendor— Affected up to 3.3.5 Fixed in — No fix listed GHSA-9g5q-2w5x-hmxf
- github.com/go-chi/chi/v4/middleware (Go) Vendor— Affected up to 4.1.3 Fixed in — No fix listed GHSA-9g5q-2w5x-hmxf
- github.com/go-chi/chi/v5/middleware (Go) Vendor— Affected before 5.3.0 Fixed in 5.3.0 Patch available GHSA-9g5q-2w5x-hmxf
Remediation
- Fix · GHSA-9g5q-2w5x-hmxf github.com/go-chi/chi/v5/middleware (Go) Fixed in 5.3.0 Advisory →
Timeline
- 2026-10-03 Threatist record created from GHSA-9g5q-2w5x-hmxf
References
Sources
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences