CVE-2023-44487: HTTP/2 rapid reset can cause excessive work in net/http

stdlib Updated 02 Oct 2025

Summary

11/10/2023
Yes i
Unrated
Not published

CVE-2023-39325: HTTP/2 rapid reset can cause excessive work in net/http. Affects stdlib across 2 version ranges.

< 1.20.10 >= 1.21.0-0, < 1.21.3

Fixed in 1.20.10 or 1.21.3, depending on the release line you run. How to fix ↓

Also tracked for

The same CVE-2023-39325 is tracked separately for each ecosystem and vendor. Its fix information is the same; the package and affected versions differ.

Free scan

Check if this vulnerability affects your application

Upload a manifest or SBOM and we'll show whether you're affected, plus every other risky package in the same scan.

Check my app free

No signup required · Results in about 60 seconds

Sponsored Devnack Your last release was probably never penetration tested Manual testing by engineers who build software, not an auditor's checklist. Trusted by teams at Swift and Google Talk to Devnack

Background

The stdlib package in Go provides a set of standard libraries for the Go programming language. The net/http package in the stdlib is used for building HTTP servers and clients. It includes functions like ListenAndServe, Serve, and Server.Serve, which handle HTTP requests and responses. The golang.org/x/net package is an extension to the stdlib package and provides additional networking capabilities. The http2 subpackage in golang.org/x/net implements the HTTP/2 protocol.

The vulnerability identified as CVE-2023-44487 affects the net/http and golang.org/x/net/http2 packages in Go. It allows a malicious HTTP/2 client to create and reset requests rapidly, leading to excessive resource consumption on the server. This can result in a denial-of-service (DoS) attack, where the server becomes overwhelmed and unable to handle legitimate requests.

Vulnerability Detail

The vulnerability arises due to the behavior of the HTTP/2 protocol in the net/http and golang.org/x/net/http2 packages. When a malicious client sends a large number of requests and immediately resets them, it can cause the server to consume excessive resources. The server allows a maximum number of concurrent streams (requests) defined by the http2.Server.MaxConcurrentStreams setting. By resetting an in-progress request, the attacker can create a new request while the previous one is still executing.

To mitigate this issue, the HTTP/2 servers now limit the number of simultaneously executing handler goroutines to the stream concurrency limit (MaxConcurrentStreams). New requests arriving when the limit is reached will be queued until a handler exits. If the request queue grows too large, the server will terminate the connection. The default stream concurrency limit is 250 streams per HTTP/2 connection, but it can be adjusted using the golang.org/x/net/http2 package's Server.MaxConcurrentStreams setting.

How To Fix

Latest published version: go1.25.5 as of 22 Oct 2026

go get stdlib@vgo1.25.5

Upgrading to it may include breaking changes; the versions below are the minimum fixed release for this vulnerability.

If you can't move to the latest

The minimum fixed version depends on the release line you run.

  • < 1.20.10 1.20.10
    go get stdlib@v1.20.10
  • >= 1.21.0-0, < 1.21.3 1.21.3
    go get stdlib@v1.21.3

Tip — Not sure which release line you're on? Vulert can find the fix for the version you are using. Scan free →

Workaround

There is no specific workaround mentioned for this vulnerability. However, as a general best practice, it is recommended to implement rate limiting or request throttling mechanisms in the server application to mitigate the impact of DoS attacks. These mechanisms can help limit the number of requests processed per client or per time interval, preventing excessive resource consumption.

Conclusion

The vulnerability CVE-2023-44487 in the net/http and golang.org/x/net/http2 packages allows a malicious HTTP/2 client to consume excessive server resources, leading to a denial-of-service (DoS) condition. To fix this vulnerability, developers should update to the fixed versions of the affected packages. Implementing rate limiting or request throttling mechanisms in the server application can also help mitigate the impact of DoS attacks. For further support on vulnerability remediation, contact DevNack.com.

See every vulnerability recorded for stdlib →

Share this vulnerability

FAQ

The vulnerability allows a malicious HTTP/2 client to consume excessive server resources by rapidly creating and resetting requests. This can lead to a denial-of-service (DoS) condition, where the server becomes overwhelmed and unable to handle legitimate requests.

You can use the Vulert Playground at Vulert Scanner to check if your application is affected by this vulnerability. The playground allows you to analyze your application's dependencies using the Gopkg.lock file without requiring any code or installation. It provides real-time monitoring and alerts for open-source vulnerabilities in software.

The default stream concurrency limit is 250 streams (requests) per HTTP/2 connection. This means that a single client can have up to 250 concurrent requests to the server. This limit can be adjusted using the golang.org/x/net/http2 package's Server.MaxConcurrentStreams setting.

While there is no specific workaround mentioned for this vulnerability, implementing rate limiting or request throttling mechanisms in the server application can help mitigate the impact of DoS attacks. These mechanisms can limit the number of requests processed per client or per time interval, preventing excessive resource consumption.

To update the affected packages, developers should use a package manager or dependency management tool. For projects using Go modules, the go.mod file can be updated with the required versions of the packages. Running 'go get -u' or 'go mod tidy' will fetch the updated versions. Manual installation can also be performed by downloading the source code and building it using the Go compiler.

Related vulnerabilities

Recent vulnerabilities recorded for stdlib.

How To Fix

Latest published version: go1.25.5 as of 22 Oct 2026

go get stdlib@vgo1.25.5

Upgrading to it may include breaking changes; the versions below are the minimum fixed release for this vulnerability.

If you can't move to the latest

The minimum fixed version depends on the release line you run.

  • < 1.20.10 1.20.10
    go get stdlib@v1.20.10
  • >= 1.21.0-0, < 1.21.3 1.21.3
    go get stdlib@v1.21.3

Tip — Not sure which release line you're on? Vulert can find the fix for the version you are using. Scan free →

Subscribe to Vulert on Telegram
Daily digest of new CVEs, critical and high severity, affected packages and fixes — plus a weekly roundup.
Join the channel →
Help improve this record
Report an issue or send feedback