Комментарии 34
Интересные комментарии к коду, который поменяли в 2011 году. То, что старый код был лучше читаем менять его с точки зрения производительности особого смысла не было. И что выглядит как конспирологический способ добавить бэкдор.
По моему автор этого комментария просто не понял смысл правок. В том месте (parse_args.c ), которое, как я понял, он назвал «оптимизацией», на мой взгляд цель в другом — сделать так, чтобы аргументы остались лежать в памяти подряд, как они и лежали до этого.
Но баг то как раз не в этом месте, а в правке в первом файле (sudoers.c).
Судя по всему была уязвимая система, сначала было «sudoedit:», после update & upgrade стало «usage:», хотя вроде совсем недавно обновления приходили.
У меня убунта. До сегодняшнего дня уязвимость работала. Хотя обновления 146% приходили около недели назад, с этими обновлениями ещё нвидивские дрова слетели (дрова слетели ещё и на буке, так что не думаю, что совпадение), пришлось их сносить и устанавливать nouveau.

Централизованный релиз фикса был 26 января. Неизвестно, как он у вас приходил ранее. Плюс фикс в версии 1.9.5p2 (именно такая версия, patch2 версии 1.9.5).

Почему только сейчас? Это же не флэш плеер, это всего лишь текстовый парсер по большому счёту.
холиварный возглас
где там шутки про то чтобы поймать вирус в линуксе, его надо скомпилировать и запустить под рутом?
холиварный (и даже больше) ответ

Убунта — не линукс, а если кто не выключил/вытравил sudo в линукс — то и поделом дураку.

А разве это вирус? Подобные ошибки встречаются, но исправляют после нахождения быстро.

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

а вот с исправлением тут все похуже, не все ставят апдейты, в некоторых системах апдейтов нет вообще (типа встраиваемых систем)… а sudo туда могут притащить кривые мейнтейнеры дистрибутива, в голову приходит какойнить роутер… где и так полно было в прошлом всяких кривых админок дырами типа post 'http:///...../admin/exec=sh rm -rf *'… а если туда попал sudo то такие дырки начинают играть новыми красками

а учитывя наличие бага с 11 года, получается просто огроменный пласт всяких устройств и vps-ок хостингов, где если например и есть дыры типа описанной выше… но они были ограничены правами вебсервера (многих это успокаивает кстати)… а админы таких железок даже не читают новостей
Вот тоже давно меня интересует эта точка зрения.
Положим в винде с появлением UAC (ну или просто под пользователем без админских прав) зловред теперь всего лишь берёт и шифрует все пользовательские файлы. Ну да, системе-то он ничего не сделал, всё норм.
А что мешает так же делать под линуксом? Отсылаем на почту юзеру «Счёт на оплату.tar.gz», внутри бинарник с выставленным правом на запуск. Или я чего-то не знаю? [если что я линуксоид не настоящий]

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


P.S. Хотя наверное можно, например, отправить архив bill.tar.gz с исполняемым файлом bill.doc в расчёте на то, что пользователь распакует и запустит двойным кликом.

Всё верно. Именно по этому в описанном мною сценарии архив и отправляется. В архиве сохранена информация о правах, поэтому он и разворачивается уже с правом на запуск.

Я почему-то понял так, что вместо самого архива бинарник. Так-то да, в типичных конфигурациях ничего (кроме квалификации пользователя) не мешает подобным образом все пользовательские файлы зашифровать.
Поднятие привилегий скорее при атаках на сервера нужно.

Дело в том, что поднятие привилегий сейчас скорее нужно для целенаправленной атаки. Для ковровых бомбардировок шифрование пользовательских данных с последующим требованием выкупа оказалось куда как проще и выгоднее с точки зрения монетизации (а ради искусства зловреды уже давно писать перестали). Поэтому последние несколько лет шифровальщики практически вытеснили другие типы угроз. Отсутствие (массовое по крайней мере) шифровальщиков на юникс-подобных ОС объяснить можно видимо только тем, что их пользователи не являются целевой аудиторией оных. Несколько месяцев назад тут была статья про рекламную выдачу поисковиков сайтов с поддельными Скайпами. И то что вся эта выдача пропадала напрочь если заходить с линукса. Это IMHO очень хорошо иллюстрирует ситуацию. Т.е. шутки про вирусы на линуксе остаются шутками только благодаря тому, что их создатели не считают нужным заморачиваться написанием оных, а не из-за того что этому как-то препятствует архитектура операционной системы.
Дело в том, что поднятие привилегий сейчас скорее нужно для целенаправленной атаки. Для ковровых бомбардировок шифрование пользовательских данных с последующим требованием выкупа оказалось куда как проще и выгоднее с точки зрения монетизации (а ради искусства зловреды уже давно писать перестали). Поэтому последние несколько лет шифровальщики практически вытеснили другие типы угроз.

Не спорю.


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

Сдаётся мне, поисковых запросов а-ля "скачать скайп" из-под линукса крайне мало по той причине, что все, кто не перешёл только-только с винды, привыкли к магазинам приложений / репозиториям. И это действительно существенное отличие, которое довольно сильно мешает распространению вирусов и делает платформу ещё менее привлекательной для вирусописателей.

А в MacOS и *BSD используется какое-то другое sudo, без этой уязвимости?

По крайней мере в BSD используется doas, которая не имеет такого количества легаси и гораздо проще (а значит, её проще проверять).

Из коробки вроде только в OpenBSD. А так doas и в Linux можно поставить.

В macOS 10.12 используется: opensource.apple.com/tarballs/sudo/sudo-83.tar.gz:
2016-06-22 Todd C. Miller <Todd.Miller@courtesan.com>

* NEWS, configure, configure.ac:
Sudo 1.8.17p1
[bc30a172370c]

* src/sudo.c, src/sudo.h:
Set user groups in exec_setup() if they were not already set by
policy_init_session(). Bug #749
[3bf16489800c]
...

Которая, в принципе, попадает в диапазон: «sudo всех версий от 1.8.2 до 1.8.31p2 (legacy) и от 1.9.0 до 1.9.5p1 (stable)»

Но sudoedit нет, поэтому, конечно, надо проверять, но вероятно, в этот раз Apple пронесло.
Моя логика была по этой схеме, где 1.8.2 > 1.8.17
ru.wikipedia.org/wiki/Нумерация_версий_программного_обеспечения
Сравнение версий идёт по правилам десятичных дробей: 0.9 < 1.0 < 1.01 < 1.1 = 1.10 < 1.11 < 1.2 = 1.20 < 2.0 < 2.5.

Залез в гитхаб судопроджекта, а там да, действительно 1.8.2 < 1.8.17
По правилам дробей практически никто не сравнивает — устанете программу для сравнения писать.
Хм, не знаю, не знаю, но на мой взгляд 1.8.2 <= 1.8.17p1 <= 1.8.31p2 (для 10.12 из коробки). Для macOS 11.0.1, 10.15.6 на opensource.apple.com версия 1.8.31. Текущие, похоже, тоже:
$ sw_vers 
ProductName:	Mac OS X
ProductVersion:	10.15.7
BuildVersion:	19H114
$ sudo --version
Sudo version 1.8.31
Sudoers policy plugin version 1.8.31
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.31
Для BSD зависит от администратора, «sudo» там в «ports». Но пока, скажем, в www.freebsd.org/security/advisories упоминаний за современные sudo нет, быть может, так же как и для macOS, вероятно, не особо подвержены, а может просто тормозят.
P.S.
Говорят, что уязвимость типа переполнения буфера в «куче», так что вполне возможно, что и не подвержены.

Судя вот поэтому тесту


sudoedit -s '\' `perl -e 'print "A" x 65536'`

последнее обновление sudo на CentOS-8 дырку не закрывает. Кто-нибудь знает, где под CentOS-8 можно пропатченную версию взять?

На scaleway сказали что несмотря на то, что у них версия ниже, она патченая

Linux copy 4.15.0-132-generic #136-Ubuntu SMP Tue Jan 12 14:58:42 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
sudo --version
Sudo version 1.8.21p2
Sudoers policy plugin version 1.8.21p2
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.21p2

sudoedit -s
usage: sudoedit [-AknS] [-r role]…
Прочитал много статей по теме, но так и не понял: на su эта проблема тоже распространяется? Или проблемный кусок кода используется только в sudo, но не в su?
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.