Уязвимост, наречена HollowByte, позволява на неудостоверени атакуващи да предизвикат отказ от услуга (DoS) на OpenSSL сървъри чрез злонамерен код с размер от едва 11 байта.

Екипът на OpenSSL тихо отстрани уязвимостта (без да ѝ бъде назначен идентификатор) и внедри корекцията за сигурност и в по-старите версии.

Тъй като софтуерът OpenSSL е фундаменталната основа за сигурна интернет комуникация, организациите трябва да дадат приоритет на преминаването към коригирана версия на библиотеката.

В анализ от началото на тази седмица червеният екип (Red Team) на Okta описа как работи HollowByte DoS уязвимостта и какво е нейното въздействие в реален сценарий.

Изследователите обясняват, че при TLS ръкостискане (TLS handshake) всяко съобщение има 4-байтова заглавна част за деклариране на размера на входящото съобщение. Уязвимите версии на OpenSSL обаче разпределят декларираната дължина на паметта още преди да са получили злонамерения код и да са проверили неговия размер.

Всяко съобщение при TLS ръкостискане започва с 4-байтова заглавна част, в която трибайтово поле за дължина разкрива размера на данните, които трябва да последват.

Без да валидира инжектирания код, сървърът се доверява на твърденията на пакета и заделя посочената памет. „След това работната нишка блокира, чакайки безкрайно данни, които никога няма да пристигнат“, обяснява Okta.

Неудостоверен атакуващ може да задейства HollowByte, като отвори TLS връзка и изпрати злонамерен вход от 11 байта със заглавна част, декларираща, че ще последва много по-голямо тяло на съобщението.

Атакуващият повтаря същия процес в множество връзки, което кара сървъра да заделя значителни количества памет чрез сравнително малък обем трансферирани данни.

Изследователите от Okta отбелязват, че въпреки че OpenSSL освобождава буферите, когато връзката прекъсне, библиотеката GNU C (glibc) управлява паметта по различен начин и „не връща незабавно малките до средни заделени обеми към операционната система; тя ги запазва за потенциална повторна употреба“.

„Чрез стартиране на вълни от връзки с произволно декларирани размери, атакуващият пречи на мениджъра на паметта да използва повторно тези освободени блокове“, споделя Okta.

„Хийпът (heap) се фрагментира силно, което кара физическата памет (Resident Set Size - RSS) на сървъра да нараства непрекъснато. Дори след като атакуващият се разкачи, сървърът остава трайно претоварен.“

Единственият начин за пълно възстановяване на пространството е рестартиране на процеса.

Библиотеката с отворен код OpenSSL е внедрена в популярни софтуерни проекти като уеб сървърите NGINX и Apache, среди за програмиране (напр. Node.js, Python, Ruby, PHP) и бази данни (MySQL, PostgreSQL). Тя идва предварително инсталирана в повечето Linux дистрибуции за TLS криптиране и управление на сертификати.

Тестовете на Okta върху NGINX показват, че средите с нисък капацитет могат лесно да изчерпят паметта си с помощта на HollowByte, докато сървърите с по-високи параметри могат да загубят до 25% от паметта си, докато пропускателната способност на атаката остава под праговете за задействане на системи за сигурност.

Въпреки че DoS дефектите се считат за по-малко сериозни от уязвимостите, които позволяват кражба на данни или изпълнение на код, те могат да причинят сериозни оперативни прекъсвания и репутационни щети.

Проблемът HollowByte DoS е коригиран в OpenSSL 4.0.1 и обновяването е пренесено обратно към версии 3.6.3, 3.5.7, 3.4.6 и 3.0.21, които сега увеличават буфера само когато данните пристигнат, игнорирайки твърденията в заглавната част.

Въпреки че проблемът се третира по-скоро като „корекция за подобряване на защитата“ (hardening fix), а не като критична уязвимост в сигурността, Okta препоръчва „незабавно да актуализирате OpenSSL пакетите на вашата дистрибуция“.