CVE-2023-44487:
HTTP/2 Stream Cancellation Attack
5.3
CVSS ScoreBasic Information
CVE ID
GHSA ID
EPSS Score
-
CWE
Published
10/10/2023
Updated
3/7/2025
KEV Status
No
Technology
Go
Technical Details
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Package Name | Ecosystem | Vulnerable Versions | First Patched Version |
---|---|---|---|
golang.org/x/net | go | < 0.17.0 | 0.17.0 |
google.golang.org/grpc | go | >= 1.58.0, < 1.58.3 | 1.58.3 |
google.golang.org/grpc | go | >= 1.57.0, < 1.57.1 | 1.57.1 |
google.golang.org/grpc | go | < 1.56.3 | 1.56.3 |
org.apache.tomcat.embed:tomcat-embed-core | maven | >= 11.0.0-M1, < 11.0.0-M12 | 11.0.0-M12 |
org.apache.tomcat.embed:tomcat-embed-core | maven | >= 10.0.0, < 10.1.14 | 10.1.14 |
org.apache.tomcat.embed:tomcat-embed-core | maven | >= 9.0.0, < 9.0.81 | 9.0.81 |
org.apache.tomcat.embed:tomcat-embed-core | maven | >= 8.5.0, < 8.5.94 | 8.5.94 |
github.com/apple/swift-nio-http2 | swift | < 1.28.0 | 1.28.0 |
org.eclipse.jetty.http2:http2-common | maven | >= 9.3.0, < 9.4.53 | 9.4.53 |
org.eclipse.jetty.http2:http2-common | maven | >= 10.0.0, < 10.0.17 | 10.0.17 |
org.eclipse.jetty.http2:http2-common | maven | >= 11.0.0, < 11.0.17 | 11.0.17 |
org.eclipse.jetty.http2:http2-server | maven | >= 9.3.0, < 9.4.53 | 9.4.53 |
org.eclipse.jetty.http2:http2-server | maven | >= 10.0.0, < 10.0.17 | 10.0.17 |
org.eclipse.jetty.http2:http2-server | maven | >= 11.0.0, < 11.0.17 | 11.0.17 |
org.eclipse.jetty.http2:jetty-http2-common | maven | >= 12.0.0, < 12.0.2 | 12.0.2 |
org.eclipse.jetty.http2:jetty-http2-server | maven | >= 12.0.0, < 12.0.2 | 12.0.2 |
com.typesafe.akka:akka-http-core | maven | < 10.5.3 | 10.5.3 |
com.typesafe.akka:akka-http-core_2.13 | maven | < 10.5.3 | 10.5.3 |
com.typesafe.akka:akka-http-core_2.12 | maven | < 10.5.3 | 10.5.3 |
com.typesafe.akka:akka-http-core_2.11 | maven | <= 10.1.15 | |
org.apache.tomcat:tomcat-coyote | maven | >= 11.0.0-M1, < 11.0.0-M12 | 11.0.0-M12 |
org.apache.tomcat:tomcat-coyote | maven | >= 10.0.0, < 10.1.14 | 10.1.14 |
org.apache.tomcat:tomcat-coyote | maven | >= 9.0.0, < 9.0.81 | 9.0.81 |
org.apache.tomcat:tomcat-coyote | maven | >= 8.5.0, < 8.5.94 | 8.5.94 |
Vulnerability Intelligence
Miggo AI
Root Cause Analysis
The vulnerability is an HTTP/2 Rapid Reset attack, where a client sends a large number of RST_STREAM frames to overwhelm the server. The patch introduces rate limiting for these frames.
- I examined the commit
3798fe5f1564f27461390b4f6163f6ddfb21fd2d
which fixes the vulnerability inapple/swift-nio-http2
. - The primary change for rate limiting RST_STREAM frames is within the
DOSHeuristics.swift
file, specifically in theDOSHeuristics.process
method. A new state machine (HTTP2ResetFrameRateControlStateMachine
) was added and integrated intoprocess
to track and limit the rate of RST_STREAM frames. The absence of this rate-limiting logic inprocess
before the patch is the core vulnerability. - The
HTTP2ChannelHandler.swift
file shows thatHTTP2ChannelHandler.channelRead
is responsible for taking raw input, converting it to frames, and then callingdenialOfServiceValidator.process(frame)
. Thus,channelRead
is the function that feeds the potentially malicious stream of frames into theDOSHeuristics
component. - The other changes in the commit, such as modifications to initializers in
HTTP2ChannelHandler
to accept new configuration parameters for rate limiting, and the addition of new helper structs/protocols and test cases, are part of the mitigation strategy or testing, not the vulnerable code paths themselves during an attack. Therefore, the functions directly involved in processing the incoming frames without prior rate limiting (DOSHeuristics.process
) and the function responsible for passing these frames to the processing logic (HTTP2ChannelHandler.channelRead
) are identified as the vulnerable functions that would appear in a runtime profile during exploitation.