Miggo Logo

CVE-2023-44487:
HTTP/2 Stream Cancellation Attack

5.3

CVSS Score

Basic Information

EPSS Score
-
Published
10/10/2023
Updated
3/7/2025
KEV Status
No
Technology
TechnologyGo

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Package NameEcosystemVulnerable VersionsFirst Patched Version
golang.org/x/netgo< 0.17.00.17.0
google.golang.org/grpcgo>= 1.58.0, < 1.58.31.58.3
google.golang.org/grpcgo>= 1.57.0, < 1.57.11.57.1
google.golang.org/grpcgo< 1.56.31.56.3
org.apache.tomcat.embed:tomcat-embed-coremaven>= 11.0.0-M1, < 11.0.0-M1211.0.0-M12
org.apache.tomcat.embed:tomcat-embed-coremaven>= 10.0.0, < 10.1.1410.1.14
org.apache.tomcat.embed:tomcat-embed-coremaven>= 9.0.0, < 9.0.819.0.81
org.apache.tomcat.embed:tomcat-embed-coremaven>= 8.5.0, < 8.5.948.5.94
github.com/apple/swift-nio-http2swift< 1.28.01.28.0
org.eclipse.jetty.http2:http2-commonmaven>= 9.3.0, < 9.4.539.4.53
org.eclipse.jetty.http2:http2-commonmaven>= 10.0.0, < 10.0.1710.0.17
org.eclipse.jetty.http2:http2-commonmaven>= 11.0.0, < 11.0.1711.0.17
org.eclipse.jetty.http2:http2-servermaven>= 9.3.0, < 9.4.539.4.53
org.eclipse.jetty.http2:http2-servermaven>= 10.0.0, < 10.0.1710.0.17
org.eclipse.jetty.http2:http2-servermaven>= 11.0.0, < 11.0.1711.0.17
org.eclipse.jetty.http2:jetty-http2-commonmaven>= 12.0.0, < 12.0.212.0.2
org.eclipse.jetty.http2:jetty-http2-servermaven>= 12.0.0, < 12.0.212.0.2
com.typesafe.akka:akka-http-coremaven< 10.5.310.5.3
com.typesafe.akka:akka-http-core_2.13maven< 10.5.310.5.3
com.typesafe.akka:akka-http-core_2.12maven< 10.5.310.5.3
com.typesafe.akka:akka-http-core_2.11maven<= 10.1.15
org.apache.tomcat:tomcat-coyotemaven>= 11.0.0-M1, < 11.0.0-M1211.0.0-M12
org.apache.tomcat:tomcat-coyotemaven>= 10.0.0, < 10.1.1410.1.14
org.apache.tomcat:tomcat-coyotemaven>= 9.0.0, < 9.0.819.0.81
org.apache.tomcat:tomcat-coyotemaven>= 8.5.0, < 8.5.948.5.94

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot 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.

  1. I examined the commit 3798fe5f1564f27461390b4f6163f6ddfb21fd2d which fixes the vulnerability in apple/swift-nio-http2.
  2. The primary change for rate limiting RST_STREAM frames is within the DOSHeuristics.swift file, specifically in the DOSHeuristics.process method. A new state machine (HTTP2ResetFrameRateControlStateMachine) was added and integrated into process to track and limit the rate of RST_STREAM frames. The absence of this rate-limiting logic in process before the patch is the core vulnerability.
  3. The HTTP2ChannelHandler.swift file shows that HTTP2ChannelHandler.channelRead is responsible for taking raw input, converting it to frames, and then calling denialOfServiceValidator.process(frame). Thus, channelRead is the function that feeds the potentially malicious stream of frames into the DOSHeuristics component.
  4. 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.

Vulnerable functions

Only Mi**o us*rs **n s** t*is s**tion

WAF Protection Rules

WAF Rule

## *TTP/* R*pi* r*s*t *tt**k T** *TTP/* proto*ol *llows *li*nts to in*i**t* to t** s*rv*r t**t * pr*vious str**m s*oul* ** **n**l** *y s*n*in* * RST_STR**M *r*m*. T** proto*ol *o*s not r*quir* t** *li*nt *n* s*rv*r to *oor*in*t* t** **n**ll*tion in *

Reasoning

T** vuln*r**ility is *n *TTP/* R*pi* R*s*t *tt**k, w**r* * *li*nt s*n*s * l*r** num**r o* RST_STR**M *r*m*s to ov*rw**lm t** s*rv*r. T** p*t** intro*u**s r*t* limitin* *or t**s* *r*m*s. *. I *x*min** t** *ommit `**************************************