В дерево портов FreeBSD добавлена утилита doas (http://www.freshports.org/security/doas/), представляющая собой упрощённый аналог программы sudo, позволяющий выполнять команды от имени другого пользователя. Утилита развивается в недрах проекта OpenBSD в ответ на усложнение современных выпусков sudo, которые не отвечают требованиям OpenBSD по безопасности и зависимостям.
Портирование (https://github.com/slicer69/doas) не обошлось без казуса - спустя несколько часов после публикации порта, в нём была обнаружена критическая уязвимость (https://github.com/slicer69/doas/issues/2), позволяющая (https://twitter.com/mordin_/status/746372693071642624) выполнить привилегированные операции, даже если был указан неверный пароль пользователя. Т.е. любой пользователь, указанный в секции "permit" в файле doas.conf может выполнить любые допустимые команды, указав любые символы в ответ на запрос пароля. Проблема была вызвана ошибкой (https://github.com/slicer69/doas/commit/720db7212167f05bcdcb...) в коде обработки отрицательного результата проверки пароля через PAM (при ошибке программа не завершала свою работу).
URL: https://www.reddit.com/r/freebsd/comments/4pmp78/openbsds_do.../
Новость: https://www.opennet.ru/opennews/art.shtml?num=44663
Бывает. Строк кода много, разрабов мало, тех кто смотрит этот код ещё меньше.
А добавили проблему я так понимаю этим коммитом:
https://github.com/slicer69/doas/commit/d55af6cdf4267e6e1cfb...
> (void) strlcpy(cmdline, argv[0], sizeof(cmdline));
> char *challenge = NULL, *response, rbuf[1024], cbuf[128];* facepalm.avi 10GB *
Шёл 21 век. В мире FOSS все знали про языки с GC, но сказать вслух плохое про святую сипиписю никто не отваживался и мыши продолжали жрать кактус и писать фиксед буфера с копированием строк уровня CPU.
капец....
> Бывает. Строк кода много, разрабов мало, тех кто смотрит этот код ещё меньше.А уж тех, кто понимает...
> Бывает. Строк кода много, разрабов мало, тех кто смотрит этот код ещё
> меньше.Что «бывает» — согласен. А вот насчёт «строк кода много» — это в doas-то?
<pre>$ wc -l doas.c doas.h parse.y
475 doas.c
23 doas.h
324 parse.y
822 total</pre>
да и в названии опечатались и пропустили вторую "s" вконце
А откуда ты знаешь, что пропустили именно вторую "s"? Мне кажется первую...
А мне кажется что там DoАзЪ должен быть ... истинно вам говорю!, иже херувимы ... :)
do. do as. do as root
do
do ass
do ass hard
doass — хорошее название программы, прям как 1С
Ага, хотели портировать хорошую утилиту doas, а вышло как всегда - doass ;)
А что умудрились в sudo-то усложнить?
> А что умудрились в sudo-то усложнить?Много чего -- поэтому в альте до сих пор 1.6.8p12 имени courtesan.com, а в федоре, скажем, https://bugzilla.redhat.com/buglist.cgi?component=sudo&list_...
и сколько в альте правок этой самой p12 поверх оригинала?
Не получится ли больше чем в федоре (причем там - половина в том что что-то не работает как задумано) при на два порядка меньшей user base и соответственно меньшей верифицированности?хотя, конечно, sudo и от рождения-то была не фонтан (в частности и пресловутый pam - так же как в этой do-ass, добавлен туда далеко не сразу, и не с первой попытки без существенных косяков - я помню как ковырнул, ужаснулся, и пару лет жил без sudo), а наверчивание на нее все новых и новых нужных непойми кому приблуд (на, пардон, _security_ утилиту, которая обязана быть как можно более простой) лучше ее не сделало.
Но я бы нынче смотрел в сторону хака sudo по образцу libressl, а не в сторону портирования поделий из openbsd.
> и сколько в альте правок этой самой p12 поверх оригинала?Жалких сорок килобайт: https://packages.altlinux.org/ru/Sisyphus/srpms/sudo/patches :)
> Не получится ли больше чем в федоре (причем там - половина в
> том что что-то не работает как задумано) при на два порядка
> меньшей user base и соответственно меньшей верифицированности?Те users, которые вычитывали этот код, явно минимум на порядок *более* квалифицированны, судя по сопоставлению списков применимых CVE...
Makefile.in | 17 ++--
UPGRADE | 12 +++
aclocal.m4 | 16 ++--
auth/pam.c | 23 ++++-
check.c | 18 ++++
config.h.in | 3 +
configure.in | 35 +++++---
defaults.c | 3 +-
env.c | 33 +++++--
find_path.c | 5 +-
logging.c | 5 +-
parse.c | 255 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
parse.yacc | 13 +++
pathnames.h.in | 14 +++
rpminst.sudoers | 19 +++++
sample.pam | 33 +------
sudo.c | 92 ++------------------
sudo.control | 17 ++++
sudo.h | 1 -
sudo.pod | 15 ++--
sudoers | 22 ++---
sudoers.control | 19 +++++
sudoers.man.in | 2 +-
sudoers.pod | 9 +-
tgetpass.c | 7 +-
visudo.man.in | 2 +-
visudo.pod | 5 +-
27 files changed, 487 insertions(+), 208 deletions(-)то есть затронуто этими сорока килобайтами - почти все и не по разу. Ну и стоило оно того?
> Те users, которые вычитывали этот код, явно минимум на порядок *более*
> квалифицированны, судя по сопоставлению списков применимых CVE...еще раз, медленно: большая часть этих CVE относится к фичам, которых в вашей версии вообще нет, и, не всегда, но часто, совершенно безвредны, если этими самыми фичами не пользоваться - то есть это следствия добавления нового функционала. А у тебя уже полтыщи правок - без копейки нового, разумеется, оно так спокойнее, но причем тут квалификация?
Ну и было за что бороться?
Я за хорошие форки. Но в данном случае это трудно назвать хорошим форком - скорее просто унылое сидение на версии, которая "вроде показалась устраивающей" (конкретных нескольких человек, а не всех пользователей даже) с бесконечным бэкпортом этих же самых CVE
> Ну и стоило оно того?Да.
> причем тут квалификация?
При выборе, среди прочего -- что тянуть, что нет.
PS: su(8) тоже другой, но иначе. :)
>[оверквотинг удален]
> меньшей user base и соответственно меньшей верифицированности?
> хотя, конечно, sudo и от рождения-то была не фонтан (в частности и
> пресловутый pam - так же как в этой do-ass, добавлен туда
> далеко не сразу, и не с первой попытки без существенных косяков
> - я помню как ковырнул, ужаснулся, и пару лет жил без
> sudo), а наверчивание на нее все новых и новых нужных непойми
> кому приблуд (на, пардон, _security_ утилиту, которая обязана быть как можно
> более простой) лучше ее не сделало.
> Но я бы нынче смотрел в сторону хака sudo по образцу libressl,
> а не в сторону портирования поделий из openbsd.x/0
Ничего, что автор doas — один из основателей LibreSSL?
Какая-то желтая насквозь новость. Представляется, как сразу после опубликования порта все пошли вдруг устанавливать doas, но тут вдруг, критическая уязвимость! Сколько невинных душ пострадало за этот час.
> Какая-то желтая насквозь новость. Представляется, как сразу после опубликования порта
> все пошли вдруг устанавливать doas, но тут вдруг, критическая уязвимость! Сколько
> невинных душ пострадало за этот час.С другой стороны, если такая плюха находится в первый же час - что с остальным кодом творится? Бсдшное качество как есть.
> что с остальным кодом творится? Бсдшное качество как есть.То ли дело PPA с AURами!
Кстати, да, не у всех юниксоподобных есть такие классные друзья:
http://www.linux-magazine.com/Online/News/Microsoft-Patents-...
Так что да, лапчатые могут гордиться!
этому Анониму больше не наливать
> Бсдшное качество как есть.А еще у них в портах есть sudo
http://www.freshports.org/security/sudo/
да-да, тот самый:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=2012-0809
> Format string vulnerability in the sudo_debug function in Sudo 1.8.0 through 1.8.3p1 allows local users to execute arbitrary code via format string sequences in the program name for sudo.https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0106
> Sudo 1.6.9 before 1.8.5, when env_reset is disabled, does not properly check environment variables for the env_delete restriction, which allows local users with sudo permissions to bypass intended command restrictions via a crafted environment variable.
>
> Бсдшное качествоЗабавно
Особенно на фоне всяких http://mobile.opennet.ru/opennews/art.shtml?num=44669
> Особенно на фоне всяких http://mobile.opennet.ru/opennews/art.shtml?num=44669Там обычное повышение прав, в хитрой ситуации котрую не предусмотрели. Но вот не предусмотреть что пользователь введет неправильный пароль?!?!!!
>> Особенно на фоне всяких http://mobile.opennet.ru/opennews/art.shtml?num=44669
> Там обычное повышение прав, в хитрой ситуации котрую не предусмотрели. Но вот
> не предусмотреть что пользователь введет неправильный пароль?!?!!!Тут обычная опечатка, которую заметили и исправили моментально. А там серьезная уязвимость...
> Тут обычная опечатка, которую заметили и исправили моментально. А там серьезная уязвимость...Спору нет, вход без знания пароля под правами рута - серьезная уязвимость. Но вот не заметить ее можно только если ни разу не запускать свой код. Автор наверное использовал putty.exe и UAC вместо doas.
Было бы печальнее, если бы эта плюха не была бы найдена в первый час. А так, значит, что не всё ещё потеряно, и сообщество ещё в состоянии скорректировать ошибки индивидуалов.
> Было бы печальнее, если бы эта плюха не была бы найдена в
> первый час. А так, значит, что не всё ещё потеряно, и
> сообщество ещё в состоянии скорректировать ошибки индивидуалов.На месте сообщества было бы разумно объявить такую программу глубоко экспериментальной альфой, непригодной для практического применения. Чтобы люди понимали что автор в момент написания был невменяем и аудит может потребовать значительное время.
>> Было бы печальнее, если бы эта плюха не была бы найдена в
>> первый час. А так, значит, что не всё ещё потеряно, и
>> сообщество ещё в состоянии скорректировать ошибки индивидуалов.
> На месте сообщества было бы разумно объявить такую программу глубоко экспериментальной
> альфой, непригодной для практического применения. Чтобы люди понимали что автор в
> момент написания был невменяем и аудит может потребовать значительное время.Какую такую? В оригинальном doas банально нет поддержки PAM, это в FreeBSD её прикрутили.
> С другой стороны, если такая плюха находится в первый же час -
> что с остальным кодом творится? Бсдшное качество как есть.Смотрите дети, альтернативная логика очередного лапчатого зилота – это вот так! )
А сейчас он нам расскажет, что в официальных репах его дистрибутива нет PHP c OpenJDK, ну или что это совсем-совсем не тоже самое … =)
> Смотрите дети, альтернативная логика очередного лапчатого зилота – это вот так! )Это альтернативная логика зилотов. Но не лапчатых.
> А сейчас он нам расскажет, что в официальных репах его дистрибутива нет
> PHP c OpenJDK, ну или что это совсем-совсем не тоже самое … =)PHP и OpenJDK - громадные монстры с сложным кодом. Логично что там багов - оптом. По умолчанию этого багодрома в дистрах все-таки нет. А в этом случае налицо тот факт что автор свою программу даже не запускал. Иначе как он смог прошляпить повышение прав при неправильном пароле?
>Иначе как он смог прошляпить повышение прав при неправильном пароле?может у него руки из нужного места растут и он ниразу не смог ввести не правильный пароль?;(
> PHP и OpenJDK - громадные монстры с сложным кодом. Логично что там
> багов - оптом.Т.е. можно сказать "пингвинячье качество как есть" только из-за того, что оно есть в репах дистров пингвина?
> А в этом случае налицо тот факт что автор свою программу
> даже не запускал. Иначе как он смог прошляпить повышение прав при
> неправильном пароле?Гм, вы все-таки сходите по ссылке
https://github.com/slicer69/doas/issues/2
> slicer69 commented 3 days ago
> I have foundТам баг открыт самим автором.
ЗЫ:
https://github.com/slicer69/doas/issues/4
Эдакая "самореклама" еще одного портировщика, но уже для линукса:
> I mainly focused to port it to linux and stayingи вот прикольный каммит "fix horrible mistake"
https://github.com/Duncaen/OpenDoas/commit/9972a8ee4233ba9e4...
ret = pam_end(pamh, ret);
if (ret != PAM_SUCCESS)
errx(1, "pam_end(): %s\n", pam_strerror(pamh, ret));
- return 1;
+ return 0;
}
}
Ничего не напоминает? ))
> Т.е. можно сказать "пингвинячье качество как есть" только из-за того, что оно
> есть в репах дистров пингвина?У пингвинов нет никаких заскоков с базовыми системами и прочим. Линукс это вообше только ядро, которое можно использовать с самыми разными юзермодами. Остальные отдуваются за свои баги сами.
> Там баг открыт самим автором.
Быстро поднятый маздай не считается упавшим?
> Эдакая "самореклама" еще одного портировщика, но уже для линукса:
Пусть этот портировщик себе оставит все эти качественные продукты жизнедеятельности, где авторы даже не удосуживаются запустить свой код и проверить два тривиальных юзкейса: правильный пароль и неправильный. Ладно там еще сложные баги в продвинутых фичах, но вот не поймать такое еще до релиза на публику - это фэйл.
>[оверквотинг удален]
> вообше только ядро, которое можно использовать с самыми разными юзермодами. Остальные
> отдуваются за свои баги сами.
>> Там баг открыт самим автором.
> Быстро поднятый маздай не считается упавшим?
>> Эдакая "самореклама" еще одного портировщика, но уже для линукса:
> Пусть этот портировщик себе оставит все эти качественные продукты жизнедеятельности, где
> авторы даже не удосуживаются запустить свой код и проверить два тривиальных
> юзкейса: правильный пароль и неправильный. Ладно там еще сложные баги в
> продвинутых фичах, но вот не поймать такое еще до релиза на
> публику - это фэйл.Релиза, вообще-то, ещё не было.
> привилегированные операции, даже если был указан неверный пароль пользователяЭпично!
Хотели doas, а получился doass. Ну или doarse, на любителя.
Мне в sudo не нравится первое ALL в sudoers. Прописывать его всегда нуэжно и кроме значения ALL что то указывать бессмысленно. localhost оно не понимает.
Нельзя, точнее бессмысленно, писать:user localhost=NOPASSWD:COMMANDS_LIST
user ALL=COMMANDS_LIST
А если вместо localhost, указать hostname сервера, то подключаясь по SSH с явно другого хоста, sudo всё ровно выполняет это правило. То есть указывать хост отличный от ALL обессмыслено. Как с этим в doas?
> Мне в sudo не нравится первое ALL в sudoers. Прописывать его всегда
> нуэжно и кроме значения ALL что то указывать бессмысленно. localhost оно
> не понимает.
> Нельзя, точнее бессмысленно, писать:
>user localhost=NOPASSWD:COMMANDS_LIST
> user ALL=COMMANDS_LIST
> А если вместо localhost, указать hostname сервера, то подключаясь по SSH с
> явно другого хоста, sudo всё ровно выполняет это правило. То есть
> указывать хост отличный от ALL обессмыслено. Как с этим в doas?Там свой конфиг, без этой «фичи», которая была актуальна в эпоху тотального монтирования /etc по NFS.