Исследователь Андрей Коновалов нашел баг в ядре Linux, существующий с 2005 года и присутствующий во всех популярных дистрибутивах, включая Redhat, Debian, OpenSUSE и Ubuntu.
Use-after-free уязвимость получила идентификатор CVE-2017-6074 и была обнаружена в имплементации протокола DCCP (Datagram Congestion Control Protocol). Самая старая уязвимая версия, которую обнаружил Коновалов, датирована сентябрем 2006 года (2.6.18), и исследователь полагает, что корнями баг уходит к самому первому релизу с поддержкой DCCP (2.6.14, октябрь 2005 года). Чтобы уязвимость была актуальна, ядро должно быть собрано с условием CONFIG_IP_DCCP, но в большинстве дистрибутивов данная опция активна по умолчанию.
Баг заключается в том, как текущая имплементация DCCP освобождает ресурсы SKB (socket buffer) для пакета DCCP_PKT_REQUEST, если речь о сокете с активной опцией IPV6_RECVPKTINFO. Исследователь пишет, что double-free уязвимость позволит атакующему перезаписать данные любого объекта в ядре, воспользовавшись техникой heap spraying и подменив их чем-то произвольным. Кроме того, если перезаписанный объект содержал указатели функций, то атакующей добьется выполнения в ядре произвольного кода.
В так называемом ванильном (официальном) ядре уязвимость была устранена 17 февраля 2017 года, но еще не была исправлена в большинстве популярных дистрибутивов (согласно сообщению исследователя, обновился пока только Ubuntu). Из-за этого Коновалов пока отложил публикацию proof-of-concept эксплоита, давая пользователям время на установку патчей.
Фото: Depositphotos