LINUX.ORG.RU

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

 , ,


2

0

Недавно выявленная уязвимость в ядре 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

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



Проверено: xaizek ()

Ну, ждём новое ядро.

anonymous ()
Ответ на: комментарий от Legioner

Автор эксплоита - урод?

Вообще-то урод - это ты, а автор эксплоита опубликовал код для того, чтобы уязвимость как можно скорее исправили

anonymous ()

Самое время в самосборах убирать CAN.

anonymous ()

опять этот дырявый эмбеддед со своими дырявыми говноплатниками. давно пора выкинуть этот мусор из основного ядра, одни уязвимости от этого легаси

anonymous ()
Ответ на: комментарий от Parthen

Об уязвимости должны знать не люди, а разработчики ядра. И только когда пофикшенное ядро уйдёт в стабильные дистрибутивы и люди проапгрейдятся, только тогда они должны узнать про уязвимость.

Legioner ★★★★★ ()

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

zgrep CONFIG_CAN /proc/config.gz 
# CONFIG_CAN is not set
cyberhoffman ()
Ответ на: комментарий от Clayman

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

Legioner ★★★★★ ()

Настраиваем сетевой интерфейс vcan

$ lsmod | grep vcan
$ modprobe vcan
modprobe: ERROR: could not insert 'vcan': Operation not permitted

расходимся

anonymous ()
Ответ на: комментарий от anonymous

тут есть несколько кадров, пытающиеся использовать говноплатники как десктоп, и компиляющие там днями что-то

anonymous ()
Ответ на: комментарий от cyberhoffman

И кто б твой локалхост порутал?

anonymous ()

Машинке опасносте

Насколько я знаю CAN часто в автомобилях используется. Машинки теперь в опасности? Хэккер подключившийся к музыкальному проигрывателю сможет рулит впрыском топлива? Ну а возможно, и вполне вероятно, что я сейчас наврал, и ничего такого нет.

Camel ★★★★★ ()
Ответ на: Машинке опасносте от Camel

Машинки теперь в опасности? Хэккер подключившийся к музыкальному проигрывателю сможет рулит впрыском топлива?

local privilege escalation

Нет. Сможет нарисовать пенис на экране. CAN тут вообще играет побочную роль, сугубо как атакуемый код.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: Машинке опасносте от Camel

Во-первых, надо как-то внедрить вредоносное ПО в тачку, что в грамотно спроектированной системе проблематично. Во-вторых, на более верхних сетевых уровнях должна быть фильтрация, предотвращающая бессмысленные коммуникации между компонентами. Но так-то конечно да, очередной эпик фейл Линукса, и тысячи глаз, смотрящих в опенсорс опять не помогли.

seiken ★★★★★ ()

Гм-кхм...

ШЕРЕТООООО!!!1111

LamerOk ★★★★★ ()
Ответ на: комментарий от seiken

и тысячи глаз, смотрящих в опенсорс опять не помогли.

В смысле? Новость о том что как раз таки глаза нашли. Так что ты пургу носишь вёдрами. Наговариваешь и вообще редиска

anonymous ()
Ответ на: комментарий от Legioner

Да в смысле нет? Ты в курсе, как и зачем CVE заводятся?

Clayman ()
Ответ на: комментарий от anonymous

bug (CVE-2021-3609) in the CAN BCM networking protocol in the Linux kernel ranging from version 2.6.25 to mainline 5.13-rc6.

2.6.25 это какой год, 2008? Это и есть «не помогли».

seiken ★★★★★ ()
Ответ на: комментарий от cyberhoffman

Пользователи с готовыми ядрами могут выключить модуль:

/etc/modprobe.d/network-protocols.conf

...
install can /bin/false
...
Prosto_user ★★ ()
Ответ на: комментарий от Legioner

Зачем публиковать, если не исправлено? Автор эксплоита - урод?

Чтобы «умники» лучше работали.

anonymous ()
Ответ на: комментарий от cyberhoffman

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

Лучший!

anonymous ()
Ответ на: комментарий от cyberhoffman

CONFIG_CAN is not set

А научите нехрестя зачем после закоменченного дефайна еще писать ис нот сет? Часто вижу, а смысла не понимаю

pihter ★★★★ ()
Ответ на: комментарий от Legioner

Автор опубликовал шаги воспроизведения бага. Чтобы эти ваши так называемые тысячи разработчиков смогли прикрыть свое решето.

pisqotron5000 ()

то есть получается, что имелась ссылка на структуру, но refcount при этом не увеличивается.

salozar ()

так, а терь мы ищем таланты, которые засунули CAN в ядро десктопных дистрибутивов по дефолту?

darkenshvein ★★★★★ ()
Ответ на: комментарий от darkenshvein

Мало ли у тебя десктоп в машинке? Это совсем не редкий кейс. И да, по этому CAN’у впрыском топлива не управляют. Но кое-какую интересную инфу почитать можно, USB-донглы в помощь. А дырку запатчат и все будет типтоп!

slapin ★★★★★ ()
Ответ на: комментарий от anonymous

а автор эксплоита опубликовал код для того, чтобы уязвимость как можно скорее исправили

Вообще для такого существуют специальные непубличные рассылки.

AS ★★★★★ ()
Ответ на: комментарий от Legioner

И только когда пофикшенное ядро уйдёт в стабильные дистрибутивы и люди проапгрейдятся, только тогда они должны узнать про уязвимость.

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

AS ★★★★★ ()

А чего вы хотите от эмбедщиков? Эти ребята пишут лупы повторением строки эн раз. Все эти CAN и прочее есть одно сплошное шерето.

anonymous ()
Ответ на: комментарий от Legioner

В таком подходе чувствуется отпечаток копыта монстрософта.

dv76 ★★★★ ()
Ответ на: комментарий от AS

Но вот эксплоит готовый - это перебор

прикол в том что чтобы использовать этот эксплоит и получить права root нужно загрузить модуль который по умолчанию в стандартных системах не используется, а если ты можешь загрузить модуль то тебе никакие уязвимости не нужно искать - ты можешь написать модуль с уязвимостью и загрузить его

anonymous ()

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

t500s ★★ ()
Ответ на: комментарий от AS

Но вот эксплоит готовый - это перебор.

Эксполит - это must для CVE, иначе всё твоё кукареканье про «уязвимости» - беспруфное. Вопрос может быть исключительно в сроках публикации.

LamerOk ★★★★★ ()
Ответ на: комментарий от Legioner

Если читал, он в конце написал, что ищет работу) Это его резюме такое))

MaksVal ()
Ответ на: комментарий от Legioner

Упрлс? Чтобы получить рута таким способом, нужно загрузить модули ядра (по умолчанию ядра собраны или вообще без CAN, или с CONFIG_CAN=m), а чтобы загрузить модули, нужно УЖЕ БЫТЬ РУТОМ. Расходимся, опять белки-истерички.

pekmop1024 ★★★★★ ()

Решето. В одном только ядре (исключая остальные компоненты ос) ежегодно находят багов больше чем во всей актуальной Windows, всей (от ядра до драйвером и прикладных дефолтных программ).

bonta ★★★★ ()
Ответ на: комментарий от bonta

Над линуксом работает в разы больше людей, следовательно найденых багов будет больше. Над виндой работает кучка индусов, искать баги нах никому не нужно. Пнятненько?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.