Transport Layer Security (TLS) is one of the foundational technologies of the modern Internet. Every day, billions of encrypted connections are established between web browsers, APIs, cloud platforms, VPNs, email servers, financial institutions, and countless Internet-connected devices. Behind the scenes, one library has quietly become the backbone of much of this encrypted communication: OpenSSL.
For over two decades, OpenSSL has powered secure communications across Linux servers, enterprise applications, cloud infrastructure, IoT devices, load balancers, web servers, and networking appliances. Whether a user logs into an online banking portal, accesses a Kubernetes-hosted application, or simply visits an HTTPS website, there is a good chance that OpenSSL is involved somewhere in the TLS negotiation process.
Because of this enormous deployment footprint, even subtle implementation flaws can have far-reaching consequences. Not every OpenSSL vulnerability leads to remote code execution or cryptographic compromise. Sometimes, a seemingly harmless design decision buried deep inside the TLS parsing logic can create entirely new attack surfaces that are difficult to detect using conventional security tools.
That is precisely the case with HollowByte, a newly disclosed denial-of-service vulnerability discovered by Okta’s Red Team. Unlike traditional denial-of-service attacks that overwhelm a server with bandwidth or force it to perform expensive cryptographic operations, HollowByte exploits a much earlier stage of the TLS handshake. By sending as little as 11 bytes of carefully crafted data, an unauthenticated attacker can convince OpenSSL to reserve up to 131 KB of heap memory for a handshake message that never actually arrives.
At first glance, allocating 131 KB may not sound particularly dangerous. Modern servers routinely allocate far more memory for active connections. The real problem lies in when OpenSSL performs the allocation and how Linux’s memory allocator behaves afterward. On systems using the GNU C Library (glibc), repeatedly triggering these allocations can fragment the heap, causing memory usage to grow steadily even after malicious connections have been closed. Over time, a server can exhaust available RAM, eventually triggering the Linux Out-of-Memory (OOM) Killer and terminating critical services.
Perhaps the most unusual aspect of HollowByte is not its technical implementation but how it was disclosed. OpenSSL quietly shipped a fix on June 9, 2026, without assigning a CVE identifier, publishing a security advisory, or mentioning the change in the project’s release notes. The issue was internally categorized as a “bug or hardening fix” rather than a security vulnerability. While that decision aligns with OpenSSL’s own security policy, it also means that many organizations relying on CVE-driven vulnerability management pipelines may never realize they are running a vulnerable version unless they actively review upstream code changes. This has sparked considerable discussion within the security community about the limitations of automated patch management and the importance of transparent security communication.
In this article, we’ll examine how HollowByte works under the hood, why such a small network payload can reserve large amounts of server memory, how glibc’s allocator unintentionally amplifies the impact, why conventional connection limits offer little protection, and what organizations should do to mitigate the risk.
Understanding the TLS Handshake
To appreciate why HollowByte works, it’s important to understand how a TLS connection is established before any encrypted communication takes place.
Whenever a client connects to an HTTPS server, the two systems first perform a TLS handshake. This negotiation allows both parties to agree on encryption algorithms, exchange cryptographic material, authenticate identities, and derive the session keys that will later protect application traffic.
Although TLS has evolved significantly over the years, the initial handshake still follows the same general sequence.
📬 Stay Ahead of Cyber Threats
Get the latest cybersecurity news, critical vulnerabilities, threat intelligence, tutorials, and exclusive giveaways delivered straight to your inbox. No spam. Unsubscribe anytime.
Subscribe to the Newsletter →
The very first message, ClientHello, is arguably the most important. It contains information such as:
- The TLS protocol versions supported by the client
- A random value used during key generation
- Supported cipher suites
- Compression methods
- Extensions such as Server Name Indication (SNI)
- Application Layer Protocol Negotiation (ALPN)
- Supported signature algorithms
- Key exchange parameters
Only after successfully parsing this message can the server continue negotiating the encrypted session.
Before OpenSSL can parse any of these fields, however, it first needs to determine how much data it should read.
Every TLS Handshake Begins with Just Four Bytes
Each TLS handshake message begins with a compact header.
+-------------+----------------------+| 1 Byte Type | 3 Byte Length Field |+-------------+----------------------+
The first byte identifies the handshake message type. In this case, the value represents ClientHello.
The following three bytes specify the size of the handshake body.
This length field allows OpenSSL to determine how many additional bytes should be read from the socket before attempting to parse the message.
Under normal circumstances, this is entirely reasonable.
A legitimate client sends the handshake header immediately followed by the remainder of the ClientHello message. OpenSSL reads the declared amount of data, validates the contents, and proceeds with the TLS negotiation.
The vulnerability exists because older versions of OpenSSL trusted the declared length before confirming that the client would actually transmit that much data.
How OpenSSL Processes an Incoming TLS Handshake
Internally, the TLS stack performs several steps before a ClientHello reaches the parser.
A simplified view of the process looks like this:
TCP Socket │ ▼Receive TLS Record │ ▼Read Handshake Header │ ▼Extract Declared Length │ ▼Allocate Receive Buffer │ ▼Receive Remaining Data │ ▼Parse ClientHello

At first glance, allocating the receive buffer immediately after reading the length field appears to be an efficient design.
If a client claims it is about to send a 64 KB handshake, allocating a 64 KB buffer up front avoids repeated reallocations while additional packets arrive.
This optimization has existed in networking software for decades because most clients are honest. Network protocols routinely rely on length fields to simplify parsing and improve performance.
Unfortunately, network protocols must also assume that every field supplied by a remote peer could be malicious.
HollowByte demonstrates what happens when those two assumptions collide.
The Root Cause
The vulnerability stems from a surprisingly small sequence of events.
Imagine an attacker initiates a TCP connection to an HTTPS server.
Instead of transmitting a complete ClientHello message, they send only the handshake header.
Handshake Type : ClientHelloDeclared Length: 131072 bytes
That is enough information for OpenSSL to believe that a ClientHello message of approximately 131 KB is about to arrive.
Older OpenSSL releases immediately allocate a receive buffer large enough to accommodate the declared size.
Conceptually, the process resembles the following logic:
uint32_t length = read_handshake_length();buffer = OPENSSL_malloc(length);read(socket, buffer, length);
Notice what has happened here.
The memory allocation occurs before OpenSSL has received the actual handshake data.
At this stage, the library has not verified that:
- the client intends to complete the handshake,
- the payload actually exists,
- the connection is legitimate, or
- the message contents are valid.
The only thing OpenSSL knows is that three bytes supplied by an untrusted remote peer claim a message of a certain size is about to arrive.
Normally, that assumption holds true.
For legitimate TLS clients, the remaining packets follow immediately, the buffer is filled, the ClientHello is parsed, and the connection continues without issue.
A malicious client, however, simply stops transmitting data.
The worker thread remains blocked, waiting for the rest of the message.
The promised 131 KB never arrives.
Meanwhile, the allocated heap buffer remains reserved for that connection.
No encryption has occurred.
No certificates have been exchanged.
No key agreement has taken place.
No authentication has happened.
The server has consumed a significant amount of memory based solely on an attacker-controlled length field.
Why Only Eleven Bytes?
One of the most surprising aspects of HollowByte is the incredibly small amount of data required to trigger the allocation.
Researchers demonstrated that just 11 bytes can cause OpenSSL to reserve approximately 131 KB of memory.
The attack packet contains little more than:
TLS Record Header↓Handshake Header↓Length Field
There is no complete ClientHello.
No cipher suites.
No supported groups.
No signature algorithms.
No TLS extensions.
No ALPN.
No SNI.
No certificates.
Nothing that would normally be associated with a TLS negotiation.
The server never reaches the stage where any of those structures are parsed.
Instead, it allocates memory based entirely on the declared handshake length and then waits indefinitely for the remaining bytes to arrive.
This is what makes HollowByte fundamentally different from many previous TLS denial-of-service attacks. The attacker spends almost no bandwidth while forcing the server to reserve a disproportionately large amount of memory.
The asymmetry is striking. A payload measured in bytes can consume resources measured in hundreds of kilobytes. When repeated across many concurrent connections, that imbalance quickly begins to favor the attacker.
Why Does the Limit Stop at 131 KB?
Some readers may wonder why the attacker cannot simply request several megabytes or even gigabytes of memory.
The answer lies within the TLS protocol itself.
The handshake length field occupies three bytes, theoretically allowing values up to 16 MB. However, TLS implementations do not blindly accept the theoretical maximum. Instead, they enforce practical upper limits defined by protocol rules and implementation safeguards.
For ClientHello messages, OpenSSL imposes a maximum acceptable handshake size of approximately 131,072 bytes (128 KiB). Any larger value is rejected during processing.
Ironically, this protection is what determines the attacker’s allocation ceiling.
The attacker cannot force OpenSSL to allocate unlimited memory in a single connection. Instead, they repeatedly request the maximum permitted allocation. While each individual buffer is relatively modest, the cumulative effect becomes significant when hundreds or thousands of such connections are established simultaneously.
This design explains why HollowByte is not a classic “allocate unlimited memory” vulnerability. Rather, it is a resource amplification attack where a carefully chosen upper limit, multiplied across many connections, gradually exhausts server memory.
Why This Isn’t Just Another Slowloris Attack
At first glance, HollowByte resembles the classic Slowloris attack. Both techniques involve opening connections and deliberately sending incomplete requests. Both rely on the server waiting for data that never arrives.
However, the similarities largely end there.
Slowloris primarily targets HTTP servers by keeping sockets occupied with partially transmitted HTTP headers. Its objective is to exhaust the server’s connection pool, preventing legitimate clients from establishing new sessions. Memory consumption is generally a secondary concern.
HollowByte attacks a much earlier layer of the network stack. The malicious traffic never reaches HTTP at all. Instead, it abuses the TLS handshake before any web request has been processed.
More importantly, HollowByte targets heap memory rather than connection capacity. Each connection forces OpenSSL to reserve a substantial receive buffer, and as researchers discovered, those allocations interact with glibc in a way that causes long-term heap fragmentation. As a result, the attack continues to affect memory usage even after the malicious connections have disappeared.
This distinction makes HollowByte considerably more difficult to mitigate using traditional defenses. Rate limiting, SYN cookies, reverse proxies, and connection thresholds are designed to manage excessive numbers of connections. HollowByte, on the other hand, focuses on maximizing memory consumption per connection, allowing an attacker to remain well below conventional connection limits while steadily degrading server stability.
How glibc Turns a Temporary Allocation into a Persistent Problem
If HollowByte only caused OpenSSL to allocate memory temporarily, its impact would be relatively limited. Once the attacker disconnected, the allocated buffer would be released, the operating system would reclaim the memory, and the server would continue operating normally.
That is not what happens.
The true severity of HollowByte emerges only when it interacts with the GNU C Library (glibc), the standard C runtime used by most Linux distributions. Rather than immediately returning freed memory to the operating system, glibc attempts to retain recently freed memory blocks so they can be reused by future allocations. Under normal workloads, this behavior improves application performance by reducing the overhead associated with repeatedly requesting memory from the kernel.
HollowByte exploits this optimization.
Every malicious connection causes OpenSSL to allocate a receive buffer whose size is controlled by the attacker. When the attacker closes the connection, OpenSSL correctly frees that buffer. From the application’s perspective, there is no memory leak because every allocation is eventually paired with a corresponding free() operation.
The allocator, however, behaves differently.
Instead of releasing those pages back to Linux, glibc keeps them inside its internal memory arenas, expecting that future allocations of similar sizes will reuse the freed space. This strategy works exceptionally well for predictable workloads where applications repeatedly allocate and free objects of similar sizes.
The attack deliberately prevents that reuse from occurring.
By slightly varying the advertised TLS handshake length on every connection, the attacker forces OpenSSL to request buffers of many different sizes. Instead of reusing previously freed chunks, glibc continually creates additional fragmented regions within the process heap.
Over time, the server accumulates increasing amounts of memory that are technically free but practically unusable.
This distinction is important because the process is not leaking memory in the traditional sense. Every allocation is released correctly. The problem lies in how those released allocations become scattered throughout the heap, preventing efficient reuse and causing the process’s resident memory footprint to continue growing.
Understanding Heap Fragmentation
Heap fragmentation is a concept that is often misunderstood because applications can simultaneously report both free memory and increasing memory usage.
Imagine a freshly started server process whose heap looks like this:
+-----------------------------------------------------------+| Free Heap Space |+-----------------------------------------------------------+
As TLS connections arrive, OpenSSL allocates buffers to process incoming handshake messages.
+---------+---------+---------+---------+---------+| BufferA | BufferB | BufferC | BufferD | BufferE |+---------+---------+---------+---------+---------+
When those connections terminate, the buffers are freed.
Ideally, the allocator could merge those free regions back into one large contiguous block.
+-----------------------------------------------------------+| Free Heap Space |+-----------------------------------------------------------+
However, HollowByte intentionally disrupts this process.
Each malicious connection advertises a slightly different handshake length.
Instead of requesting five identical 131 KB buffers, the attacker continuously requests allocations that differ just enough to prevent efficient reuse.
Eventually, the heap begins to resemble something like this:
+------+----+----------+-----+-----------+----+-------+|Used |Free| Used |Free | Used |Free| Used |+------+----+----------+-----+-----------+----+-------+

Although plenty of free memory exists, it is broken into many small regions scattered throughout the heap.
Future allocations requiring larger contiguous regions cannot reuse those fragments efficiently, forcing glibc to request additional pages from the operating system instead.
As this cycle repeats, the process’s Resident Set Size (RSS) continues to increase even though the application itself is correctly freeing every allocation.
This phenomenon explains why memory consumption remains elevated long after the attack has ended.
Resident Memory Continues to Grow
One of the observations made during Okta’s testing was that memory usage did not immediately decrease after malicious clients disconnected.
Administrators monitoring tools such as top, htop, or Prometheus would see resident memory steadily increasing despite relatively low CPU utilization and only a modest number of active TLS connections.
This can be confusing because traditional memory leaks usually exhibit a direct relationship between active allocations and memory consumption.
HollowByte behaves differently.
The application believes memory has been freed.
glibc believes the freed memory should remain available for future allocations.
Linux therefore keeps those pages mapped into the process.
The result is a server whose memory footprint appears to grow continuously without any obvious explanation.
Eventually, enough fragmented pages accumulate that the kernel is forced to reclaim memory elsewhere or invoke the Out-of-Memory Killer to terminate the affected process.
For production systems, this creates an unusual operational challenge. The attack may have stopped minutes or even hours earlier, yet memory usage continues to remain unusually high. Restarting the service immediately restores normal memory consumption, further reinforcing the misconception that the application itself has a memory leak when the underlying problem is actually allocator fragmentation.
Why Conventional Defenses Offer Little Protection
Most denial-of-service mitigation strategies focus on limiting the number of simultaneous client connections.
Load balancers enforce connection thresholds.
Firewalls implement SYN flood protection.
Reverse proxies terminate idle connections after configurable timeouts.
Web servers impose limits on concurrent sessions per client.
These controls are extremely effective against attacks that rely on exhausting file descriptors or keeping thousands of sockets open simultaneously.
HollowByte targets a completely different resource.
Instead of maximizing the number of connections, the attacker attempts to maximize memory consumed by each individual connection.
This distinction fundamentally changes the defensive landscape.
A server configured to allow 20,000 simultaneous TLS sessions may never approach that limit during a HollowByte attack. Instead, only a few thousand carefully crafted connections could consume several gigabytes of memory while remaining comfortably below configured connection thresholds.
From the perspective of many monitoring systems, nothing appears particularly unusual. CPU utilization remains relatively low because almost no cryptographic work is being performed. Network bandwidth remains modest because the attacker transmits only a few bytes before stalling. Connection counts may remain well within acceptable limits.
The only resource steadily disappearing is available memory.
This asymmetry makes HollowByte considerably more difficult to detect using traditional denial-of-service metrics.
Real-World Testing Demonstrates the Impact
To understand whether HollowByte represented a theoretical concern or a practical threat, Okta’s Red Team evaluated the attack against an NGINX server linked against vulnerable versions of OpenSSL.
The results demonstrated that the allocator behavior was not merely an academic observation.
On a virtual machine equipped with 1 GB of RAM, repeated malicious TLS handshakes caused approximately 547 MB of memory to become fragmented and effectively unavailable. Eventually, Linux terminated the NGINX worker process through the Out-of-Memory Killer despite the attack requiring only minimal network traffic.
The researchers repeated the experiment on a considerably larger system with 16 GB of memory.
Although the server possessed significantly more RAM, the attack still caused approximately 25 percent of the system’s physical memory to become unavailable due to heap fragmentation. Importantly, this occurred without exceeding configured connection limits, illustrating why many conventional rate-limiting strategies fail to mitigate the attack effectively.
These findings highlight that HollowByte is not simply about exhausting memory through brute force. Instead, it gradually reduces the amount of memory the operating system can use efficiently, allowing relatively modest traffic volumes to create disproportionately large operational consequences.
Why OpenSSL Quietly Fixed the Issue
One of the more unusual aspects of HollowByte is not its exploitation technique but the way it was handled by the OpenSSL project.
The vulnerability was addressed in the June 9 releases of OpenSSL (v4.0.1) with patches being backported to v3.x.x and yet the update was not accompanied by a CVE identifier, a dedicated security advisory, or even a changelog entry explicitly describing the issue. Instead, the change was internally classified as a bug or hardening improvement rather than a security vulnerability. They resolved the issue by moving to incremental buffer growth (merged in PRs #30792, #30793, and #30794).
From OpenSSL’s perspective, the reasoning is understandable. The allocation performed by the vulnerable code is bounded by protocol-defined limits, and the library eventually frees every allocated buffer. Viewed in isolation, this behavior resembles an implementation inefficiency rather than a classic memory corruption vulnerability.
Security researchers, however, have taken a different view.
The combination of attacker-controlled allocations, persistent heap fragmentation, and the ability to exhaust system memory without authentication transforms what appears to be an ordinary implementation detail into a practical denial-of-service attack. The absence of a CVE also complicates enterprise vulnerability management because many organizations rely heavily on vulnerability scanners, SBOM analysis, and automated patch management systems that use CVE identifiers to prioritize updates.
Without a formal advisory, vulnerable deployments can remain invisible even though a fix already exists upstream.
For defenders, HollowByte serves as a reminder that not every important security update arrives with a severity rating or a headline-grabbing CVE. Sometimes the most significant patches are hidden among what appear to be ordinary maintenance releases.
Affected Versions
According to Okta’s disclosure and the corresponding OpenSSL fixes released on June 9, 2026, HollowByte affects all upstream OpenSSL releases prior to the following patched versions:
OpenSSL Branch Fixed Version Vulnerable Versions 4.0.x 4.0.1 4.0.0 and earlier 3.6.x 3.6.3 3.6.2 and earlier 3.5.x 3.5.7 3.5.6 and earlier 3.4.x 3.4.6 3.4.5 and earlier 3.0.x (LTS) 3.0.21 3.0.20 and earlier
Administrators should note that these version numbers apply to upstream OpenSSL releases. Enterprise Linux distributions such as Red Hat Enterprise Linux, Ubuntu LTS, Debian, SUSE, Oracle Linux, and Amazon Linux frequently backport security fixes without updating the upstream version string. As a result, an installed package may still report an older OpenSSL version even though the HollowByte fix has already been incorporated.
For this reason, relying solely on the output of commands such as:
openssl version
may lead to incorrect conclusions. Instead, administrators should consult their operating system vendor’s security advisories, package changelogs, or update notices to confirm whether the relevant patch has been backported.
If your organization builds OpenSSL directly from source rather than using distribution packages, upgrading to one of the fixed upstream releases is strongly recommended. After installing the updated library, restart any services that dynamically link against OpenSSL, including web servers, reverse proxies, VPN services, mail servers, and application runtimes, to ensure the patched library is loaded into memory.
Inside the Patch: How OpenSSL Fixed HollowByte
Although the public discussion surrounding HollowByte has focused primarily on the attack itself, the fix is equally interesting because it addresses the problem without fundamentally redesigning the TLS handshake. Rather than introducing new protocol restrictions or reducing the maximum permitted ClientHello size, the OpenSSL developers changed when memory is allocated during handshake processing.
In vulnerable versions, the library trusted the length field contained in the handshake header immediately after reading it from the network. Once the length had been parsed, OpenSSL reserved enough memory to accommodate the entire message, assuming the client would eventually transmit the remaining bytes.
Conceptually, the old logic resembled the following:
Read Handshake Header↓Read Length↓Allocate Entire Buffer↓Receive Payload↓Parse Message
The flaw wasn’t that the buffer was eventually freed. It was that the allocation occurred before the server had any evidence that the client intended to complete the handshake.
The patched implementation changes this sequence significantly.
Rather than immediately reserving the maximum requested memory, OpenSSL now waits until additional handshake data has actually been received before expanding the receive buffer. Instead of allowing an attacker-controlled length field to dictate memory allocation, the library gradually grows the buffer as real network data arrives.
From a security perspective, this subtle design change breaks the attack entirely.
An attacker may still advertise a large handshake message, but unless they actually transmit that data, OpenSSL no longer commits a correspondingly large amount of heap memory. Since the amplification factor disappears, the attack loses its effectiveness before fragmentation ever becomes an issue.
This illustrates an important principle in secure software engineering: metadata supplied by an untrusted peer should rarely dictate resource allocation until the associated data has been verified.
Which Systems Are Most Likely to Be Affected?
One of the reasons HollowByte has attracted significant attention is the sheer number of applications that depend on OpenSSL. Unlike vulnerabilities confined to a single web server or programming language, OpenSSL serves as a common cryptographic foundation across a wide range of software.
Any application that terminates TLS using a vulnerable upstream version of OpenSSL could potentially inherit the flaw. This includes popular web servers such as NGINX and Apache HTTP Server, reverse proxies like HAProxy, mail servers, VPN gateways, API gateways, container ingress controllers, and numerous applications written in languages such as Python, PHP, Ruby, Perl, and C that dynamically link against the system’s OpenSSL libraries.
Modern cloud-native environments deserve particular attention. Kubernetes clusters often rely on ingress controllers to terminate thousands of TLS sessions every second before forwarding requests to backend services. A successful HollowByte attack against such an ingress layer could reduce available memory on the node hosting the controller, degrading performance for unrelated workloads sharing the same infrastructure.
Similarly, load balancers deployed at the edge of enterprise networks frequently process far more TLS negotiations than the applications behind them. Because these systems concentrate incoming encrypted traffic, they also become attractive targets for resource exhaustion attacks.
That said, vulnerability depends on the OpenSSL version actually in use. Many Linux distributions, particularly enterprise-focused ones such as Red Hat Enterprise Linux, backport security fixes while preserving the original upstream version number. As a result, version strings alone cannot reliably determine exposure. Administrators should consult their distribution’s security advisories or package changelogs to verify whether the relevant patch has already been incorporated.
Detecting HollowByte in Production
Unlike many denial-of-service attacks, HollowByte produces remarkably little network traffic.
A security operations team monitoring inbound bandwidth may observe almost nothing unusual. There is no sustained flood of gigabits per second, no overwhelming burst of TCP SYN packets, and no excessive CPU utilization caused by expensive cryptographic operations.
Instead, the earliest indicators appear in memory metrics.
One of the clearest warning signs is a steady increase in a process’s Resident Set Size (RSS) despite relatively stable application load. If memory consumption continues to climb while request volume remains unchanged, administrators should investigate whether incomplete TLS handshakes are accumulating.
Application logs may also reveal an unusually large number of TLS negotiation failures or connections terminating before the ClientHello has been fully received. While occasional incomplete handshakes are common on the public Internet, sustained spikes deserve further investigation.
Kernel logs provide another valuable source of evidence. If the Linux Out-of-Memory Killer begins terminating TLS-terminating processes such as NGINX or HAProxy despite moderate CPU utilization and normal connection counts, allocator fragmentation should be considered among the possible causes.
Organizations with advanced observability platforms may also monitor allocator behavior directly. Metrics exposing heap usage, fragmentation ratios, or abnormal growth in process memory can provide early warning before services become unstable.
Perhaps the most deceptive characteristic of HollowByte is that it does not immediately resemble an active attack. Servers may continue functioning for hours while memory usage gradually increases. By the time administrators notice degraded performance, the malicious traffic may already have stopped.
Mitigation Beyond Simply Applying the Patch
Updating to a fixed OpenSSL release remains the only complete solution. However, organizations responsible for high-value Internet-facing infrastructure can take additional measures to reduce risk and improve resilience.
Reducing TLS handshake timeouts limits the amount of time incomplete negotiations remain active. While this does not eliminate the underlying allocation behavior in vulnerable versions, it decreases the duration for which malicious connections can retain resources.
Infrastructure teams should also review monitoring policies to ensure that long-term memory growth is treated as an operational anomaly rather than focusing exclusively on CPU utilization or network bandwidth. HollowByte demonstrates that resource exhaustion attacks do not necessarily manifest through traditional performance indicators.
Restarting services after updating OpenSSL is equally important. Because OpenSSL is commonly loaded as a shared library, merely installing an updated package does not automatically protect running processes. Any application that loaded the vulnerable library before the update will continue using it until restarted.
Finally, organizations should resist relying solely on CVE-driven vulnerability management. While vulnerability scanners remain invaluable, HollowByte illustrates that not every security-relevant fix receives a formal identifier. Monitoring upstream project announcements, release notes, and trusted security research can help identify important updates that automated tooling may overlook.
Lessons for Secure Software Development
Although HollowByte is a denial-of-service vulnerability, its broader lessons extend well beyond TLS.
The first concerns trust boundaries.
Length fields, packet headers, HTTP Content-Length values, archive metadata, and file format descriptors all originate from external sources. Even when protocols define strict limits, these values should be treated as claims rather than facts until sufficient supporting data has been received.
The second lesson involves resource amplification.
Security engineers often focus on preventing arbitrary memory allocation or integer overflows. HollowByte demonstrates that bounded allocations can still become dangerous when attackers can repeat them at scale or combine them with allocator behavior that was never intended to operate under adversarial conditions.
The third lesson concerns interactions between independent software components.
OpenSSL behaved according to its own assumptions.
glibc behaved according to its own optimization strategies.
Neither component individually appeared vulnerable. Yet together they created a denial-of-service condition capable of exhausting server memory through remarkably little network traffic. This highlights an increasingly common reality in modern software ecosystems: security weaknesses frequently emerge not from isolated bugs but from the interaction of multiple otherwise correct components.
Final Thoughts
HollowByte may never achieve the notoriety of Heartbleed or other historic OpenSSL vulnerabilities, largely because it does not expose sensitive information or enable remote code execution. Nevertheless, dismissing it as “just another denial-of-service bug” would underestimate its significance.
The vulnerability demonstrates how a seemingly innocuous implementation detail, trusting a three-byte length field a little too early, can ripple through multiple layers of the software stack. What begins as a premature heap allocation inside OpenSSL ultimately becomes persistent memory fragmentation within glibc, leading to degraded system performance, exhausted memory, and unexpected process termination.
Equally significant is the conversation HollowByte has sparked around vulnerability disclosure. By classifying the fix as a hardening improvement rather than a security issue, OpenSSL followed its internal policies. Yet the absence of a CVE, advisory, or explicit changelog entry meant many defenders had no practical way to recognize the importance of the update. In an era where enterprises increasingly depend on automated vulnerability scanners and Software Bill of Materials (SBOM) tooling, silent security fixes risk remaining invisible for far longer than intended.
For organizations, the message is straightforward. Verify whether your OpenSSL deployment includes the June 9 fix, restart any services that still reference vulnerable libraries, and avoid relying exclusively on CVEs to drive patch management decisions. Security updates are not always announced with a severity rating or a headline. Sometimes the most important fixes are hidden among routine maintenance releases, waiting to be noticed only after researchers connect the dots.
HollowByte is ultimately a reminder that modern cybersecurity is no longer just about finding bugs. It is about understanding how protocols, libraries, operating systems, allocators, and deployment practices interact under real-world conditions. As software stacks become increasingly interconnected, those interactions will continue to define the next generation of security vulnerabilities.
Update (July 20, 2026): Following publication, The Hacker News received comments from OpenSSL developer Alexandr Nedvedicky, who reviewed the HollowByte report.
Nedvedicky distinguished HollowByte from the QUIC-related issue assigned a CVE in June. According to him, the QUIC vulnerability stems from the implementation accepting an unlimited number of PATH_CHALLENGE frames, making it a protocol-level weakness. In contrast, he believes HollowByte results from deployments where servers operate in blocking mode without appropriate resource limits, describing it as an operational configuration issue rather than a protocol defect.
He also noted that his assessment was performed on OpenBSD, an operating system that does not rely on glibc. Because of that environment, he said potential behaviors specific to glibc were not part of his evaluation. Those glibc-related characteristics form the basis of Okta’s analysis of the issue.
Nedvedicky further questioned whether the current mitigation fully addresses the underlying concern. While Matt Caswell’s patch expands memory allocations more cautiously, it continues to rely on realloc(), leaving him uncertain about its effectiveness on systems using glibc. Despite those reservations, Okta continues to advise users to install the latest available updates.
When asked whether the fix had also been backported to the extended-support OpenSSL 1.1.1 and 1.0.2 branches, Nedvedicky did not provide details and instead referred users to OpenSSL’s official support portal.









