Недавно выявленная уязвимость в ядре Linux (CVE-2021-3609) позволяет получить root-права рядом махинаций, связанных с сетевым протоколом CAN (controller area network) BCM. Затрагивает версии с 2.6.25 до mainline 5.13-rc6 включительно.
Исследователь, выявивший уязвимость, подготовил эксплоит, действующий на ядра версий >=5.4.
Вкратце, шаги для воспроизведения:
- Настраиваем пространство непривилегированного пользователя.
- Настраиваем сетевой интерфейс vcan.
- Открываем два разъема CAN BCM и привязываем оба к сему интерфейсу.
- Вызываем
sendmsg()на 1-м сокете с флагомRX_SETUPдля настройки обработки поступающих сообщений CAN. - Вызываем
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.
>>> Подробности





