Chyba HollowByte v OpenSSL umožňuje trvale zaplnit paměť serveru

Sdílet

OpenSSL Autor: OpenSSL

Tým Okta Red Team objevil v OpenSSL zranitelnost typu Denial of Service (DoS) s názvem HollowByte. Zasláním škodlivého datového bloku o velikosti pouhých 11 bajtů může vzdálený neautentizovaný útočník donutit server, aby alokoval neúměrně velké bloky paměti ještě předtím, než vůbec dojde k zahájení užitečné komunikace.

Proces navázání spojení TLS začíná zprávou ClientHello a poté pokračuje výměnou dat obou stran, takzvaným handshakem. Každá zpráva v rámci tohoto procesu navázání spojení obsahuje čtyřbajtovou hlavičku, která udává, jak velké bude tělo příchozí zprávy. OpenSSL při přijetí hlavičky alokuje přijímací buffer na základě délky deklarované útočníkem ještě předtím, než skutečně dorazí jakákoli data.

Jelikož v této rané fázi ještě nedochází k ověření obsahu, je alokováno až 131 KB paměti výhradně na základě údajů uvedených v nedůvěryhodném paketu. Pracovní vlákno se poté zablokuje a čeká na příchozí data, která ale během útoku už nikdy nedorazí.

Tohle není nic nového ani překvapivého a je to vlastně stejný princip, jaký používá letitý zdržovací útok Slowloris. HollowByte ale přináší ještě zákeřnější kumulativní efekt, který vyplývá ze způsobu, jakým knihovna GNU C (glibc) zpracovává paměť.

Když dojde k přerušení útočícího připojení, OpenSSL uvolní vyrovnávací paměť. Knihovna Glibc však malé až středně velké alokace nevrací operačnímu systému okamžitě, ale uchovává je pro případné opětovné použití. Útočník tak může spouštět vlny připojení s náhodně zvolenými velikostmi a tím zabrání alokátoru v opětovném využití těchto uvolněných bloků. Dojde k silné fragmentaci haldy, což způsobí neustálý nárůst velikosti Resident Set Size (RSS) paměti serveru.

Výsledkem je, že i po přerušení spojení zůstane tato paměť trvale zablokovaná. Jediným způsobem, jak paměť uvolnit, je ukončení procesu. Vývojáři OpenSSL tento problém vyřešili přechodem na inkrementální růst vyrovnávací paměti. Oprava byla zahrnuta do vydání OpenSSL v4.0.1 a také do starších verzí 3.6.3, 3.5.7, 3.4.6 a 3.0.21. Knihovna nyní místo slepého alokování paměti na základě nedůvěryhodné hlavičky zvětšuje vyrovnávací paměť pouze v případě, že nějaká data skutečně dorazí. Požadavek bez následného zpracování tak nyní server nic nestojí.

Našli jste v článku chybu?

Autor zprávičky

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.