Исправление уязвимости в Linux glibc создало более опасную проблему
18/08/21
В начале июня нынешнего года было выпущено исправление для относительно неопасной проблемы CVE-2021-33574 в GNU библиотеке (glibc), эксплуатация которой могла привести к сбою в работе приложения. К сожалению, оказалось, что исправление привело к появлению новой и более опасной уязвимости — CVE-2021-38604.
«Для проведения минимальной атаки с использованием этой уязвимости злоумышленнику требуется множество предварительных условий, чтобы иметь возможность даже вывести программу из строя с помощью ошибки mq_notify», — описывал первую проблему специалист Red Hat Сиддхеш Поярекар (Siddhesh Poyarekar).
Проверяя патч для CVE-2021-33574, специалист Никита Попов из CloudLinux TuxCare обнаружил новую проблему. Как оказалось, в библиотеке можно вызвать ошибку сегментации, что приведет к состоянию отказа в обслуживании (DoS) любого приложения, использующего библиотеку. Уязвимость получила оценку в 7,5 балла по шкале CVSS. Атака осуществляется легко и не требует никаких привилегий.
По словам Попова, «каждое Linux-приложение, включая интерпретаторы других языков (python, PHP), связано с glibc. Это вторая важная вещь после самого ядра, поэтому влияние уязвимости довольно велико».
Технически проблема заключалась в семействе функций mq_. Они обеспечивают совместимые с POSIX функциональные возможности прикладного программного интерфейса (API) очереди сообщений. Обычно они используются для межпроцессного взаимодействия (IPC). Каждое приложение Linux, включая интерпретаторы других языков (Python, PHP), связано с библиотекой glibc.
Попов обнаружил две ситуации, когда ядро Linux будет использовать сообщение NOTIFY_REMOVED при передаче скопированных атрибутов потока по пути в поле data.attr. К сожалению, приложение может передать туда значение NULL, если оно хочет, чтобы glibc создавал поток с атрибутами по умолчанию. В этом случае glibc разыменует NULL-указатель в pthread_attr_destroy, что приведет к сбою всего процесса.