The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимость в пользовательском окружении Enlightenment, позволяющая получить права root

15.09.2022 22:23

В пользовательском окружении Enlightenment выявлена уязвимость (CVE-2022-37706), позволяющая непривилегированному локальному пользователю выполнить код с правами root. На момент раскрытия информации уязвимость оставалась неисправленной (0-day). В открытом доступе уже имеется эксплоит, протестированный в Ubuntu 22.04.

Проблема присутствует в исполняемом файле enlightenment_sys, поставляемом с флагом suid root и выполняющем через вызов system() определённые разрешённые команды, такие как монтирование накопителя утилитой mount. Из-за некорректной работы функции, формирующей строку, передаваемую в вызов system(), из аргументов запускаемой команды вырезаются кавычки, что можно использоваться для запуска своего кода. Например, при запуске


   mkdir -p /tmp/net
   mkdir -p "/tmp/;/tmp/exploit"
   echo "/bin/sh" > /tmp/exploit
   chmod a+x /tmp/exploit
   enlightenment_sys /bin/mount -o noexec,nosuid,utf8,nodev,iocharset=utf8,utf8=0,utf8=1,uid=$(id -u), "/dev/../tmp/;/tmp/exploit" /tmp///net

из-за вырезания двойных кавычек, вместо указанной команды '/bin/mount ... "/dev/../tmp/;/tmp/exploit" /tmp///net' в функцию system() будет передана строка без двойных кавычек '/bin/mount ... /dev/../tmp/;/tmp/exploit /tmp///net', что приведёт к отдельному исполнению команды '/tmp/exploit /tmp///net' вместо обработки как части пути к устройству. Строки "/dev/../tmp/" и "/tmp///net" подобраны для обхода проверки аргументов команды mount в enlightenment_sys (устройство монтирования должно начинаться на /dev/ и указывать на существующий файл, а три символа "/" в точке монтирования указаны для достижения требуемого размера пути).

Дополнение: Опубликован корректирующий выпуск enlightenment 0.25.4 с исправлением уязвимости.

  1. Главная ссылка к новости (https://twitter.com/maherazz2/...)
  2. OpenNews: Выпуск пользовательского окружения Enlightenment 0.25
  3. OpenNews: Рабочий стол Budgie переходит с GTK на библиотеки EFL от проекта Enlightenment
  4. OpenNews: Новая версия EFL 1.20 (Enlightenment Foundation Library)
  5. OpenNews: Уязвимости в драйвере NTFS-3G, позволяющие получить root-доступ в системе
  6. OpenNews: Уязвимость в firejail, позволяющая получить root-доступ в системе
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/57791-enlightenment
Ключевые слова: enlightenment
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (78) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Анонн (?), 22:57, 15/09/2022 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     

     ....ответы скрыты (9)

  • 1.4, Аноним (6), 23:06, 15/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В java сделано менее удобно, но безопасно.
    ProcessBuilder command(List<String> command)
    Каждая строка, отдельный аргумент
     
     
  • 2.8, Аноним (8), 23:19, 15/09/2022 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Это слишком скучно, по строкам надо гулять самостоятельно, парсить их кое-как и обязательно забыть тот факт, что /bin/sh может указывать куда угодно, ну и проигнорировать man, в котором "Do not use system() from a privileged program".
     
  • 2.11, Rev (?), 23:35, 15/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В расте тоже массив аргументов, в который не сунуть ещё одну команду.
     
     
  • 3.34, А (??), 10:33, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В любом развитом языке. Шелл не предназначен для программирования. Шелл для обслуживания в рукопашную. Остальное, по идее, можно писать на Rust, C, C++, Java, Python... Чёт Fortran напомнило тоже и Go. :)

     
     
  • 4.76, Аноним (-), 07:20, 17/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > В любом развитом языке. Шелл не предназначен для программирования. Шелл для обслуживания
    > в рукопашную. Остальное, по идее, можно писать на Rust, C, C++,
    > Java, Python... Чёт Fortran напомнило тоже и Go. :)

    ЧСХ питонисты удумавшие делать system() тоже встречались. По тем же поводам.

     
  • 3.38, Аноним (38), 10:45, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А в Карбоне если ты попытаешься сунуть еще одну команду, компилятор посылает письмо куда положено и за тобой выезжает пояснительная бригада рассказывать что так делать не надо.
     
     
  • 4.79, Аноним (-), 15:40, 17/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > А в Карбоне если ты попытаешься сунуть еще одну команду, компилятор посылает
    > письмо куда положено и за тобой выезжает пояснительная бригада рассказывать что
    > так делать не надо.

    Или наоборот, выписывает письмо чтобы премию выдали.

     

  • 1.7, Аноним (20), 23:14, 15/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Да, там куча мерзких суидных бинарей фоном висит. Отвратительно, хуже гнома. А ещё оно течёт и не работало на зелёных карточках (да и вообще с libglvnd не работало ускорение).
     
     
  • 2.55, Аноним (55), 15:17, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > куча мерзких суидных бинарей фоном висит. Отвратительно, хуже гнома.

    Она в любом случае висит. Вопрос только что это за бинари - из состава systemd, udev, udisks... или собственные велосипеды.

    Так-то даже в sudoedit нашли эпичный баг с кавычками.

     
     
  • 3.56, Аноним (20), 15:22, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Все перечисленные вещь сугубо опциональная. ЕМНИП пару лет назад даже в кедах udisks не требовался (но монтирование флешек кликом не работало, соответственно). А вот у сабжа не отказаться.
     
     
  • 4.66, Аноним (55), 18:21, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Все перечисленные вещь сугубо опциональная.

    Ну... это скорее путь замаскировать проблему. В современном linux конечно можно кучу системных сервисов DBus потушить. Но в итоге придётся из DE выходить по su -c reboot или из vt1 комбинацией C+A+D. И спрашивается - нафига тогда вообще DE ставилось?

    P.S. Вариант "выпилить функцию" или "не использовать функцию" на самом деле не решает проблему, а только создаёт временную иллюзию отсутствия проблемы. Холивары SUID-бинарик vs "root DAEMON"+"запросы из userspace", а также "стандартное решение" vs "лёгкий велосипед" это никак не решит.

     

  • 1.9, Аноним (9), 23:20, 15/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Каждый раз вижу упоминание этого поделия, вспоминаю вот этот мощный пост от человека который с ЭТИМ работал.
    https://what.thedailywtf.com/topic/15001/enlightened
     
     
  • 2.10, Анонн (?), 23:31, 15/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Заметка за 2015 год.
    Интересно, с того момента стало лучше? Или только хуже?
     
     
  • 3.12, пох. (?), 23:36, 15/09/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    enlightenment_sys: Command not found.
    E16


     
  • 2.68, Аноним (68), 19:07, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Уморительно. Большое спасибо за ссылку
     

  • 1.23, Аноним (23), 03:49, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Тут прекрасно всё — и суидный бинарник, и кривая санитизация пользовательского ввода. Снова, небось, ненастоящие сишники прокрались в проект и херни напрогали.
     
     
  • 2.69, warlock66613 (ok), 21:44, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Без суидного бинарника эта задача никак по-нормальному не решается.
     

  • 1.27, pashev.ru (?), 07:13, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > разрешённые команды, такие как монтирование накопителя утилитой mount

    D-bus, udisks и. п. придумали трусы и враги народа, да-да.

     
     
  • 2.46, Аноним (46), 12:27, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А под фрёй?
     
     
  • 3.51, ip1982 (ok), 13:16, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А под виндой? А под OS/2? А под MS-DOS?

    https://www.freebsd.org/cgi/man.cgi?query=bsdisks&sektion=8&manpath=freebsd-re
    https://www.freebsd.org/cgi/man.cgi?query=dbus-daemon&sektion=1&apropos=0&manp

     
  • 3.57, Andrey (??), 15:27, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >А под фрёй?

    Вроде, всё нужное для реализации безопасным способом тоже есть:

    https://www.freshports.org/sysutils/polkit
    https://www.freshports.org/devel/dbus/

     
     
  • 4.87, Хру (?), 19:50, 18/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    polkit? Это то поделие которое исполняет жабоскрипты вместо правил и в котором уже находили рутовые дыры?
     
  • 3.94, abi (?), 12:52, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Я видел udisks под фрёй и даже что-то монтировал им в тестовых целях
     
  • 2.50, Аноним (50), 13:10, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    С ними своих проблем хватает. Dbus это вообше кладезь security... issues :))
     
  • 2.52, Аноним (52), 15:05, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да. Полкит забыли и остальное.
    Все это от лукавого.
    Покайтесь пока не поздно! Причаститесь юникс веем и поцалуйтеся. В смысле кисс. А то мало ли...
     
     
  • 3.58, Аноним (55), 15:27, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Покайтесь пока не поздно!

    Проблем не было, когда носители быль СЪЁМНЫМИ! Добавил пользователя в группу floppy и в /etc/fstab прописал точку монтирования с user (или users, как там политика позволяет). Аналогично с cdrom.

    Вся эта эпопея началась с приходом флешек... Нужно в udev (или в ядре) какие-то правила задать, чтобы к каждому порту usb было привязано предсказуемое имя съемного накопителя. Или имена устройств подставлялись предсказуемо в зависимости от номера порта. И всё вернётся на круги своя. Сразу забил все возможные флешки в /etc/fstab и никакие udisks нафиг не нужны!

     
     
  • 4.70, warlock66613 (ok), 21:46, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Откройте для себя pmount и вам станет не нужен и fstab.

    На правах рекламы: https://github.com/A1-Triard/media

     
  • 4.92, пох. (?), 19:38, 21/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Нужно в udev (или в ядре) какие-то правила задать, чтобы к каждому порту usb было привязано
    > предсказуемое имя съемного накопителя.

    Этот код из ядра божок-с-пальцем послал подальше.

    Да, он уже был и работал.

     

  • 1.28, pashev.ru (?), 07:41, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > strace ./enlightenment_sys 2>&1 | grep exec

    Чувак не читал man strace

     
     
  • 2.72, Michael Shigorin (ok), 23:42, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ну фильтры не так давно туда добавили, несколько лет как.
     
     
  • 3.90, glebfm (ok), 09:12, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если ты про strace -e trace=/exec, то ему 5 лет.  Это несколько, но достаточно много.
    А strace -e trace=process был всегда, хотя он deprecated и всесто него лучше использовать strace -e trace=%process.
     
  • 2.81, Аноним (23), 16:44, 17/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Сколько ман ни читай, а грепнуть вывод в интерактивной сессии проще, чем вспоминать синтаксис фильтров strace.
     

  • 1.29, pashev.ru (?), 07:46, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Second it elevate it's privileges to root.

    Its privileges.

    > No symbols were found first try but yeah no need for those as it turned out to

    be a relatively small binary

    Чувак не знает про пакеты с отладочными символами на Убунте.


     
  • 1.30, YetAnotherOnanym (ok), 09:49, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Проблема присутствует в исполняемом файле enlightenment_sys, поставляемом с флагом suid root и выполняющем через вызов system() определённые разрешённые команды, такие как монтирование накопителя утилитой mount

    Убивать за такое надо. Напрямую дёрнуть mount(2) - не?

     
     
  • 2.49, Аноним (50), 13:08, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я так понимаю что там идея в том что процесс не привилегирован в целом но делает повышении прав suid'ом когда монтирует, так что может это сделать.

    Если делать mount() из непривилегированого процесса, это не получится.
    Если из жирного привилегированого - это вулнов пачка.

     
     
  • 3.64, пох. (?), 16:32, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    То ли дело system() из suid-root позвать.

     
     
  • 4.67, Аноним (67), 19:06, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    [insert obligatory патч бармина joke here]
     
  • 4.89, Аноним (89), 13:17, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > То ли дело system() из suid-root позвать.

    Если бы они весь процесс под root гоняли при том что они даже с вон тем лажают, врядли это было бы улучшением ситуации. А так какиенить корейсы небось кодили, а они те еще кодеры, как и кетайсы. Они так то за 2 и 3 места после индусов рубятся не на жизнь а насмерть.

     
  • 2.60, Аноним (60), 15:43, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Цивилизованная софтина будет наверное дёргать какой-нибудь udisks без suid-а.
     

  • 1.31, Аноним (31), 10:00, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Хотя казалось причём здесь DE и root
     
     
  • 2.36, А (??), 10:38, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А ведь - да!
     
  • 2.62, Аноним (60), 16:04, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    если enlightenment — это DE, то XFCE — это целая ось
     
  • 2.63, пох. (?), 16:31, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В смысле, причем тут? Вы ж хотели "какввенде" - чтоб флэшечку пыщь-пыщь и магия, сматри-сматри, окошко само открылось!

    Это и есть концепция "DE". Еще надо autorun.inf, но за этим обратитесь в redhat. Они преуспели и в этом тоже.

    А кому вместо этого window manager - у того нет никаких enlightenment_sys, shitdisk, дряньbus и прочего мусора. Но вам такое не понравится.

     
     
  • 3.82, Аноним (23), 16:50, 17/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Правильно, надо вручную флешки монтировать. 1% слишком много, надо 0.5%. А ещё лучше перфокарты дыроколом.
     
     
  • 4.83, Аноним (83), 21:39, 17/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Лучше 0.0001%.
    Я пофиксил
     
  • 4.85, пох. (?), 16:32, 18/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    У тех кто не понимает почему иной подход ВСЕГДА будет чреват root exloit'ом и испытывает неисчислимые страдания от аж ручного монтирования (отдельный привет с ручным размонтирование...ой, файл-то до флэшки так и не долетел) - давным-давно есть прекрасная windows где все именно так как вы любите.

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

    И вот поэтому вас 1% - потому что вы "никактиекаквсе". А те кому когда-то был нужен юникс а не винда - выбирали его совсем по другому критерию. Этот выбор поделился на ноль. Сейчас винда - более управляемая и предсказуемая система, не без недостатков, но такого п-ца нет и не предвидится.

     
     
  • 5.88, Аноним (88), 13:04, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Расскажи как в винде дать команду сброса кэша на диск? В linux - sync
     
     
  • 6.91, пох. (?), 19:35, 21/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    правой кнопкой мышички - eject. Появляется чудненькое окошечко "теперь что всунул - можешь высунуть, тебе за это ничего не будет!" Причем придется для начала включить режим writeback кэширования - не буду писать тут рецепт, зачем вам знания. В обычной ситуации все это ненужно - ее ж для людей а не нитакихакеров делали. Лампочка погасла - можно выдергивать.

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

     

  • 1.35, Аноним (35), 10:33, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    suid was a mistake.
     
     
  • 2.78, Аноним (78), 14:29, 17/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    linux was a mistake...
     
     
  • 3.84, Аноним (83), 21:39, 17/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Unix was a mistake.
     

  • 1.37, Аноним (38), 10:41, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так в том то и смысл что функция отработала корректно.  
     
  • 1.39, bnm (?), 10:48, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А помните когда кде и гном были никакими, енлайтмент считался тяжелой оболочкой
     
     
  • 2.45, Аноним (45), 12:21, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А ещё говорят, если на Сишке, то нет оверхеда.
     
     
  • 3.48, Аноним (50), 13:06, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Сам пиши DE на ассемблере и без либ. Не, колибри по своему угарный, конечно, только вот они уже который год на 64 бита патаются, да еще возлюбив некий C--? :)
     
  • 2.53, хрю (?), 15:07, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >>А помните когда кде и гном были никакими

    Как будто с тем пор что-то изменилось.

    >>енлайтмент считался тяжелой оболочкой

    Я его ставил, но обнаружив, что у него проблемы с utf8 поигравшись удалил. Так что он был всегда так себе.

     
     
  • 3.73, Michael Shigorin (ok), 23:43, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не наблюдал у E проблем с utf8 (в основном ещё на 0.17 притом).
     
     
  • 4.86, пох. (?), 16:34, 18/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Не наблюдал у E проблем с utf8 (в основном ещё на 0.17
    > притом).

    вероятно, потому что у window manager и не может быть никаких проблем с тем, чего в нем и нет?

    Но,к сожалению, из нее таки сделали "дрисктоп". Потому что не оскудевает число желающих "какввенду".

     
  • 4.93, хрю (?), 10:55, 25/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Не наблюдал у E проблем с utf8 (в основном ещё на 0.17
    > притом).

    я про давние времена - про 0.16. Там не было поддержи utf-8 для заголовков и ещё были проблемы.

     

  • 1.40, Аноним (40), 11:18, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    признайтесь,хоть один человек использует Enlightenment?ПО моему абсолютно неюзабельная хрень,похлеще последнего гнома.
     
     
  • 2.41, Массоны Рептилоиды (?), 12:05, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Его даже его разрабы не используют
     
  • 2.54, Аноним (52), 15:08, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да гном и предпоследний был ахтунг. Каковы разрабы...
    Уж лучше конечно сабж, чем гном. Ну это если была бы только дихотомия, разумеется.
     
  • 2.74, Michael Shigorin (ok), 23:46, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я использовал в 2013--2015; если бы не на сизифе тот UX31A держал, а на стабильной ветке с E17 и работающим интеловским драйвером -- то так бы всё прекрасно и оставалось до конца той ветки.  А на unstable как только докатилось эхо войны интела со своим видеодрайвером (когда началось exa-uxa-гопцаца), так и применять композитный WM без софтрендера -- который там есть и быстрый, но батарейку-то быстрее жрёт -- стало практически невозможно: "спецэффекты" при открытии того же терминала попросту били квадратами по глазами.

    В общем, вернулся на wmaker, с него и прямщас пишу.

     

  • 1.43, Аноним (-), 12:14, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Может быть, господа разработчики усвоят что вхождение в коде system() это примерно то же что и vuln()? :)
     
     
  • 2.59, Аноним (-), 15:42, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Инсталляторы на fabric передают привет!
     
  • 2.71, warlock66613 (ok), 21:52, 16/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Волков бояться — в лесу не… ну вы знаете.
     
     
  • 3.80, Аноним (-), 15:43, 17/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Волков бояться — в лесу не… ну вы знаете.

    Если время и место выбрать неудачно всякая фигня случается. Особо ушлых не то что волки, молнией зашибало насмерть. Зато номинация на Darwin Awards шикарная.

     

  • 1.61, a_kusb (ok), 15:54, 16/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А вот если бы разные права не наследовались там...
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру