Исследователи безопасности из компании Qualys выявили три способа обхода применяемых в Ubuntu ограничений доступа к пространству имён идентификаторов пользователя (user namespace). Начиная с выпуска 23.10 в Ubuntu применяется дополнительный слой изоляции, не позволяющий обычным непривилегированным пользователям создавать "user namespace". Сам по себе доступ к "user namespace" не является уязвимостью и многие дистрибутивы предоставляют его из коробки, так как он требуется в системах контейнерной изоляции и используется для sendbox-ограничений (например применяется для sandbox-изоляции браузеров)...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=62970
> Проблема вызвана переполнением буфера, возникающем при
> обработке специально сформированных образов ФС.
> позволяющей получить root-привилегии в системеHa-ha, classic.
> Проблема проявляется только в ядрах Linux до версии 6.12.
"До" это отлично. А "от" какой версии?
Некродеб как всегда дыряв - Bookworm 6.1
> "До" это отлично. А "от" какой версии?Там ниже анон пишет что уже 20 лет дырени 🥹
Аж с ядра 2.6.Интересно, этот код написали те самые непогрешимые диды, на которых местные апологеты дыряшки так яростно наяривают?
Или как обычно "это не настоящий сишник, вот настоящий никогда бы такую ошибку не допустил бы!"?
Что-ж поделаешь, Rust-овцы ещё не добрались переписать.
а где ваш написанный на русте аппармор?
Сколько линуксоидов используют HFS+ ? 0.1 линуксоида?
> А "от" какой версии?Какая разница... Вот таблетка:
sudo find /lib/modules -name 'hfs*.ko' -delete
Расскажите что это случайность, а не специально сделано для специальных людей.
> Расскажите что это случайность, а не специально сделано для специальных людей.Рассказывать можно что угодно, а вот доказать не получится.
К сожалению оно так сейчас работает - пекаря за антисанитарию вздрючат, а программер скажет "ну ошибся, с кем не бывает"
Сейчас куча всяких низкокачественных товаров продаётся и никто никог не трогает.
> Дело "сишников"
Это дела агентов Галактической Империи, АНБ лишь ширма для недальновидных
Как показывает практика 22.04 всё покоя не даёт , чё на новых не ковыряются и не делают эксплоитов или темплейтов остаётся загадкой
Ковыряются, просто пока эти уязвимости - кого надо уязвимости.
>чё на новых не ковыряются и не делают эксплоитов или темплейтов остаётся загадкойТоже мне бином Ньютона! На новых и ковыряются, и эсплоиты делают, но не публично и за хорошие деньги.
>Создание "user namespace" с привилегированным доступом внутри контейнера представляет угрозу только если в системе не установлены все доступные обновления и в ядре присутствует известная неисправленная уязвимостьВы же сами сказали - В ЯДРЕ ПРИСУТСТВУЕТ НЕИСПРАВЛЕННАЯ УЯЗВИМОСТЬ. Чтобы она не присутствовала - надо ядро переписать.
Все эти usernsы ... они были бы полезны, если бы не давали рута или capabilities внутри userns-а. То есть если бы были чисто для фейкинга uisd, gid и имени пользователя, и home.
Но монтирование произвольных ФСов с ядерными драйверами - это бездонная бочка эксплоитов. Пофиксить это - это только ядро и ФСы с нуля переписать, приоритезируя безопасность и полностью забивая болт на производительность и эффективность.
Если бы не давали рута или capabilities внутри userns-а, они бы были, как раз, бесполезны. Дистр, запущенный в контейнере абсолютно без внутреннего рута? Что-то совсем фантастическое. Как там, хотя бы, инициализация гостя происходить будет без рута?
Очень просто - запускайте всё то, чему нужен рут, в виртуальной машине. Она для этого и предназначена: чтобы гость хозяина не ломал - ему выделена отдельная камера. А рут в контейнере - запустите один процесс, дающий фейковый образ ФС через fuse, далее примонтируйте этот образ ядерным драйвером, и определённым образом нарушьте предположения, сделанные Тедом Тсо или авторами BRFS... И будет вам не просто рут на хотсе, а kernel mode.
Лучшие погромисты современности забыли проверить размер перед работой с буфером.+ if (key_len > sizeof(hfs_btree_key) || key_len < 1) {
+ memset(key, 0, sizeof(hfs_btree_key));
+ pr_err("hfs: Invalid key length: %d\n", key_len);
+ return;
+ }Никогда такого не было и вот опять!
Уровень защиты: Убунту. Самый бессмысленный дистриб на свете, постоянно втюхивают свои сомнительные решения. На кой черт вообще на уровне дистра ограничивать доступ к userns? Те, кому он мешает сидеть на стуле ровно, отключают его полностью, а не ограничиваются полумерами с какими-то стремными белыми списками.
Только вот они это отключить никак не могут так как у нихвесь софт сейчас в snap который без этого не работает. А все нормальные сборки софта они выкинули.
юзайте астру и не киздите
Mint, Arch, Fedora. Что угодно из этого будет лучше всяких астр.
>Для блокирования найденных лазеек разработчики Ubuntu рекомендуют отключить возможность изменения профилей AppArmor утилитой aa-exec, выставив настройку "sysctl kernel.apparmor_restrict_unprivileged_unconfined=1".Там просто в половине профилев написано, что они на самом деле unconfined. то есть используются исключительно для обхода того патча, который применён. Кстати, патч не только у Ubuntu, но и у Debian.
Cтало интересно, зачем они проверяют key_len < 1, а не просто с нулем, это же длина, как она вообще может быть отрицательной??int key_len;
У ядерщиков все возможно...
А в чем проблема? если длина больше нуля или равна нулю в зависимости от контекста может ошибкой быть, а может не быть, а если отрицательное число, то это код ошибки. Стандартнейшая практика.
> а если отрицательное число, то это код ошибкиТам было бы если функция hfs_bnode_read_u8, которая вызывается на 66 строке не возвращала бы u8 data;
Это во-первых.А во-вторых, если это ошибка, то где ее обработка?
> А во-вторых, если это ошибка, то где ее обработка?- Пейн! я обработчика ошибок не чувствую...
-- Буба, а у тебя его нет!Зачем вообще придумали такую глупость?
Настоящий програмист пишет все с первого раза и без ошибок.
Нынешние смузихлебы могут только завидовать силище предков.
ну тут из темы в тему ходят одни и те же люди, которые с упорством баранов доказывают, что лучше молча в UB свалиться и корраптить память, чем явно крашнуться и перезапуститься по возможностиэто даже не про ядро, даже в юзерспейсе не дай боже ошибки будут обработаны
> если длина больше нуля или равна нулю в зависимости от контекста может ошибкой быть, а может не быть, а если отрицательное число, то это код ошибки.А узнать что же значит код ошибки -39 мы не можем. Потому что программист перед тем как забыть проверить границы массива забыл про это написать в документации.
> Стандартнейшая практика.
Это и плохо. На PDP-7 действительно было необходимо экономить байты, даже ценой читаемости кода, удобства пользователей и разработчиков. Через каких-то пять лет это стало абсолютно бессмысленно, но поздно — практика уже сложилась.
> это же длина, как она вообще может быть отрицательной??Прежде всего, это int - целое число со знаком, оно вполне может быть отрицателным.
А длина может получиться отрицательной, например, в результате signed integer overflow.
> Прежде всего, это intПрежде всего это длина, а отрицательная длина это уже не длина, а какая-то дельта.
> А длина может получиться отрицательной, например, в результате signed integer overflow.
Если ты допустил integer overflow - то у тебя уже проблема.
А signed integer overflow для сишки это вообще UB.И вопрос скорее "а какого фига для key_len вообще использовали int, а не unsigned int?"
> это уже не длина, а какая-то дельтаВот именно! А дельту можно складывать с какой-то длиной и получать новую длину. Как складывать знаковое с беззнаком?
> А дельту можно складывать с какой-то длинойКонечно можно!
> и получать новую длину
Можно получать, а можно и не получать :)
Потому что отрицательная длина - не длина, а ошибка (которая дарит рут)))
А теперь посмотрим когда это наделали.github.com/torvalds/linux/blame/master/fs/hfs/bnode.c#L70
github.com/torvalds/linux/blame/master/fs/hfsplus/bnode.c#L68Linux-2.6.12-rc2 20 years ago (Apr 17, 2005)
Какая прелесть, не правда ли!
Где те люди, которые рассказывали что самое крутое ядро - 2.6?
Вчерась писали, что до тру кода галерных сеньеров это 2.0 версия. Так что все претензии только с чемоданом деняк принимаются.
Всегда поражали аноны, которым не лень посмотреть в блейме дату :D Но спасибо вам за то, что другим будет лень делать :)
> эксплоит, использование которого продемонстрировано в Ubuntu 22.04 с ядром 6.5.0-18-genericРодное ядро в 22.04 — 5.15. HWE — 6.8. Из какой промежуточной стадии они вытащили 6.5?
23.10
Какое же в Линукс низкое качество разработки. Я раньше свято верил, что это самое крутое произведение инженерной мысли за всю историю компьютеров. Эх, наивная юность =)
Ты просто ещё не знаешь что творится в других произведениях.
Ну если брать именно ОС с открытым исходным кодом, то такого отстоя нет больше нигде. Но вот беда, за теми ОС не стоят богатые дяди из IBM и они сидят без драйверов, которые в линуксе хоть и ужасного качества, но они есть и кое как даже работают.
>за теми ОС не стоят богатые дяди из IBM и они сидят без драйверовДа, тут дилемма: или с дядями и драйверами, но с низким качеством кода, или без дядей и драйверов, но с заметно более высоким качеством, но гораздо более медленной разработкой.
> или без дядей и драйверов, но с заметно более высоким качеством,
> но гораздо более медленной разработкой.А вот вы уверены что "с заметно более высоким качеством"?
Или там просто особо не смотрели, но если присмотреться, то будет как та гифка про Гомера и таракан.
Если ты хоть немного шаришь в системном программировании, можешь убедиться сам. Возьми ту же фряху или ещё лучше - NetBSD. Поизучай архитектуру ОС, почитай исходники, зацени документацию, попробуй принять хотя бы минимальное участие в разработке, повзаимодействуй с комьюнити. А потом попробуй повторить всё тоже самое, только с линуксом. После этого ты больше не будешь задавать таких вопросов.
> Возьми ту же фряху или ещё лучше - NetBSD.Такое же peшeтo?))
ftp.netbsd.org/pub/NetBSD/security/advisories/NetBSD-SA2023-001.txt.ascУчитывая что netbsd (по инфе из инетов) "аж целых" 7.3 млн строк кода, а линукс "всего лишь" 40 млн., из которых больше половины это драйвера от сторонних компаний (в том числе для видях АМД, которые бсдшники "одалживают" себе), то сложно ожидать равного качества.
github.com/udoprog/kernelstatsНу и разумеется - нет кода, нет проблем))
"Unfortunately, NetBSD doesn't yet support the Macintosh HFS and HFS+ file systems natively."
netbsd.org/ports/macppc/partitioning.html> повзаимодействуй с комьюнити
Как интересно взаимодействие с каммунити влияет качество кода?
> После этого ты больше не будешь задавать таких вопросов.
В общем сказать тебе толком нечего. Ясно-понятно.
Фря годами падала от извлечения USB флешки, вот это промышленный стандарт качества :) Да и люди ошибаются примерно одинаково везде - не надо тут бред рассказывать, Rust не на пустом месте появился. Только у Linux есть шанс исправитьсяа у фрип.здеца без корпораций - нет.
Если бы они без конца не ломали драйвера, я бы до сих пор так думал.
Тебе повезло. Я в наивной юности ещё и печень гробил на всяких линуксфестах и сходках MLUG путем заливания в организм всякого спиртного качеством примерно как этот самый линукс на десктопе. Насчет его опенсорсности не уверен, но может рецепты в открытом доступе где-то и валялись.
Насколько мне известно, Торвальдс страдал от алкогольной зависимости и, видимо, продвигал свой недуг в массы на линукс алкофестах.
Ну твоя юность ещё не закончилась, если ты не понимаешь, что главный фактор - это не качество кода, а потенция быстро исправлять свои ошибки, подтирать за собой, если старые решения показали свою ущербность. Можно быть с бесконечно крутым качеством, но без всякого развития.
Расскажи это программистам промышленного оборудования. Подумаешь реактор рванёт или навигация в самолёте откажет - дело-то житейское, сейчас подойдёт "профессионал" и быстро исправит свои ошибки, а может и что-то подотрёт, слюни персонала, например.
Ох уж это мистическое промышленное оборудование, со своими закадычными друзьями — авионикой, медаппаратурой и реакторами! Добавить немного абстрактной эмбедщины и мы соберём полный сет опеннетного программиста, весь опыт которого можно просуммировать как «C:\laba1».Всё, что ты перечислил — примитивные по своей сути системы. Цикломатическая сложность ядра Линукс (я уж молчу про всякую прикладную банальщину типа браузеров, кадов, ИДЕ и тому подобного, с чем работают люди) на порядки сложнее самых навороченных навигационных авиасистем.
У вас не правильные критерии оценки.
Линух любят за то что с ним можно делать всё что угодно по всякому, а не за то что это завершённый продукт готовый для домохозяек.
Типа "чем бы дитя ни тешилось, лишь бы своих не наделало".
Так можно сказать про абсолютно любой низкокачественный продукт.
Но оно лучшее после фряхи. Так что твоя вера не далека от правды.
А ещё после остальных BSD, Solaris, FreeRTOS, AmigaOS, QNX, Haiku и многих других.
> Проблема в том, что изначально многие подсистемы ядра были написаны с расчётом на то, что работать с ними может только пользователь root, и проблемы в подобных подсистемах не рассматривались как уязвимостьИными словами, Линукс (да и весь остальной UNIX-like со своим «всё файл», концепцией привилегированных портов, привилегированных UID/GID, и прочими атавизмами) — как был системой для однопользовательских локалхостов, так и остался. Plan9 намекал, что «всё урл» куда лучше подходит для распределённых систем, но слишком опередил своё время чтобы быть услышанным. А других инноваций у меня для вас нет.
> Иными словами, Линукс (да и весь остальной UNIX-like со своим «всё файл», концепцией привилегированных портов, привилегированных UID/GID, и прочими атавизмами) — как был системой для однопользовательских локалхостов, так и остался.Обычное постепенное развитие.
Долепливаем сбоку то что нужно, тк переделывать все нет времени и сил.> Plan9 намекал, что «всё урл» куда лучше подходит для распределённых систем, но слишком опередил своё время чтобы быть услышанным. А других инноваций у меня для вас нет.
Ну, были еще довольно интересные идеи - например тот же Phantom ОС.
До нее у мелкомягких была Сингулярити.Там были классные возможности с персистентностью и/или управляемой средой.
Но они были довольно сложны и для понимания, и для разработки.Может ядро настолько разжиреет, что загнется.
И вот тогда!...
А разве у межделмаша там не что-то в духе ос фантом до сих пор? Причём не грязь, а реально в железе. Вполне себе юниксы поверх крутятся. Но тут нужно понимать, что юниксы это примитивная ОС по определению. А вот что там у вендора из полезных костылей, другой разговор.
> Может ядро настолько разжиреет, что загнется. И вот тогда!...Windows 11 смотрит на вас с непониманием.
В описанном в новости ничего плохого нет.Насчёт однопользовательских локалхостов - нет.
В отличии от венды у линуха/бсд с сетью полный порядок и можно делать конфиги сложнее чем: "подключил к сети, получил настройки по DHCP".
Вендовые SID тот ещё адок.
Как настройки сети связаны с тем, что любой юникс сегодня — это однопользовательский локалхост в 99.999999999999% случаев? Да, включая те, что установлены на серверах с юзерской нагрузкой. Последний блёклый аналог многопользовательских систем — шаредный хостинг, нужность которого в наше время победивших публичных облаков, CDN и ультрадешёвых VPS принимает отрицательные значения.Что касается сети, раз уж она тебе так чешется, вообще-то всё так и должно работать: обеспечил физическое подключение, и дальше настройки применяются автоматически, от адресации и роутинга до DNS и NTP, как это сейчас реализовано в IPv6, а не выдрчивать «конфиги сложнее». Сложность сети должна быть абстрагирована от оконечного оборудования. То, что до сих пор где-то приходится сперва настроить все роутеры, потом все свичи, и всё равно надо что-то крутить на хостах — это прямой результат «всё файл». Это всё безотносительно винды, которая тоже однопользовательская система и страдает всеми теми же болезнями, что и любой юникс-лайк, только на свой лад.
Да никак, просто венда такой же локалхост под одного юзера только с плохой сетью.Вообще то, в современном мире когда даже дома легко набигает за десяток устройств подключённых к сети VLAN и прочие штуки становятся мастхэв.
Так же нужны бывают всякие тулзы для диагностики сети.
У венды с этим крайне плохо, а в линух/бсд это как два пальца.По работе с сетями венда традиционно аутсайдер.
Вланы туда завезли где то после восьмёрки, до того только через костыли в вендорских утилитах.
Сырые сокеты - порезаны.
Доступ к ethernet фреймам отсутствует.Топовый продукт для сетей от МС который я юзал - MS ISA2006 - даже в 2006 году сильно отставал (это если без мата) от того что есть в опенсорце рассыпухой, если не нужен фаервол клиент который по идее делал тоже самое что SOCK5 только прозрачно для приложений.
> Да никак, просто венда такой же локалхост под одного юзера только с плохой сетью.Все мейнстримные ОС — однопользовательские локалхосты, без исключений. 99% немейнстримных тоже. И вне зависимости от качества локалхоста, если для работы сети надо настраивать что-то кроме фаерволла — это сеть плохая, а не локалхост. И до хороших сетей мы может быть даже когда-то дорастём, но это процесс эволюционный и многое может пойти не так, но пока что мы коллективно движемся в правильном направлении.
А kernel.apparmor_restrict_unprivileged_unconfined в ванильном ядре есть? Что-то не могу найти инфу.
Например, в Убунте 14 ничего из перечисленного нету: ни unshare -U -r, ни allow userns, ни мутных профилей.
>> Например, в Убунте 14 ничего из перечисленного нету: ни unshare -U -r, ни allow userns, ни мутных профилей.Застрявший в старье , да её уже за друшлачили давно , она уязвимее самих уязвимостей
Пруфов от тебя, конечно, не будет. Пруфов на уязвимости БЕЗ патчей. Ты же понимаешь, что и у ядра, и у пакетов есть исходники, которые можно изменять и компилировать.
Не совсем понял причем тут namespace. Root в системе только один.**Например, можно применить к своему процессу профили от chrome, flatpak и trinity. ** - А какого хрена chrome, flatpak, trinity запускаются с рутовыми правами???
> А какого ... с рутовыми правами???Потому что "система-на-шнурках", особенно с вяленым на борту пошло. Сначала пытались всё обрезать, потом наткнулись, что ничего не работает, пришлось рута на все стороны раздавать.
С рутовыми , что бы показать силу , это как с крутыми возможностями но примите большую ответственность за корову
В каждом user namespace может быть свой отдельный root, который вне этого namespace никаких прав не имеет.
А потом оказывается, что вываливается наружу и ещё как имеет.