Уязвимость в реализации протокола DCCP в ядре Linux

Автор denkin, декабря 06, 2017, 00:18:07

« предыдущая - следующая »

denkin

В реализации сокетов с поддержкой протокола DCCP выявлена уязвимость CVE-2017-8824, потенциально позволяющая выполнить код на уровне ядра Linux через локальные манипуляции с сокетами DCCP из непривилегированного процесса. Уязвимость проявляется начиная с выпуска ядра Linux 2.6.16. Для тестирования подготовлен прототип эксплоита.
Новость на Opennet.
Подробности

"Проблема вызвана обращением к уже освобождённому блоку памяти в коде обработки сокетов DCCP: Когда объект сокета находится в состоянии DCCP_LISTEN и выполняется вызов функции connect(), выполнение dccp_disconnect() переводит сокет в состояние DCCP_CLOSED, но не освобождает память для структур dccps_hc_tx_ccid и dccps_hc_rx_ccid и не обнуляет их. В дальнейшем, если вызвать connect() в режиме AF_INET6, объект сокета будет клонирован функцией dccp_create_openreq_child(), а на выходе выдан новый объект сокета, в котором сохранятся ссылки dccps_hc_rx_ccid и dccps_hc_tx_ccid из старого объекта сокета. Таким образом, старый и новый объекты сокета будут ссылаться на одну и ту же область памяти.

Уязвимость проявляется только в ядрах, собранных с опцией CONFIG_IP_DCCP, которая, как правило, включена по умолчанию. Исправление пока доступно только в виде патча. Обновления пакетов с ядром для дистрибутивов пока не выпущены (Debian, Fedora, openSUSE, SUSE, RHEL, Ubuntu). Примечательно, что критические проблемы в реализации DCCP уже обнаруживались в феврале 2017 года, а также в 2014 и 2008 годах. В качестве обходного пути защиты можно запретить загрузку модуля ядра dccp, который в обычных условиях загружается автоматически:
   echo "install dccp /bin/true" >> /etc/modprobe.d/disable-dccp.conf"
(ц)

[свернуть]