Уязвимость в Linux, касающаяся сетевого протокола CAN BCM

good-penguin.png

Недавно выявленная уязвимость в ядре Linux (CVE-2021–3609) позволяет получить root-права рядом махинаций, связанных с сетевым протоколом CAN (controller area network) BCM. Затрагивает версии с 2.6.25 до mainline 5.13-rc6 включительно.

Исследователь, выявивший уязвимость, подготовил эксплоит, действующий на ядра версий >=5.4.

Вкратце, шаги для воспроизведения:

  1. Настраиваем пространство непривилегированного пользователя.
  2. Настраиваем сетевой интерфейс vcan.
  3. Открываем два разъема CAN BCM и привязываем оба к сему интерфейсу.
  4. Вызываем sendmsg() на 1-м сокете с флагом RX_SETUP для настройки обработки поступающих сообщений CAN.
  5. Вызываем sendmsg() на 2-м сокете для отправки сообщения в 1й сокет.

Итог — получаем состояние гонки:

  • bcm_rx_handler() запускается автоматически на первом сокете для получения сообщения;
  • вызываем close()bcm_release() на первом сокете, чтобы освободить структуры bcm_op и bcm_sock.

Как следствие, bcm_rx_handler() все ещё работает и продолжает обращаться к структурам bcm_op и bcm_sock, которые ранее были освобождены — ситуация use-after-free.

Тот, кто управляет содержимым, bcm_sock способен переопределить указатель на функцию sk->sk_data_ready(sk) и перенаправить выполнение, имея таким образом возможность выполнить собственный код с root-правами.

На данный момент баг не исправлен в линейке наиболее используемых дистрибутивов, таких как Ubuntu, RHEL, Fedora, Debian, SUSE, Arch.

>>> Новость на OpenNet

>>> Подробности

©  Linux.org.ru