Cloudanix VulnDB

CVE-2023-45288

High · 7.5

CVSS

7.5

EPSS

92.0%

Published

Apr 4, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Attend

A flaw in how some web servers handle web traffic allows an attacker to send a flood of junk data that can overload the server, making the service unavailable for legitimate users.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Denial Of Service
Component
Library
Class
Denial of service
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

An unauthenticated remote attacker can cause a denial-of-service condition on an HTTP/2-enabled endpoint. The vulnerability lies in the excessive processing of HTTP/2 CONTINUATION frames. Even after a server determines that a request's headers exceed the allowed size limit, it continues to parse all associated CONTINUATION frames. This allows an attacker to force the server to perform computationally expensive parsing operations, particularly with Huffman-encoded headers, leading to CPU resource exhaustion and rendering the service unresponsive.

Why it matters to the business

This vulnerability can lead to a complete denial of service for critical web applications, APIs, and services. An attacker can make your services unavailable to customers, partners, and internal users, resulting in direct revenue loss, reputational damage, and potential violation of Service Level Agreements (SLAs). The extremely high EPSS score indicates a high probability of active exploitation, making this a high-priority threat to business continuity.

How an attack unfolds

A remote, unauthenticated attacker targets a public-facing server that supports the HTTP/2 protocol. The attacker crafts and sends a specially formed HTTP/2 request that begins with a HEADERS frame and is followed by an excessive number of CONTINUATION frames. The cumulative size of the headers is intentionally larger than the server's configured limit. Despite deciding to ultimately reject the request, the vulnerable server is forced to parse every CONTINUATION frame to maintain the HPACK state. By sending a continuous stream of these requests, the attacker monopolizes the server's CPU resources, causing it to become unresponsive to legitimate traffic and leading to a denial-of-service.

How to fix it

The primary remediation is to upgrade all components that terminate HTTP/2 traffic to a patched version. This includes web servers, reverse proxies, load balancers, and application-layer libraries. Consult vendor advisories for specific patches addressing CVE-2023-45288 or the 'HTTP/2 CONTINUATION Flood' attack. If patching is not immediately possible, consider temporary mitigations such as applying rate limits on edge devices, using a Web Application Firewall (WAF) to limit the number of frames per HTTP/2 stream, or temporarily disabling HTTP/2 if the business impact is acceptable.

How to confirm the fix worked

To validate the fix, ensure that all relevant software components have been upgraded to a version that explicitly addresses CVE-2023-45288. After patching, you can use a security testing tool or a custom script to simulate the 'CONTINUATION Flood' attack against a non-production endpoint. A successfully patched system should terminate the malicious connection promptly without a significant increase in CPU usage. To identify exposure, inventory all HTTP/2-enabled endpoints and check their software versions against vendor advisories for this vulnerability.

Typical attack path

  1. The attacker identifies a target server, load balancer, or reverse proxy that accepts HTTP/2 connections.
  2. The attacker crafts a malicious HTTP/2 stream containing a HEADERS frame followed by an abnormally large number of CONTINUATION frames.
  3. The attacker sends the malicious stream to the target server over the network.
  4. The target server begins parsing the excessive frames, causing its CPU utilization to spike to 100%.
  5. The server becomes resource-exhausted and is unable to process legitimate user requests, resulting in a denial of service.

How to detect it

Detection of this attack is primarily behavioral. Monitor CPU utilization on HTTP/2-enabled servers for sustained, abnormally high levels. Analyze network traffic or server logs for an unusually high ratio of HTTP/2 CONTINUATION frames to HEADERS frames within a single stream. A high rate of HTTP/2 stream errors, particularly related to protocol errors or header size limits (e.g., HTTP 431), originating from a small number of source IPs can also indicate an attack. Some network security monitoring tools or WAFs may have specific signatures for 'HTTP/2 CONTINUATION Flood' that should be enabled.

  • request header fields too large
  • closing connection due to excessive continuation frames
  • HTTP/2 stream error: protocol error
  • HTTP/2 GOAWAY frame received with error code ENHANCE_YOUR_CALM
  • refused stream due to excessive headers

What your security team should do

  • Immediately patch all public-facing HTTP/2 endpoints, as the high CVSS score (7.5) and very high EPSS score (91.97%) indicate a significant and likely threat.
  • If patching is delayed, deploy mitigation rules on Web Application Firewalls (WAFs) or other edge devices to limit the number of HTTP/2 CONTINUATION frames per stream.
  • Implement monitoring and alerting for sustained high CPU utilization on servers that terminate HTTP/2 traffic, as this is the primary indicator of an ongoing attack.
  • Ensure network and server logging can capture metadata about HTTP/2 streams, such as frame counts and stream errors, to aid in detection and forensic analysis.

The record

An attacker may cause an HTTP/2 endpoint to read arbitrary amounts of header data by sending an excessive number of CONTINUATION frames. Maintaining HPACK state requires parsing and processing all HEADERS and CONTINUATION frames on a connection. When a request's headers exceed MaxHeaderBytes, no memory is allocated to store the excess headers, but they are still parsed. This permits an attacker to cause an HTTP/2 endpoint to read arbitrary amounts of header data, all associated with a request which is going to be rejected. These headers can include Huffman-encoded data which is significantly more expensive for the receiver to decode than for an attacker to send. The fix sets a limit on the amount of excess header frames we will process before closing a connection.

Affected packages

Ecosystem Package Introduced Fixed
Go golang.org/x/net 0 0.23.0
Go golang.org/x/net/http2 0 0.23.0
Go net/http 0 1.21.9
Go net/http 1.22.0-0 1.22.2
Go stdlib 0 1.21.9
AlmaLinux:8 delve 0 1.20.2-1.module_el8.9.0+3642+43318da8
AlmaLinux:8 delve 0 1.21.2-3.module_el8.10.0+3760+4dd778f9
AlmaLinux:8 git-lfs 0 3.2.0-3.el8_9
AlmaLinux:8 git-lfs 0 3.4.1-2.el8_10
AlmaLinux:8 go-toolset 0 1.20.12-1.module_el8.9.0+3728+f1d47c6f
AlmaLinux:8 go-toolset 0 1.21.9-1.module_el8.10.0+3840+edaca3c3
AlmaLinux:8 golang 0 1.20.12-8.module_el8.9.0+3818+ac9bcae6
AlmaLinux:8 golang 0 1.21.9-1.module_el8.10.0+3840+edaca3c3
AlmaLinux:8 golang-bin 0 1.20.12-8.module_el8.9.0+3818+ac9bcae6
AlmaLinux:8 golang-bin 0 1.21.9-1.module_el8.10.0+3840+edaca3c3
AlmaLinux:8 golang-docs 0 1.20.12-8.module_el8.9.0+3818+ac9bcae6
AlmaLinux:8 golang-docs 0 1.21.9-1.module_el8.10.0+3840+edaca3c3
AlmaLinux:8 golang-misc 0 1.20.12-8.module_el8.9.0+3818+ac9bcae6
AlmaLinux:8 golang-misc 0 1.21.9-1.module_el8.10.0+3840+edaca3c3
AlmaLinux:8 golang-src 0 1.20.12-8.module_el8.9.0+3818+ac9bcae6
AlmaLinux:8 golang-src 0 1.21.9-1.module_el8.10.0+3840+edaca3c3
AlmaLinux:8 golang-tests 0 1.20.12-8.module_el8.9.0+3818+ac9bcae6
AlmaLinux:8 golang-tests 0 1.21.9-1.module_el8.10.0+3840+edaca3c3
AlmaLinux:9 git-lfs 0 3.2.0-2.el9_3
AlmaLinux:9 git-lfs 0 3.4.1-2.el9_4
AlmaLinux:9 go-toolset 0 1.20.12-4.el9_3
AlmaLinux:9 go-toolset 0 1.21.9-2.el9_4
AlmaLinux:9 golang 0 1.20.12-4.el9_3
AlmaLinux:9 golang 0 1.21.9-2.el9_4
AlmaLinux:9 golang-bin 0 1.20.12-4.el9_3
AlmaLinux:9 golang-bin 0 1.21.9-2.el9_4
AlmaLinux:9 golang-docs 0 1.20.12-4.el9_3
AlmaLinux:9 golang-docs 0 1.21.9-2.el9_4
AlmaLinux:9 golang-misc 0 1.20.12-4.el9_3
AlmaLinux:9 golang-misc 0 1.21.9-2.el9_4
AlmaLinux:9 golang-src 0 1.20.12-4.el9_3
AlmaLinux:9 golang-src 0 1.21.9-2.el9_4
AlmaLinux:9 golang-tests 0 1.20.12-4.el9_3
AlmaLinux:9 golang-tests 0 1.21.9-2.el9_4
Bitnami golang 0 1.21.9
Chainguard aactl 0 0.4.12-r11
Chainguard actions-runner-controller 0 0.9.0-r1
Chainguard actions-runner-controller-compat 0 0.9.0-r1
Chainguard actions-runner-controller-fips 0 0.9.1-r0
Chainguard actions-runner-controller-fips-compat 0 0.9.1-r0
Chainguard addon-resizer 0 1.8.20-r1
Chainguard addon-resizer-compat 0 1.8.20-r1
Chainguard addon-resizer-fips 0 1.8.20-r1
Chainguard addon-resizer-fips-compat 0 1.8.20-r1
Chainguard amass 0 4.2.0-r8
Chainguard apko 0 0.14.0-r7
Chainguard argo-cd-2.10 0 2.10.7-r1
Chainguard argo-cd-2.10-compat 0 2.10.7-r1
Chainguard argo-cd-2.10-repo-server 0 2.10.7-r1
Chainguard argo-cd-2.8 0 2.8.16-r0
Chainguard argo-cd-2.8-compat 0 2.8.16-r0
Chainguard argo-cd-2.8-repo-server 0 2.8.16-r0
Chainguard argo-cd-2.9 0 2.9.12-r0
Chainguard argo-cd-2.9-compat 0 2.9.12-r0
Chainguard argo-cd-2.9-repo-server 0 2.9.12-r0
Chainguard argo-cd-fips-2.10 0 2.10.6-r1
Chainguard argo-cd-fips-2.10-compat 0 2.10.6-r1
Chainguard argo-cd-fips-2.10-repo-server 0 2.10.6-r1
Chainguard argo-cd-fips-2.8 0 2.8.15-r1
Chainguard argo-cd-fips-2.8-compat 0 2.8.15-r1
Chainguard argo-cd-fips-2.8-repo-server 0 2.8.15-r1
Chainguard argo-cd-fips-2.9 0 2.9.11-r1
Chainguard argo-cd-fips-2.9-compat 0 2.9.11-r1
Chainguard argo-cd-fips-2.9-repo-server 0 2.9.11-r1
Chainguard argo-workflow-cli 0 3.5.5-r5
Chainguard argo-workflow-cli 0 3.6.5-r2
Chainguard argo-workflow-cli-fips 0 3.5.5-r2
Chainguard argo-workflow-controller 0 3.5.5-r5
Chainguard argo-workflow-controller 0 3.6.5-r2
Chainguard argo-workflow-controller-compat 0 3.5.5-r5
Chainguard argo-workflow-controller-compat 0 3.6.5-r2
Chainguard argo-workflow-controller-compat-fips 0 3.5.5-r2
Chainguard argo-workflow-controller-fips 0 3.5.5-r2
Chainguard argo-workflow-executor 0 3.5.5-r5
Chainguard argo-workflow-executor 0 3.6.5-r2
Chainguard argo-workflow-executor-compat 0 3.5.5-r5
Chainguard argo-workflow-executor-compat 0 3.6.5-r2
Chainguard argo-workflow-executor-compat-fips 0 3.5.5-r2
Chainguard argo-workflow-executor-fips 0 3.5.5-r2
Chainguard argo-workflows 0 3.5.5-r5
Chainguard argo-workflows 0 3.6.5-r2
Chainguard argo-workflows-fips 0 3.5.5-r2
Chainguard argo-workflows-known-hosts 0 3.5.5-r5
Chainguard argo-workflows-known-hosts 0 3.6.5-r2
Chainguard argo-workflows-known-hosts-fips 0 3.5.5-r2
Chainguard argo-workflows-ui 0 3.5.5-r5
Chainguard argo-workflows-ui 0 3.6.5-r2
Chainguard atlantis 0 0.27.2-r2
Chainguard atlantis-fips 0 0.27.2-r5
Chainguard aws-ebs-csi-driver 0 1.29.1-r1
Chainguard aws-ebs-csi-driver-1.18 0 1.18.0-r13
Chainguard aws-ebs-csi-driver-1.19 0 1.19.0-r13
Chainguard aws-ebs-csi-driver-fips 0 1.29.1-r3
Chainguard aws-efs-csi-driver 0 1.7.7-r1
Chainguard aws-efs-csi-driver-fips 0 1.7.0-r8
Chainguard aws-efs-csi-driver-fips-1.6 0 1.6.0-r8
Chainguard aws-flb-cloudwatch 0 1.9.4-r8
Chainguard aws-flb-cloudwatch-compat 0 1.9.4-r8
Chainguard aws-flb-firehose 0 1.7.2-r8
Chainguard aws-flb-firehose-compat 0 1.7.2-r8
Chainguard aws-flb-kinesis 0 1.10.2-r9
Chainguard aws-flb-kinesis-compat 0 1.10.2-r9
Chainguard aws-load-balancer-controller 0 2.7.2-r2
Chainguard aws-load-balancer-controller-2.4.5 0 2.4.5-r9
Chainguard aws-load-balancer-controller-2.5 0 2.5.4-r4
Chainguard aws-load-balancer-controller-compat 0 2.7.2-r2
Chainguard aws-load-balancer-controller-compat-2.4.5 0 2.5.4-r4
Chainguard aws-load-balancer-controller-fips 0 2.7.2-r3
Chainguard aws-network-policy-agent 0 1.1.0-r1
Chainguard aws-network-policy-agent-compat 0 1.1.0-r1
Chainguard azure-aad-pod-identity-mic 0 1.8.17-r7
Chainguard azure-aad-pod-identity-nmi 0 1.8.17-r7
Chainguard bank-vaults 0 1.20.4-r12
Chainguard bank-vaults-fips 0 1.20.4-r9
Chainguard bank-vaults-template 0 1.20.4-r12
Chainguard bank-vaults-template-fips 0 1.20.4-r9
Chainguard bazelisk 0 1.19.0-r2
Chainguard bazelisk-default 0 1.19.0-r2
Chainguard bincapz 0 0.8.0-r1
Chainguard bom 0 0.6.0-r2
Chainguard boring-registry 0 0.13.2-r4
Chainguard boring-registry-fips 0 0.14.0-r0
Chainguard buf 0 1.31.0-r0
Chainguard buildctl 0 0.13.1-r2
Chainguard buildkitd 0 0.13.1-r2
Chainguard caddy 0 2.7.6-r8
Chainguard caddy-fips 0 2.7.6-r5
Chainguard caddy-man 0 2.7.6-r5
Chainguard caddy-man 0 2.7.6-r8
Chainguard caddy-src 0 2.7.6-r8
Chainguard cadvisor 0 0.49.1-r5
Chainguard cadvisor-compat 0 0.49.1-r5
Chainguard cadvisor-fips 0 0.49.1-r4
Chainguard calico 0 3.27.3-r1
Chainguard calico-apiserver 0 3.27.3-r1
Chainguard calico-app-policy 0 3.27.3-r1
Chainguard calico-cni 0 3.27.3-r1
Chainguard calico-cni-compat 0 3.27.3-r1
Chainguard calico-cni-fips-3.25-compat 0 3.25.2-r7
Chainguard calico-cni-fips-compat 0 3.27.3-r1
Chainguard calico-felix 0 3.27.3-r1
Chainguard calico-fips 0 3.27.3-r1
Chainguard calico-fips-3.25 0 3.25.2-r7
Chainguard calico-fips-apiserver 0 3.27.3-r1
Chainguard calico-fips-apiserver-3.25 0 3.25.2-r7
Chainguard calico-fips-app-policy 0 3.27.3-r1
Chainguard calico-fips-app-policy-3.25 0 3.25.2-r7
Chainguard calico-fips-cni 0 3.27.3-r1
Chainguard calico-fips-cni-3.25 0 3.25.2-r7
Chainguard calico-fips-felix 0 3.27.3-r1
Chainguard calico-fips-felix-3.25 0 3.25.2-r7
Chainguard calico-fips-key-cert-provisioner 0 3.27.3-r1
Chainguard calico-fips-kube-controllers 0 3.27.3-r1
Chainguard calico-fips-kube-controllers-3.25 0 3.25.2-r7
Chainguard calico-fips-node 0 3.27.3-r1
Chainguard calico-fips-node-3.25 0 3.25.2-r7
Chainguard calico-fips-pod2daemon 0 3.27.3-r1
Chainguard calico-fips-pod2daemon-3.25 0 3.25.2-r7
Chainguard calico-fips-typha-client 0 3.27.3-r1
Chainguard calico-fips-typha-client-3.25 0 3.25.2-r7
Chainguard calico-fips-typhad 0 3.27.3-r1
Chainguard calico-fips-typhad-3.25 0 3.25.2-r7
Chainguard calico-key-cert-provisioner 0 3.27.3-r1
Chainguard calico-kube-controllers 0 3.27.3-r1
Chainguard calico-node 0 3.27.3-r1
Chainguard calico-pod2daemon 0 3.27.3-r1
Chainguard calico-pod2daemon-flexvol-compat 0 3.27.3-r1
Chainguard calico-typha-client 0 3.27.3-r1
Chainguard calico-typhad 0 3.27.3-r1
Chainguard calicoctl 0 3.27.3-r1
Chainguard calicoctl-fips 0 3.27.3-r1
Chainguard calicoctl-fips-3.25 0 3.25.2-r7
Chainguard capslock 0 0.2.2-r1
Chainguard cass-operator 0 1.19.1-r1
Chainguard cass-operator-compat 0 1.19.1-r1
Chainguard cass-operator-compat-fips 0 1.19.1-r1
Chainguard cass-operator-config 0 1.19.1-r1
Chainguard cass-operator-fips 0 1.19.1-r1
Chainguard cass-operator-fips-no-pvc-delete 0 1.19.1-r2
Chainguard cass-operator-fips-no-pvc-delete-compat 0 1.19.1-r2
Chainguard cert-exporter 0 2.12.0-r3
Chainguard cert-exporter-fips 0 2.12.0-r4
Chainguard cert-manager-1.12 0 1.12.9-r3
Chainguard cert-manager-1.12-acmesolver 0 1.12.9-r3
Chainguard cert-manager-1.12-cainjector 0 1.12.9-r3
Chainguard cert-manager-1.12-controller 0 1.12.9-r3
Chainguard cert-manager-1.12-webhook 0 1.12.9-r3
Chainguard cert-manager-1.13 0 1.13.5-r2
Chainguard cert-manager-1.13-acmesolver 0 1.13.5-r2
Chainguard cert-manager-1.13-cainjector 0 1.13.5-r2
Chainguard cert-manager-1.13-controller 0 1.13.5-r2
Chainguard cert-manager-1.13-webhook 0 1.13.5-r2
Chainguard cert-manager-1.14 0 1.14.4-r3
Chainguard cert-manager-1.14-acmesolver 0 1.14.4-r3
Chainguard cert-manager-1.14-cainjector 0 1.14.4-r3

Related vulnerabilities