CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-54556

CVE-2026-54556: Heap Exhaustion and Denial of Service in http4s Ember HTTP/2 Backend via HPACK Bomb

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 27, 2026·6 min read·4 visits

Executive Summary (TL;DR)

The http4s Ember HTTP/2 backend is vulnerable to HPACK bomb attacks (CWE-409), allowing remote, unauthenticated attackers to trigger heap exhaustion and crash the server via highly compressed header payloads. This is addressed in versions 0.23.35 and 1.0.0-M47.

CVE-2026-54556 is a high-severity Denial of Service (DoS) vulnerability impacting the Ember HTTP/2 backend of http4s, a popular functional Scala interface for HTTP services. The vulnerability arises from an improper handling of highly compressed HPACK header blocks, which enables unauthenticated remote attackers to trigger severe memory amplification and crash the JVM runtime via an OutOfMemoryError.

Vulnerability Overview

The Ember HTTP/2 backend is a major component of the http4s ecosystem, which serves as a purely functional, type-safe HTTP interface for Scala applications. Security researchers and developers deploy Ember in highly concurrent production environments due to its lightweight design and integration with the Cats Effect runtime. Because the HTTP/2 protocol supports persistent multiplexed connections, exposing this port directly to the internet exposes a substantial attack surface.

The core vulnerability classified under CWE-409 (Improper Handling of Highly Compressed Data) manifests when the server attempts to parse HPACK-encoded HTTP/2 headers. Unauthenticated remote clients can exploit this process by delivering highly optimized compression payloads. The lack of proactive, size-based evaluation during the early stages of header expansion leads to significant data amplification.

By transmitting carefully structured compression blocks, an attacker forces the backend to expand minimal network frames into massive heap allocations. This uncontrolled expansion bypasses the standard header limit checks implemented at higher layers of the protocol stack. The final consequence of this execution flow is severe application-wide denial of service, rendering the Scala application unresponsive.

Root Cause Analysis

To understand the vulnerability, one must examine the mechanics of HPACK compression as defined in RFC 7541. HPACK reduces metadata overhead by utilizing both a static table of standard headers and a stateful dynamic table updated per connection. Rather than transmitting repetitive ASCII character sequences, HTTP/2 endpoints send lightweight integer indexes referencing previously declared strings.

Prior to the patch, the http4s Ember HPACK wrapper processed incoming header streams by calling Decoder.decode(is, listener) and storing the resulting name-value pairs directly in memory. The core defect lied in how the wrapper tracked the total payload size during decompression. It verified the physical frame size and literal string lengths, but it did not compute the decompressed footprint of indexed elements.

Furthermore, the original implementation failed to incorporate the mandatory 32-byte per-header overhead required by RFC 7540 and RFC 7541. This overhead represents the structural memory allocation required to track metadata fields within an operational HTTP/2 engine. Because the engine ignored both indexed string growth and structural overhead, an attacker could pack thousands of virtual headers into a few network bytes, leading to catastrophic heap allocation.

Code Analysis

The vulnerability was resolved in commit 6e8eccd64a6a74ab4811897881e95e0e1b3a818e by rewriting the decompression loop in Hpack.scala. The patched implementation now dynamically aggregates the total decompressed memory footprint inside the HeaderListener callback before assigning objects to the heap. If the running sum exceeds the configured maxHeaderListSize, the process terminates immediately and throws an error.

The following code comparison demonstrates the transition from vulnerable to secure tracking:

// Vulnerable Implementation (Implicitly trusting decoded data sizes)
val listener = new HeaderListener {
  def addHeader(name: Array[Byte], value: Array[Byte], sensitive: Boolean): Unit = {
    // Missing: Tracking of indexed sizes and structural overhead
    buffer.+=
      new String(name, StandardCharsets.ISO_8859_1) -> new String(value, StandardCharsets.ISO_8859_1)
  }
}
 
// Patched Implementation (Active tracking and inline enforcement)
var decodedSize = 0L
val listener = new HeaderListener {
  def addHeader(name: Array[Byte], value: Array[Byte], sensitive: Boolean): Unit = {
    // Enforce RFC 7541 32-byte overhead per entry to prevent amplification
    decodedSize += name.length + value.length + 32
    if (decodedSize > maxHeaderListSize) {
      throw EmberException.MessageTooLong(maxHeaderListSize.toInt)
    }
    buffer.+=
      new String(name, StandardCharsets.ISO_8859_1) -> new String(value, StandardCharsets.ISO_8859_1)
  }
}

The patch is technically complete because it combines early inline validation with structural byte tracking. By aborting execution inside the callback, the engine prevents the JVM from allocating massive heap objects for malicious payloads. Furthermore, complementary changes in H2Connection.scala establish connection timeouts to mitigate slow-rate continuation frame attacks.

Exploitation Methodology

Exploitation requires no special privileges and can be achieved on any exposed Ember HTTP/2 endpoint. The adversary must first establish an HTTP/2 session and perform the standard handshakes, negotiation, and setting exchanges. The target connection must remain open during the priming phase.

During the priming phase, the attacker sends multiple legitimate requests containing long, custom headers filled with randomized data. The server processes these requests and stores the massive strings inside the stateful HPACK dynamic table associated with that specific connection. Once the dynamic table is filled to capacity, the server is primed for the amplification phase.

Finally, the attacker transmits a single HTTP/2 HEADERS frame, followed by multiple CONTINUATION frames, consisting solely of index references to the newly stored large values. Upon receiving these frames, the server's HPACK engine dereferences the compact integer values, multiplying the memory requirements exponentially. The JVM immediately attempts to allocate gigabytes of raw strings, exhausting the garbage collector and halting the application.

Impact Assessment

The security impact of CVE-2026-54556 is classified as high-severity denial of service with a CVSS score of 8.2. An OutOfMemoryError in a JVM environment is an exceptionally destructive condition because it corrupts the stability of the entire process. Active worker threads crash, shared lock structures fail, and the runtime environment frequently enters an unrecoverable state.

In containerized deployments, such as Kubernetes clusters, an OOM event can cause the container to freeze without releasing its network ports. This state prevents active liveness probes from diagnosing the failure, leading to prolonged outages before automatic recovery processes can kick in. This vulnerability represents an efficient weapon for distributed or single-source denial of service attacks.

The CVSS v4.0 vector highlights the remote, low-complexity nature of this threat. While confidentiality and integrity remain unaffected, system availability is completely compromised. Given the simplicity of generating HPACK bomb payloads, exposed servers face severe operational risk if left unpatched.

Remediation & Defensive Design

Remediation requires upgrading the http4s dependency to version 0.23.35 or 1.0.0-M47. These versions integrate the patched Hpack.scala logic, establishing a reliable defense against memory amplification. Development teams should audit their build configuration files (such as build.sbt) to ensure transitive dependencies are fully resolved to the secure versions.

In scenarios where immediate dependency upgrades are not feasible, temporary workarounds can mitigate the risk. Administrators should disable HTTP/2 support on the Ember backend, forcing clients to negotiate HTTP/1.1 connections which do not rely on HPACK. Alternatively, deploying a hardier reverse proxy, such as Nginx or HAProxy, in front of the application can filter out malformed or overly large header sequences.

Furthermore, JVM-level flags should be tuned to handle heap exhaustion events gracefully. Specifying -XX:+CrashOnOutOfMemoryError or -XX:+ExitOnOutOfMemoryError ensures that the JVM process terminates cleanly when heap exhaustion occurs, enabling automated orchestrators to deploy fresh, healthy instances immediately.

Official Patches

http4sFix commit implementing active HPACK size decoding checks and timeouts.
http4sOfficial release release page containing the fix in 0.23.x.
http4sOfficial release release page containing the fix in 1.0.x.

Fix Analysis (1)

Technical Appendix

CVSS Score
8.2/ 10
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Affected Systems

http4s-ember-core_2.12http4s-ember-core_2.13http4s-ember-core_3

Affected Versions Detail

Product
Affected Versions
Fixed Version
http4s-ember-core
org.http4s
< 0.23.350.23.35
http4s-ember-core
org.http4s
>= 1.0.0-M1, < 1.0.0-M471.0.0-M47
AttributeDetail
CWE IDCWE-409 (Data Amplification)
Attack VectorNetwork (Remote, Unauthenticated)
CVSS Score8.2 (High)
Exploit StatusNone (No public PoC or active exploitation)
CISA KEV StatusNot Listed
Primary ImpactDenial of Service (JVM Heap Exhaustion via OOM)
Affected ComponentsEmber HTTP/2 backend in http4s-ember-core

MITRE ATT&CK Mapping

T1499.003Endpoint Denial of Service: Application Exhaustion
Impact
T1499.004Endpoint Denial of Service: Application Complexity Exploitation
Impact
CWE-409
Improper Handling of Highly Compressed Data (Data Amplification)

The product receives compressed input data and decompresses it, but it does not adequately limit the size of the decompressed output, allowing an attacker to consume excessive system resources (such as memory) by sending highly compressed payloads (amplification).

Vulnerability Timeline

Release preparation for the 1.0.0-M46 release branch begins.
2025-10-02
Vulnerability fix authored and committed by Justin Reardon.
2026-06-29
CVE-2026-54556 is officially published and GHSA-vmm3-xgcx-67hm is publicly disclosed.
2026-08-26

References & Sources

  • [1]GitHub Security Advisory GHSA-vmm3-xgcx-67hm
  • [2]Vulnerability Patch Commit
  • [3]Release Tag v0.23.35
  • [4]Release Tag v1.0.0-M47
  • [5]Official CVE Record (CVE.org)
  • [6]National Vulnerability Database (NVD)

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 2 hours ago•CVE-2026-54356
7.1

CVE-2026-54356: Missing Authorization in Budibase leading to Arbitrary S3 Upload URL Generation

CVE-2026-54356 is a missing authorization vulnerability (CWE-862) within the backend component of the Budibase low-code platform. The vulnerability exists inside the `@budibase/server` package in versions prior to 3.41.3. An authenticated user with the lowest privilege level can invoke the attachment upload URL endpoint directly and obtain an S3 pre-signed PutObject URL signed with the server's S3 credentials.

Alon Barad
Alon Barad
2 views•5 min read
•about 4 hours ago•CVE-2026-54553
5.4

CVE-2026-54553: Validation Bypass in starlette-admin REST API via Unvalidated Sort and Filter Fields

A validation bypass vulnerability exists in starlette-admin versions prior to 0.16.1. The administrative REST list API fails to validate user-controlled query parameters against server-side schemas. This allows authenticated users to sort or filter data using fields marked as hidden, non-sortable, or non-searchable. This behavior leads to unauthorized information exposure via blind sorting and denial of service via uncaught database exceptions.

Alon Barad
Alon Barad
3 views•6 min read
•about 5 hours ago•CVE-2026-54548
3.3

CVE-2026-54548: Persistent SSH Host Key Checking Disablement in Siemens kas

Prior to version 5.4, the Siemens kas setup utility unconditionally disabled SSH host key verification globally within the invoking user's persistent `~/.ssh/config` file when utilizing SSH keys. This configuration degradation persists after execution, leaving subsequent user SSH connections vulnerable to Man-in-the-Middle (MitM) attacks.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 6 hours ago•CVE-2026-54523
9.6

CVE-2026-54523: Privilege Escalation via Cross-Namespace Resource Generation in Kyverno

CVE-2026-54523 is a critical security vulnerability in the Kyverno policy engine (versions 1.18.0 up to 1.18.2) where the CEL generator library fails to validate target namespace boundaries. This allows unprivileged tenants with namespace-scoped policy creation permissions to bypass Kubernetes multi-tenancy limits and execute unauthorized cross-namespace resource creation, potentially escalating privileges to cluster administrator.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 7 hours ago•CVE-2026-54550
7.4

CVE-2026-54550: Path Traversal Vulnerability in IzPack Installer Unpacker

IzPack versions 5.2.6 and earlier are vulnerable to path traversal via UnpackerBase.unpack(). The vulnerability allows unauthenticated attackers to write arbitrary files to the host filesystem during the installation process by crafting malicious installer packages containing directory traversal sequences.

Alon Barad
Alon Barad
4 views•4 min read
•about 8 hours ago•CVE-2026-54511
8.6

CVE-2026-54511: Log Injection and Structured Data Key Injection in @logtape/syslog

CVE-2026-54511 is a critical security vulnerability in the @logtape/syslog package, which serves as the syslog sink for the LogTape logging library. The flaw is caused by a failure to neutralize C0 control characters in structured data values and to validate keys against RFC 5424 SD-NAME specifications when structured data output is enabled. Remote attackers can leverage this defect to terminate TCP syslog frames and append completely forged syslog records to downstream collectors, compromising the integrity of audit trails and SIEM databases.

Alon Barad
Alon Barad
3 views•6 min read