В подсистеме eBPF, позволяющей запускать обработчики для трассировки, анализа работы подсистем и управления трафиком, выполняемые внутри ядра Linux в специальной виртуальной машине с JIT, выявлена уязвимость (CVE-2021-29154), позволяющая локальному пользователю добиться выполнения свого кода на уровне ядра. Проблема проявляется вплоть до выпуска 5.11.12 (включительно) и ещё не исправлена в дистрибутивах (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). Исправление доступно в виде патча...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=54932
это ядро монструозно, в нём слишком много кода и, соответственно, ошибок
плюсую, гайка или маленькая птичка, пьющая нектар, выглядят поинтереснее
у птички, пьющей нектар, экзистенциальный кризис очень давно, лет так 7 точно. Разрабы чето коммитят, но у проекта вообще никаких целей нет. Полная разруха и анархия
Отчасти ebpf и решает эту проблему, вынося специфические части в байткод и юзерспейс.
да,да. которые в конечном счете грузятся.. куда?точно! сабж жеж!
смешно
и всегда было смешно.
В статье нет самого главного!
Для тех у кого есть голова и руки, в ядре опция:
/Networking support/Networking options/enable BPF Just In Time compiler
должна быть отлкюченной. Н этом инцидент исчерпывается.
без ebpf не будет работать ни wireshark, ни firejail.
без указанной мной опции wireshark успешно работает
isc_dhcpd также уйдет в небытье.
> это ядро монструозно, в нём слишком много кода и, соответственно, ошибокЕсли бы всё было так просто. eBPF -- попытка выжать максимум производительности. Производительности же всегда мало -- как однажды сказал мой друг, задачи в идеале должны выполняться за отрицательное время
>> задачи в идеале должны выполняться за отрицательное времятак их сформулировать не успеете
Формулировка будет строиться после выполнения, т.е. подгоняем ТЗ под результат.
тогда я даже знаю пару мест где такое реализовано )
Квантовые вычисления?
>> задачи в идеале должны выполняться за отрицательное время
> так их сформулировать не успеетес тех пор так и живем.
Пусть твоему другу зарплату платят в отрицательном количестве. А если серьёзно, остерегайся таких друзей.
> eBPF -- попытка выжать максимум производительности.нет.
и никогда не была.
> это ядро монструозноДержи, GNU Hurd ;)
Не хотите багов и кода от трансов?
Добро пожаловать в OpenBSD
sysctl net.core.bpf_jit_enable=0
sysctl: setting key "net.core.bpf_jit_enable": Invalid argument(с echo все прокатит, но внутри файлика останется 1)
Что-то этот хак редхата, похоже, только для редхата. У которого там и так 0
c echobash: echo: write error: Invalid argument
$ man 2 bpfSince Linux 4.15, the kernel may configured with the
CONFIG_BPF_JIT_ALWAYS_ON option. In this case, the JIT compiler
is always enabled, and the bpf_jit_enable is initialized to 1 and
is immutable. (This kernel configuration option was provided as
a mitigation for one of the Spectre attacks against the BPF
interpreter.)
бггг. Поебдили несуществующую атаку, оставив незакрываемую реальную дыру. Молодцы, чо.
Архаичные уязвимости отсталых языков программирования.
С моднявыми язычками ситуация ещё интереснее
"Нет софта - нет уязвимостей" называется
В данном случае проблема алгоритма реализации. Ваш модномолодежный язык такие проблемы не умеет решать.Впрочем, никого из использующих модномолодежные языки к реализации таких сложных задач и не подпускают.
Согласен, такие задачи надо решать на COBOL, а не этих ваших молодежных Си.
Насколько я могу судить, по исправленному if-у, там обычный buffer overrun. Memcpy слишком длинного чего-то в локальный массив temp. Типичная ошибка вызванная тем что C не проверяет границы массивов.https://elixir.bootlin.com/linux/latest/source/arch/x86/net/...
точно! Rust на них нет!
Дурачок?Тебе тут целый Jit запилили. Можешь хоть на Расте писать и в него перегонять.
Проблема, таже, что и у JS. Не должен никакой левый код выполняться в ядре, как и в браузере.
> Не должен никакой левый код выполняться в ядре, как и в браузере.Несравнимо. В ядре, в отличие от браузера, будет выполнятся только тот eBPF-код, которому ты позволишь выполниться и это не будет код от любой программы в системе. И программ в твоей системе меньше чем сайтов, которые ты посещаешь в интернете. А в браузер тебе прилетает нечто обфускированное в мегабайт весом, что ты не в силах проанализировать до конца жизни. И сайтов этих "тыщи"
Да давайте уже код ядра вынесем из ядра!
Надо срочно переписать на жабаскрипте. И обязательно с блокчейном.
Давайте запихнём в ядро виртуальную машину с JIT!
Что может пойти не так?
Восамомделенуштовы
А все потому, что джит.
Даёт серьезный прирост скорости норм ЯП, но делая само выполнение кода фундаментально дырявым.
Ну наконец-то
Я прямо ждал когда в этом ядерном JIT-шерете что-нибудь таки протечёт
JIT в ядре - зло
> Ну наконец-то
> Я прямо ждал когда в этом ядерном JIT-шерете что-нибудь таки протечётС разморозкой!
https://www.opennet.ru/opennews/art.shtml?num=47792
> Критические уязвимости в подсистеме eBPF ядра Linux
> 23.12.2017 10:23https://www.opennet.ru/opennews/art.shtml?num=52640
> Уязвимость в ядре Linux, позволяющая повысить свои привилегии через BPF
> 04.02.2019 12:19
Раз в два года жеж, а потом снова ждать.
В ядре и в частях без JIT регулярно дырки находят, это подов запретить любые рантаймы? Нет кода - нет проблем, я считаю!
Казалось бы, причём тут Rust?..
В данном случае не поможет. Проблема реализации алгоритмов самого JIT.
Никогда не было и вот опять. Я и в polkit отключил жит и в qml, хотя непроверенный уод вроде не собираюсь исполнять.А от eBPF мне до сих пор щекотно, потому что позволять пользователю загружать код в вм с житом прямо в ядре, ну то такое. К сожалению, это единственная надежда для динамического файервола (чтобы блокировать и фильтровать исходящий трафик на уровне приложений, скажем).
Я пытался отключить в ядре, но оно что-то больше не отключается. Однако, в proc не светится. Т.е. никаких /proc/sys/net/core/bpf_*
CONFIG_BPF=y
# CONFIG_BPF_SYSCALL is not set
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
# CONFIG_NETFILTER_XT_MATCH_BPF is not set
# CONFIG_BPFILTER is not set
# CONFIG_BPF_JIT is not set
CONFIG_HAVE_EBPF_JIT=y
> Я и в polkit отключил житКак?
>> Я и в polkit отключил жит
> Как?Собрал spidermoney с которым тот линукется без жита. И надеюсь, что этого достаточно. Наверно достаточно, я не проверял.
Какие-же вы странные все.Этот JIT очень простой, он, просто транслирует байткод в машинные инструкции практически 1-в-1. Никакой сложной логики обычно ассоциированной со словом JIT там нет, там файл на 2к строк кода всего.
Ошибка не связанна с JIT. Это, насколько я понимаю, обычный buffer overrun при копированнии массива. Там как-то не так проверяют его длинну.
Проблема в том, что у пользователя вообще есть возможность загружать "машинный код" в ядро. Так лучше?
Чем это отличается от загрузки модуля ядра, о великий эксперт openneta?
> Чем это отличается от загрузки модуля ядра, о великий эксперт openneta?Модуль может загрузить только пользователь с правами рута, тут же смысл в том чтобы позволять это делать всем пользователям.
> Чем это отличается от загрузки модуля ядра, о великий эксперт openneta?Причём, левые модули не загружаются в норме, рут имеет только возможность выбирать из готового и подписанного набора модулей. Так что, отличается.
"опасность проблемы зависит от доступности пользователю системного вызова eBPF"
Так доступно?
> "опасность проблемы зависит от доступности пользователю системного вызова eBPF"
> Так доступно?Перечитай ещё раз и попробуй осмыслить.
>>в специальной виртуальной машине с JITЭто из самого названия понятно что это не может быть без дыр априори. Это два сложных непонятных механизма закрученный один в другой.
да ещё и в юзерспейсе
> да ещё и в юзерспейсетам не юзерспейс, там именно kernel space, с доступом к коду из userspace.
Причем, если мой эклер мне опять изменяет, еще и с возможностью доступа от непривиллегированного юзера в некоторых комбинациях настроек.
> уязвимость может быть эксплуатирована при включении BPF JIT и наличии у пользователя прав CAP_SYS_ADMINТо есть root может взломать сам себя? Галактика в опасности!
Я тоже был уверен, что старательно везде убрал на всех бинарях (а ты проверь кстати в своём дистре), а потом ой /usr/bin/PCSX2 cap_net_admin,cap_net_raw=eip какие-то лишние права.А вот cap_sys_admin я отключал у кучи софта. Хорошо теперь есть cap_checkpoint_restore и можно убрать sys_admin и с criu.
Как-то всё проще./usr/bin/newgidmap = cap_setgid+ep
/usr/bin/ping = cap_net_admin,cap_net_raw+p
/usr/bin/newuidmap = cap_setuid+ep
/usr/sbin/arping = cap_net_raw+p
/usr/sbin/clockdiff = cap_net_raw+p
/usr/sbin/fping = cap_net_raw+epИ всё, в общем-то. А пользовательские файлухи вообще с noxattr монтируются, поэтому идут нафиг.
Ну да, suid, конечно же, лучше.
лучше. Его сразу видно, о нем не забудешь, и писатели не надеются на "волшебные" механизмы.
Не говоря уже о том что лап4@поделка.
> Ну да, suid, конечно же, лучше.suid очень ограниченно.
Пользовательские файлухи ещё и с nosuid, ага. Местами с noexec вдогонку.
Эх, не умеют они готовить святой C и C++. Сплошные дыры в безопасности (включая прошлые новости с конфы по взлому всего и вся на C и C++)Вот туда бы экспертов с opennet...ууууххх
...они бы показали обезьяно-макакам (JS) и ржавым петушкам (Rust) как писать идеальный код без ошибок!
"Шо, опять?!" (ц)PS: и да, на e2k его не портировали ещё; по-моему, на данном этапе извития данной хреновины это скорее плюс.
Порядочные люди при сборке ядра выключают всякое ненужное непотребство используемое лишь в редких сценариях.
> Порядочные люди при сборке ядра выключают всякое ненужное непотребство используемое лишь
> в редких сценариях.порядочные люди не занимаются пересборками ведра, у них дел и так полно.
К тому же определить, что там нужно, а что не очень - задача для несреднего васяна.
Порядочные люди невежество не восхваляют
Всё-таки "уметь" и "заниматься" - понятия разные.
>Всё-таки "уметь" и "заниматься" - понятия разные.И часто у вас "уметь" наступает без "заниматься"? Вы теоретик ядерного удара?
А главное, основная мысль была не в том, что все должны уметь, а в том, что я написал - невежеством хвалиться стыдно.
Ну так и не хвались. Твое умение кое-как собрать ведро - не повод для гордости.
Ты не понимаешь больше половины "выключаемых" тобой закорючек.
С чего не понимать то? Там ко всему есть комментарии в коде и можно загуглить. За 3 дня разобраться вполне можно.
МСБС вовсе 2х юзают кажется. Умные люди. Вылизали версию и не парятся.
застрять на древней неподдерживаемой версии - вовсе не равно "вылизали".
Кстати, мне надо кое-что пособирать, так что мне есть чем занять твой "горыныч" [c]
https://www.youtube.com/watch?v=it76PvJ8MnY
Почему-то как вижу тут на опеннете новости, где есть фраза "позволяющий запускать обработчики", так и начинаю подсознательно ждать всяческих граблей.
а писали бы eBPF на расте не было бы такой фигни.
ржунимагу
да, я обеими лапами за. Еще много всякой й-ной фигни бы не было, от CoC.md и README вреда никакого.
Насчёт CoC.md ты заблуждаешься. От его содержимого зависит то, кто будет коммитить в ядро.
/proc/sys/net/core/bpf_jit_enable = 0
Дебиан, если что.
А у меня включен почему-то.
Это вообще роль какую-то играет если компьютером пользуюсь только я?
Думаю, вряд ли.
>уязвимость (CVE-2021-29154), позволяющая локальному пользователю добиться выполнения свого кода на уровне ядраЧто и говорили. В Лин полно закладок. Еще десятки лет их будут находить.
Мне кажется в лине даже больше закладок чем в винде. Ещё и код открытый, в разы легче исследовать
>Ещё и код открытый, в разы легче исследоватьИменно поэтому закладок меньше. Если безопасность строится на закрытости кода, грош ей цена.
у вас опечатка в слове "добавлять"Индуса в ms-то и выпороть могут за такое. А тут пожалуйста -
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
(трогательное сотрудничество редхатовского мекса с оракловым китаезой, не правда ли? Да, это подпись под изменением, делающим fs нерабочей. И ни один тысячекосоглаз не выступил - тут кого надо нога! Даже две!)
А ссылку на коммит можно. Или напиши пожалуйста, что там именно ломается?
> А ссылку на коммит можно. Или напиши пожалуйста, что там именно ломается?Можно, но описывать что все это значит второй раз лень.
https://github.com/torvalds/linux/commit/fa4ca9c5574605d1e48...And the mount fails. С мд-цкой "error -177" (отдельно бы аккуратно содрать с индусской макаки шкурку и солью мелкой посыпать) и без малейших шансов исправить.
>> А ссылку на коммит можно. Или напиши пожалуйста, что там именно ломается?
> Можно, но описывать что все это значит второй раз лень.
> https://github.com/torvalds/linux/commit/fa4ca9c5574605d1e48...Может, тот же текст вот сюда в комментарии и закиньте?
его робот удалит.
Да и причем бы тут ebpf. Только при том что тут все такими же руками сделано...
Проиграл. Тебе с шиндовс апдейтом может прилететь что индусу угодно и даже мнением твоим не поинтересуются.
Конечно же редхатовский кумар очень поинтересуется твоим мнением, и конечно же тысячегласс непременно помешает обновлению его авторства добраться до твоей б-жественной бубунточки.
(нет)
> Конечно же редхатовский кумар очень поинтересуется твоим мнением, и конечно же тысячегласс
> непременно помешает обновлению его авторства добраться до твоей б-жественной бубунточки.
> (нет)С бубунточкой мимо, у меня бсд, но у лин.упсов автоапдейты хотя бы опциональны, а еще есть генту, где непонятная бинарь прилетит разве что с блобиками в ядре.
А у шиндовс стали хотя бы спрашивать о перезагрузке после неотключаемых обновлениях?
Я вообще в шоке от шиндусятников, когда в 7ке микрософт без спроса обновил проверку лицензионности, с отключенными автообновлениями, ор поднялся выше гор, а как пришла 8ка с неубиваемым дефендером и 10ка с неотключаемыми обновлениями, так все просто проглотили и попросили добавить унижений.
До сих пор ржу с "игрового режима" десяточки, когда отключалась вся ненужная пользователю деятельность, просто чтобы хотя бы выдавать схожую с 7кой производительность.
> С бубунточкой мимо, у меня бсд, но у лин.упсов автоапдейты хотя бы
> опциональны, а еще есть генту, где непонятная бинарь прилетит разве чтоугу, опциональны, поэтому меня долбят sshшные трояны от таких необновлянцев.
> А у шиндовс стали хотя бы спрашивать о перезагрузке после неотключаемых обновлениях?
У нее круче - она уже три года как ПЕРЕСТАЛА под руку спрашивать эти глупости, и просто аккуратно перезагружается во время, по данным ее телеметрии, когда тебе точно не нужен компьютер.
Да, это можно на некоторое небесконечное время - отложить (ну и правильно написанный софт просто не даст перезагружаться пока обрабатывает фоновую задачу). Но обычно ненужно. Все делает за тебя, и ест тоже.> Я вообще в шоке от шиндусятников, когда в 7ке микрософт без спроса
> обновил проверку лицензионности, с отключенными автообновлениями, ор поднялся выше гор,у мелких воришек-то? Я вот ничего не заметил.
Наверное, потому что ей нечего там было проверять?> До сих пор ржу с "игрового режима" десяточки, когда отключалась вся ненужная
> пользователю деятельность, просто чтобы хотя бы выдавать схожую с 7кой производительность.признак дурачины, угу.
А на деле - убираются всего лишь интерактивные оповещения, лезущие не в том графрежиме или пытающиеся управлять звуком.
а при Rust'е все будет зашибись, там все будет бесплатно и все будет в кайф. Надо только немножко подождать
А дедушка Тененбаум говорил этому студенту шо надо пилить микроядро.
Надеюсь ты хотя бы знаешь кто это, может потом даже научишься его к месту упоминать правильно.
Есть же еще kernel.unprivileged_bpf_disabled = 1 и net.core.bpf_jit_harden = 2.А на что повлияет полное отключение BPF JIT?
Ни на что . Ненужная п..бень .
А разве современный iptables не на BPF построен?
iptables - нет. Но он несовременный и его срочно надо выбросить.А над тем что вы хотите - работают, но пока, вроде, ничего кроме нерабочих poc не родили, nft только планирует перевестись на bpf-машину, когда-нибудь, потом.
поздравляю вы достигли нового уровня "Местный эксперт"
> выполняемые внутри ядра Linux в специальной виртуальной машине с JITJIT - зло которое надо искоренить!
Linux!!!