Der von Okta „HollowByte“ getaufte Fehler beruht darauf, dass ältere OpenSSL-Versionen die Größe eines Empfangspuffers schon vorab anhand der im Header angekündigten Nachrichtenlänge festlegten. Diese Vorab-Reservierung erfolgte, bevor überhaupt Daten eingetroffen waren. Ein Angreifer konnte laut Okta mit einem nur 11 Byte großen Paket eine nicht validierte Pufferzuweisung von bis zu 131 KB auslösen.

Wie Okta erklärt, blockiert der Worker-Thread anschließend und wartet unbegrenzt auf Daten, die nie eintreffen. Zwar gibt OpenSSL den Puffer später frei, doch das reicht in der Praxis nicht aus, um den Angriff wirkungslos zu machen. Der Grund liegt laut Okta zusätzlich im Verhalten der GNU C Library (glibc), die kleine bis mittelgroße Speicherzuweisungen zur möglichen Wiederverwendung behält und sie beim Abbruch einer Verbindung nicht sofort an das Betriebssystem zurückgibt.

Dadurch können mehrere aufeinanderfolgende bösartige Datenpakete den Speicher eines Servers schrittweise erschöpfen. Okta zufolge verhindert ein Angreifer durch Verbindungswellen mit zufällig variierten, angeblich benötigten Größen, dass der Speicherverwalter die bereits freigegebenen Speicherbereiche wiederverwendet. Selbst nachdem der Angreifer die Verbindung trennt, bleibt der Server nach dieser Beschreibung dauerhaft aufgebläht. Laut Okta lässt sich der Speicher nur zurückgewinnen, indem der Prozess beendet wird.

In Tests unter realen Bedingungen wurde ein System mit 1 GB RAM unansprechbar, nachdem 547 MB Speicher fragmentiert und blockiert worden waren. Auf einem System mit 16 GB RAM konnte der Angriff nach Angaben von Okta erfolgreich 25 Prozent des gesamten Arbeitsspeichers blockieren und blieb dabei unterhalb der Verbindungsgrenze. Herkömmliche Schutzmaßnahmen, die nur die Zahl der Verbindungen begrenzen, würden den Angriff deshalb nicht stoppen.

Betroffen sind laut Bericht zahlreiche Anwendungen und Plattformen, die OpenSSL verwenden, sofern sie nicht auf eine bereinigte Version der Open-Source-Bibliothek aktualisiert werden. Genannt werden unter anderem Apache, NGINX, Node.js, Python, Ruby, PHP, MySQL und PostgreSQL.

Die Korrekturen für HollowByte wurden stillschweigend in OpenSSL 4.0.1 aufgenommen. Außerdem wurden sie stillschweigend in die Versionen 3.6.3, 3.5.7, 3.4.6 und 3.0.21 zurückportiert. Nach der Anpassung vergrößert die Bibliothek den Puffer nur noch dann, wenn tatsächlich Bytes eintreffen, und verlässt sich für das Pufferwachstum nicht mehr auf den Header des Handshakes.