Специалисты Positive Technologies опубликовали подробности об уязвимости CVE-2016-1879 в FreeBSD, для которой недавно вышел патч. Брешь присутствует во всех версиях FreeBSD, поддерживающих SCTP, IPv6, и ICMPv6, но особенно внимательными стоит быть пользователям версий 9.3, 10.1 и 10.2. Уязвимость позволяет «уронить» систему, путем отправки созданного особенным образом ICMPv6-сообщения.

Корень проблемы кроется в протоколе SCTP (Stream Control Transmission Protocol), а точнее в том, как SCTP взаимодействует с протоколом IPv6, призванном заменить IPv4. Вышеупомянутые версии 9.3, 10.1 и 10.2 как раз по умолчанию поддерживают оба протокола: SCTP и IPv6.

Чтобы вызвать отказ в обслуживании, злоумышленнику достаточно отправить жертве сообщение ICMPv6, созданное определенным образом. Специалисты поясняют:

Проблема возникает из-за недостаточной проверки длины заголовка SCTP-пакета, полученного в ICMPv6-сообщении об ошибке. Когда адресат недоступен, маршрутизатор может сгенерировать сообщение об ошибке и переслать его отправителю через ICMPv6.

В такой ICMPv6-пакет вложен оригинальный IPv6-пакет, в котором поле Next Header указывает на то, как протокол верхнего уровня инкапсулируется. В данном случае это SCTP.

Когда ядро получает по ICMPv6 сообщение об ошибке, оно находит в нем пакет протокола верхнего уровня и передает его соответствующему обработчику (в данном случае sctp6_ctlinput()).

Обработчик SCTP предполагает, что входной пакет содержит заголовок достаточной длины, пытается скопировать его с помощью m_copydata(), в которую передаются значения смещения и количество байтов, которое требуется считать. Поскольку ожидается блок данных размером 12 байт, если отправить пакет с SCTP-заголовком меньше 12 байт, то происходит разыменование нулевого указателя, что вызывает критический сбой ядра системы (kernel panic).

602114d92a8f4e07a6587f9eb42aebf1

Для наглядности эксперты также опубликовали видеодемонстрацию атаки.

Избавиться об проблемы можно установив патч, недавно выпущенный разработчиками FreeBSD. Исправление добавляет дополнительные проверки в обработку SCTP ICMPv6 сообщений. Для установки потребуется перекомпиляция ядра.

Без установки исправления можно предпринять следующие шаги:

  • отключить IPv6-адресацию, если в ней нет необходимости;
  • при помощи фаервола заблокировать трафик ICMPv6 или IPv6;
  • отключить поддержку стека SCTP в ядре ОС (потребуется перекомпиляция ядра).



2 комментария

  1. Int

    26.01.2016 at 17:21

    Когда ядро получает по ICMPv6 сообщение об ошибке, оно находит в нем пакет протокола верхнего уровня и передает его соответствующему обработчику (в данном случае sctp6_ctlinput()).

    Когда ядро получает по ICMPv6 сообщение об ошибке, оно находит в нем пакет протокола верхнего уровня и передает его соответствующему обработчику (в данном случае sctp6_ctlinput()). Обработчик SCTP

  2. Igor_st26

    27.01.2016 at 08:48

    М-да. . Фря уже не та. ..)))

Оставить мнение