On bir bayt, yamasız bir OpenSSL sunucusunun hiç gelmeyecek bir mesaj için 131 KB'a kadar bellek ayırmasına neden olabiliyor. Okta'nın test ettiği glibc sistemlerinde bu bellek, işlem yeniden başlatılana kadar geri kazanılamıyor.
OpenSSL, HollowByte düzeltmesini Haziran ayında hiçbir CVE, güvenlik danışmanlığı veya değişiklik günlüğü girişi olmadan yayımladı. Açığı bildiren ve adlandıran Okta Kırmızı Takımı, ayrıntıları Perşembe günü kamuoyuna duyurdu.
Düzeltilmiş sürümler OpenSSL 4.0.1, 3.6.3, 3.5.7, 3.4.6 ve 3.0.21 olup, tümü 9 Haziran tarihli. Bu dallardaki düzeltme öncesi tüm sürümler açığı içeriyor. Normal bir yama sürecinde bu açığı işaret eden hiçbir şey bulunmuyor: tarayıcıların eşleştirebileceği bir tanımlayıcı veya okunacak bir danışmanlık belgesi yok.
Açığın temelinde, OpenSSL'in saldırganın verdiği bilgiyi olduğu gibi kabul etmesi yatıyor. Her TLS el sıkışma mesajı, 4 baytlık bir başlık taşır ve bu başlığın üç baytı, gövdenin ne kadar uzun olacağını belirtir. Eski sürümler, gövdenin tek bir baytı bile gelmeden ve el sıkışmanın kendi kontrolleri çalıştırılmadan önce, alıcı arabelleğini bu bildirilen boyuta genişletiyordu.
Gelen bir ClientHello için tavan 131 KB. Ardından iş parçacığı, hiç gelmeyen bir gövdeyi bekleyerek bloke oluyor. Kimlik doğrulama, oturum veya anahtar değişimi yapılmıyor.
Bellek geri gelmiyor
Tek başına bu, bir bağlantı tüketme saldırısıdır ve bu tür saldırılar Slowloris kadar eskidir. HollowByte'ı kalıcı kılan şey ise glibc. Saldırgan bağlantıyı kestiğinde OpenSSL arabelleği serbest bırakıyor, ancak glibc küçük ve orta boyutlu bellek parçalarını çekirdeğe iade etmek yerine yeniden kullanım için tutuyor.
Saldırı, her bağlantıda talep edilen boyutu değiştiriyor ve Okta'nın testlerinde bu, ayırıcının serbest bıraktığı belleği yeniden kullanmasını engellemeye yetti. Yığın parçalanıyor, yerleşik bellek boyutu artıyor ve saldırgan gittikten uzun süre sonra bile yüksek kalmaya devam ediyor.
Okta'nın NGINX testlerinde, 1 GB'lık bir sunucu, parçalanmış bellek içinde 547 MB donmuş haldeyken OOM (bellek yetersizliği) nedeniyle öldürüldü. 16 GB'lık bir sunucuda ise HollowByte, bağlantı tavanını asla aşmadan sistem belleğinin %25'ini kilitledi. Bu nedenle Kırmızı Takım, "standart bağlantı sınırlama savunmalarının bunu durduramayacağını" söylüyor.
Bu rakamlar Okta'ya ait ve yanlarında herhangi bir istismar kodu yayımlanmadı. The Hacker News, 18 Temmuz itibarıyla GitHub'da herhangi bir kamuya açık proof-of-concept deposu bulamadı.