Опубликован выпуск проекта sudo-rs 0.2.10, развивающего написанные на языке Rust варианты утилит sudo и su. Новая версия примечательна исправлением двух уязвимостей, которые проявляются среди прочего в дистрибутиве Ubuntu 25.10, в котором sudo-rs задействован вместо утилиты sudo. Примечательно, что до этого кодовая база sudo-rs успешно прошла два независимых аудита безопасности - в августе 2023 года и в августе 2025 года...Подробнее: https://www.opennet.me/opennews/art.shtml?num=64226
Опять дыры в безопасности в коде на языке, который должен был избавить программиста от лишних размышлений. Почему так? И почему ИИ (обязательный инструмент при программировании на Rust на минуточку) не может помочь?
Чтобы генерить подобные комментарии даже ИИ не нужен, лишь один простой шаблон, который вы везде повторяете.
Забавно слышать про шаблон, когда каждая новость про Rust начинается с одного и того же шаблона.
Какого шаблона? Он в этой новости есть?
Я отредактировал новость, добавив портянку про безопасную работу с памятью, боровов и тд. Скоро появится.
То есть, вы заявляете о шаблонности каждой новости про Rust, а когда вам указали, что это не так, вы решаете пойти и отредактировать новость, чтобы она стала шаблонной? Ну да, это же для растохейтеров стандарт: придумать себе чучело, а потом героически подгонять под него реальность.
В каждой новости про выход компилятора.
Вам завидно что ваш конпелятор редко обновляется?
>лишь один простой шаблон, который вы везде повторяете.Вы просто луддит, цепляющийся за копролит. Любому современному программисту ясно, что руст не тащит, там дыра на дыре, и необходимо писать новый язык, а потом переписать на нем все.
> Опять дыры в безопасности в коде на языке, который должен был избавить программиста от лишних размышлений.Раст избавляет лишь от лишних размышлений при работе с памятью. Ни от чего другого спасение не заявлялось.
Опять воины против Раста ыыдумывают себе ветряные мельницы, и сами же с ними воюют. 🤦 Не надоело еще?
Где противоречие? Всякий раз говорили, что именно отсутствие необходимости заботиться об ошибках с памятью высвободит силы на продумывание более качественной логики. Но да, отсутствие ошибок с памятью принесло ряд совершенно новых неожиданных ошибок.
> Всякий раз говорили, что именно отсутствие необходимости заботиться об ошибках с памятью высвободит силы на продумывание более качественной логикиНет, не говорили. Где вы видели такой бред?
Согласен, что это бред, но именно это говорили фанаты Rust.
> Согласен, что это бред, но именно это говорили фанаты Rust.Пока что я это слышу от воина против Раста, воюющего против ветряных мельниц, которые он сам себе придумал.
Ну как же, вот Аноним ниже пишет, что Rust позволяет сократить количество логических ошибок.
> отсутствие ошибок с памятью принесло ряд совершенно новых неожиданных ошибок.Понятно. Очевидно, нужно возвращать ошибки с памятью.
Вы не понимаете. Они же не пишут с нуля, они вынуждены читать код на си, где им приходится НАПРЯГАТЬСЯ чтобы понять решение с памятью и переписать
> > Опять дыры в безопасности в коде на языке, который должен был избавить программиста от лишних размышлений.
> Раст избавляет лишь от лишних размышлений при работе с памятью. Ни от чего другого спасение не заявлялось. Опять воины против Раста ыыдумывают себе ветряные мельницы, и сами же с ними воюют. 🤦 Не надоело еще?Несколькими постами дальше в треде (из растофильского):
> Отлично, на расте проще писать программы без ошибок логики, чем на сях, так что это ещё один аргумент за раст. Спасибо.
Вы там между собой определитесь, что ли.
> Опять дыры в безопасности в коде на языке, который должен был избавить программиста от лишних размышлений.Сишники выдумали эту глупость и продолжают повторять. Зачем - спроси сишников. Я начинаю думать, что сишники просто глупые люди, раз они такие серьёзные ошибки на ровном месте совершают.
Safe Rust убирает ошибки работы с памятью, а не вообще все ошибки на свете. Почему вам это так трудно понять? Вроде простая мысль.
> Почему так?
Так нипочему, потому что написанное не имеет отношения к реальному миру. Почему у тебя такие фантазии знаешь только ты сам.
> И почему ИИ (обязательный инструмент при программировании на Rust на минуточку)
Сегодня день открытых дверех в спец учреждениях? Зачем вы выдаёте эти дикие фантазии за реальность?
> не может помочь?
Это кстати тоже неправда. ИИ помогает очень сильно, другое дело что куча людей не хотят пользоваться ИИ т.к. зерги по разуму их осудят.
>ИИ (обязательный инструмент при программировании на Rust на минуточку)4.2
Ладно такие уязвимости могли допускать на заре появления юникса когда только учились кодидь а сейчас да такие бестолковый уязвимости надо бы таких кодеров выгонять из мира программирования а то так и будут косячить без конца то одни уязвимости то другие
Покажи свой код.
Не покажу.
sudo-rs, намного лучше чем просто sudo.
> sudo-rs, намного лучше... намного лучше создаёт поле для уязвимостей.
Ты правда хочешь увидеть список CVE стандартного sudo? Кто будет унизительно для ненавистников раста.
Skoda Octavia RS, намного лучше чем sudo-rs
Sydney Sweeney намного лучше чем sudo-rs
> добавлена в июльском выпуске
> опубликованной в апреле...
> независимых аудита безопасности .. в августе 2025 года (NGICore)???
Аудиторы безопасности пропустили эти ошибки, или что вам не понятно?
а чего тут понимать ? Вместо кода такой синтаксический спагетти-мусор, что даже профильные аудиторы толком не могут это разгрести
Я правильно понял вашу мысль: вы считаете, что на Rust в принципе нельзя писать нормальный код (синтаксис не позволяет)? В таком случае приведите пожалуйста пример хорошего по-вашему кода на языке с хорошим синтаксисом.
кудах-кудах )
Я просто читаю текст статьи и вижу почти прямым текстом вывод, что даже независимые аудиторы( именно во множественном числе и из разных структур ) не смогли даже разгрести логику в коде на расте, из-за чего пропустили дыры. да, без двойного освобождения памяти. Но дыры, тем не менее, остались и нехилые.Причём, утилиты весьма простые и небольшие. Что же будет в больших системах ?
> не смогли даже разгрести логику в коде на расте, из-за чего пропустили дыры.Это уже не дыры, а тоннели.
> Что же будет в больших системах ?
Для этого раст и создавался. Обфускаторы отдыхают.
> кудах-кудах )Не хочу думать о вас плохого, но почему вы кудахтаете?
> почти прямым текстом вывод, что даже независимые аудиторы( именно во множественном числе и из разных структур ) не смогли даже разгрести логику в коде на расте, из-за чего пропустили дырыВ тексте новости нет и намека на то, что аудит пропусьил уязвтмость именно из-за синтаксиса Раста.
Какзалось бы, по твоей же логике, языки с простым синтаксисом типа Питона вообще не должны содержать ошибок - но логика, очевидно, отключается, когда речь идет о Расте.
> Я просто читаю текст статьи и вижу
...фигу.
> В таком случае приведите пожалуйста пример хорошего по-вашему кода на языке с хорошим синтаксисом.Ты не видел сишечных портянок с goto?
> на Rust в принципе нельзя писать нормальный кодДа, Вы правы в этом высказывании.
Но это не моё высказывание. Это нормальный вопрос, на который вы не способны дать нормальный ответ. Почему? Потому что ваша реакция и аргументы эмоциональные, а не рациональные.
на расте в принципе нельзя писать, только переписыватьа "нормальность" кода зависит от скила ЦА торговой марки rust
## If I do `grep unsafe` why do I find hundreds of occurrences?Because they are necessary.
The `unsafe` keyword is part of Rust's memory safety design. The most important thing it allows is dereferencing "raw pointers", and calling other functions marked as "unsafe", such as those found in the C library. Because sudo-rs is a system utility, it needs to interface with the operating system and system libraries, which are written in C. Most of the `unsafe` code in sudo-rs lives at those seams. A prime example of this is the `setuid()` function itself---without which it would be really hard to write sudo.
Also note that about half of our `unsafe` blocks happens in unit test code---to test our "unsafe parts". For the other half, every usage of `unsafe` is accompanied by a `SAFETY` specification, every one of which has been vetted by at least two sudo-rs team members.
Finally, wherever it was possible, we use [Miri](https://github.com/rust-lang/miri) to test our `unsafe` blocks to be sure we didn't create any so-called "undefined behaviour".
We have seen some attempts at 'myth busting' Rust code by counting the number of times `unsafe` occurs. But that is mistaking the forest for the trees. Of course we understand the criticism: sudo-rs is a new program and needs to prove itself. But we are not spreading myths about sudo-rs having "memory safety-by-design" at its core.
At the very least, a few hundred lines of well-documented `unsafe` code is still less than hundreds of thousands of them.
Сложные ошибки переполенения и указателя все освоили, даже все поняли в чём их суть. Это стало скучно и не инстересно. Теперь все изучают бизнес ошибки при кодировании) Очевидно же было что так будет. Или нет?)
а есть ли эти ошибки в оригинальном sudo?
у тебя спека на оригинальный sudo есть?
Ну была недавно одна, но такая себе, не очень критичная. Всего лишь получение прав рута любым юзером в системе https://www.opennet.me/opennews/art.shtml?num=63505
Причём заметьте, не имеет отношения к "сишным дыреням" (нет проблем с памятью).
> Причём заметьте, не имеет отношения к "сишным дыреням" (нет проблем с памятью).Да, но вот есть аналогичная, но как раз сишная дырень с переполнением буфера
opennet.ru/opennews/art.shtml?num=54474
Причем прожила незамеченная целых десять лет, что уже тянет на закладку.
Бесполезная трата времени и сил, все эти переписывания. Хотя… Думаю это неспроста, такое рвение - попытка отжать у сишников всё, что они создали за многие годы.
Еще не нужно забывать про сменую лицензии обычно. Тоже неспроста.
В чем попытка отжать? Что значит "отжать у сишников"? Сишникам запрещено писать на расте что ли? Сишникам запрещено продолжать развитие своего судо?
и постоянно недоделки и ошметки какие-то на Rust, но зато "безопасно"
а то что свалится из-за несовместимости переписываний "не наши проблемы"
Безопастно!
> попытка отжать у сишников всёОтжали ровно 0 у.е. Удачи отжимать и дальше :)
> Бесполезная трата времени и сил, все эти переписывания. Хотя… Думаю это неспроста,
> такое рвение - попытка отжать у сишников всё, что они создали за многие годы.Не, там другое. Корпорациям не очень удобно жить с GPL в юзерспейсе. Вся суть переписывания -- в смене лицензии на пермиссив.
А то, что оно на другом языке, гарантирует отсутствие лицензионных претензий: никто не сможет даже в шутку сказать, что это производный продукт.
По той же причине Canonical спешит отестировать Rust-овые утилиты в дефолтной поставке.
Соглы. Одно только "но": почти бесполезная.
Ну и объясните в чём был смысл. Были одни уязвимости стали другие а учитывая что поделие новое там еще вагон невыявленых уязвимостей.
Были критические уязвимости, а стали несущественные, которые и за уязвимости трудно принять, так как по сути атакуешь сам себя.Из недавних дыр в sudo:
https://www.opennet.me/63505 - получение прав root
https://www.opennet.me/58507 - изменение любого файла в системе
https://www.opennet.me/54474 - получение прав root
https://www.opennet.me/54394 - смена владельца произвольного файла
https://www.opennet.me/52284 - получение прав root
https://www.opennet.me/51675 - повышение привилегий
https://www.opennet.me/46633 - перезапись файла в обход SELinux
https://www.opennet.me/32942 - получение прав root
ну так всё еще впереди. срок эксплуатации этого несравнимо мал по отношению в оригиналу.
В оригинале тоже будут находить новые дыры, так что их всегда будет больше.
но тогда зачем эта суета с переписыванием
> но тогда зачем эта суета с переписываниемЧтобы избавиться от дыр с памятью и сконцентрироваться только на логических.
И как можешь заметить, score у этих уязвимостей очень маленький.
получение прав рута это маленький score? ну-ну
Зачем его получать, если он уже есть? Ты читал описание уязвимости то?> привилегированный пользователь, имеющий полномочия выполнения через sudo
> Ты читал описание уязвимости то?"""
Уязвимость имеет смысл только при включении в настройках sudoers флагов rootpw и targetpw, которые по умолчанию отключены и поддерживаются начиная с версии sudo-rs 0.2.5, опубликованной в апреле.
""""""
Подразумевается, что изменение данных настроек должно менять поведение утилиты sudo, которая с этими настройками должна требовать пароль целевого пользователя, а не пароль текущего пользователя.
""""""
Уязвимость в том, что поведение не меняется и привилегированный пользователь по-прежнему МОЖЕТ использовать свой пароль для выполнения команд под root, хотя при активных флагах targetpw и rootpw ДОЛЖЕН ввести пароль root.
"""Коротко, у вас есть возможность исполнить от рута при знании пароля рута. Уязвимость в том, что вам достаточно ввести свой пароль, а не рутовый. Реальный юзер может знать рутовый пароль, но злоумышленник пароль рута не знает.
Но конечно же это выглядит абсурдным, вопрос, зачем мне sudo если я знаю рутовый пароль? В чем смысл sudo? Разрешать исполнять команды от другого пользователя, но для этого необходимо мне ввести пароль того пользователя? Это что за логика такая?
Это другое
По отношению к чему? К ошибкам работы с памятью? Да, другое. По отношению к логическим ошибкам? Нет, оно самое.
Ну уязвимость и уязвимость, с кем не бывает!Большинство раздражает Rust пропаганда, так же как и ЛГБТ (деятельность в РФ запрещена) пропаганда. К языку программирования Rust и к программистам Rust претензий нет, так же как и нет претензий к геям и другим представителям.
И зачем надо было переходить на раст? Чтобы получить тоже самое что было?
Получили другое.
Как же так??? Обещали безопасно будет :D
Безопасную работу с памятью обещали.
sudo apt-get remove coreutils-from-uutils --allow-remove-essential
sudo apt-get install coreutils-from-gnu/etc/apt/preferences.d/uutils:
Package: coreutils-from-uutils
Pin: release a=*
Pin-Priority: -10как-то так
спасибо
я потестирую еще это решение прежде чем применять к основной системеapt install coreutils-from-gnu coreutils-from-uutils- --allow-remove-essential
что любопытно
Larger image size: A Docker image currently is 75 MB large. Rust-coreutils come in at 25 MB vs 7 MB for the classic coreutils, increasing the image size by 18MB to 93MB (+24%).
из-за rust coreutils распух Docker образ O_o судя по этой записи Migration to rust-coreutils in 25.10 на сайте обсуждений Ubuntu
Под ubuntu его непойми как собрали, бинарь uutils собранный вручную занимает 9 мбайт у меня (на 2 мбайта больше чем gnu coreutils)
Это же кто-то подтвердил и под оригинальной новостью https://discourse.ubuntu.com/t/migration-to-rust-coreutils-i...
И не проверить, что именно добавлено, ведь то, как ложится логика кода на ассемблер - только той самой версии компилятора и ведомо, безопасно, не так ли?
> И не проверить, что именно добавлено, ведь то, как ложится логика кода
> на ассемблер - только той самой версии компилятора и ведомо, безопасно,
> не так ли?Ох уж этот миф про то как код на ассемблер ложится, C/C++ тем же самым оптимизатором обрабатывается, там всё так же запутано.
Скорее всего в системе сборки дебиана не смогли strip/LTO настроить, впервые что ли.
взято из Migration to rust-coreutils in 25.10 и Ubuntu 25.10: How to Revert to GNU Coreutils
Интересно какой у них процесс был.
Так то надо брать все написанные тесты для sudo и прогонять их на sudo-rs. И вот если это было сделано, то это вопрос к авторам sudo на тему отсутствия таких тестов.
> это вопрос к авторам sudo на тему отсутствия таких тестовТочняк, это всё Си-шники виноваты! :D
>CVE-2025-64170 - ошибка, из-за которой не до конца введённый пароль выводился в стандартный входной поток и показывался в консоли,Бизапасненько так.
И снова логические ошибки, а не ошибки работы с памятью. В отличие от поделок на Си. Что и требовалось доказать.Раст конечно позволяет уменьшить количество логических ошибок тоже, но для этого программист должен уметь кодировать инварианты в типы, а это увы умеют не все, тут уж компилятор не заставит сделать правильно, в отличие от работы с памятью.
На этих, как ты выразился, "поделках на Си", весь Земной Шар IT стоит и ничего, крутится и не падает!
Ты адепт секты "не сломалось - не чини"? Потому что во-первых сломалось, а во-вторых весь технический прогресс построен на том, что люди чинили то, что "не сломалось".
> поделках на Си
> не падаетСишные проги не падают? 😂 Вот это новости!
Любые проги при определённых условиях падают... Главный вопрос - приводит это к катастрофам или нет.
> И снова логические ошибки, а не ошибки работы с памятью.Так эксплуатировать твою логическую ошибку может каждый васян, а поди проэксплуатируй ошибку с памятью со всякими роп-геджетами и обходами рандомизации адресного пространство.
То есть ты как бы намекаешь на то, что логические ошибки - это плохо. Отлично, на расте проще писать программы без ошибок логики, чем на сях, так что это ещё один аргумент за раст. Спасибо.
> То есть ты как бы намекаешь на то, что логические ошибки - это плохо."""
Уязвимость в том, что поведение не меняется и привилегированный пользователь по-прежнему может использовать свой пароль для выполнения команд под root, хотя при активных флагах targetpw и rootpw должен ввести пароль root.
"""Вот вам логическая ошибка, которую может проэксплуатировать любой васян. Помните новость про то как ребенок рандомно поклацал по клаве и разблокировал отцовский гномовский воркстейшен. Вот к чему я, логическая ошибка (архитектурный изъян) куда опаснее всяких ошибок памяти.
Вот вам книжка К. Касперский - Техника сетевых атак, которую многие из нынешнего поколения в глаза не видели.
> на расте проще писать программы без ошибок логики
Раст разве такое гарантирует? Логикой оперирует человек, а не ЯП.
> так что это ещё один аргумент за раст. Спасибо.
Сделав зубья граблей такими, что они не прокалывают вам ноги, вы не избавились от проблемы, что при наступание они не расшибут вам лоб!
> > на расте проще писать программы без ошибок логики
> Раст разве такое гарантирует? Логикой оперирует человек, а не ЯП.Каким образом у вас "проще" превратилось в "гарантирует"?
Дайте растохейтера который умеет читать и в логику, пожалуйста. А то пока только попадаются фантазёры, спорящие с голосами у себя в голове, а не с написанным.
Если же вдруг в вопросе имелось ввиду "чем проще?", то: typestate pattern, tagged unions (enum), must_use, Result, type parameters, traits, и так далее. Больше удобнвх инструментов, позволяющих закодировать инварианты в системе типов, которые потом проверит компилятор. Другими словами: проще сделать API, которым невозможно неправильно воспользоваться. Про это ещё часто говорят "еслм собралось - значит работает", хотя конечно это преувеличение в абсолютном смысле.
> Про это ещё часто говорят "еслм собралось - значит работает", хотя конечно это преувеличение в абсолютном смысле.Это не преувеличение, это прямая причина ошибок, подобным сабжевым. Хайповые маркетинговые нахваливания раста вбивают в головы ржавонеофитов эту мантру, ну и итог закономерен.
> Каким образом у вас "проще" превратилось в "гарантирует"?а что есть "проще"? разве логика программы зависит от используемого ЯП? Вы утверждаете, что "проще писать программы без ошибок логики" - ну вот где доказательства (считай гарантии), что при переписывании (написании) программы на ЯП раст вы не допускаете логических ошибок?
Повторяю, разве логическая ошибка зависит от используемого ЯП?
> Дайте растохейтера который умеет читать и в логику, пожалуйста. А то пока
> только попадаются фантазёры, спорящие с голосами у себя в голове, а
> не с написанным.в смысле "который умеет читать и в логику"? я не понял вашей мысли, перефразируйте.
> Другими словами: проще сделать API, которым невозможно неправильно воспользоваться.
а кто это делает? ЯП или человек? ЯП - инструмент в руках человека. Если человек криворук и не дружит с логикой - ни какой ЯП ему не поможет.
Вернемся к сабжу, указанная в новости логическая ошибка имеет место быть в сишной версии sudo - да или нет?
Чем вам замена грабель на грабли без зубов поможет уберечь ваш лоб?
> Про это ещё часто говорят "еслм собралось - значит работает", хотя конечно это преувеличение в абсолютном смысле.Говорить можно все что угодно, истина ведь одна (с соответствующим доказательством).
Да не может такого быть!
"поддерживаются начиная с версии sudo-rs 0.2.5... Подразумевается, что изменение данных настроек должно менять поведение утилиты sudo, которая с этими настройками должна требовать пароль целевого пользователя, а не пароль текущего пользователя."Просто не надо было это делать. Зачем это вообще?
> "поддерживаются начиная с версии sudo-rs 0.2.5... Подразумевается, что изменение данных настроек должно менять поведение утилиты sudo, которая с этими настройками должна требовать пароль целевого пользователя, а не пароль текущего пользователя." Просто не надо было это делать. Зачем это вообще?И снова ржавуны ищут альтернативный "правильный" мир для раста... Ребята, вы пишете прозрачную замену для утилит GNU? Вы обязаны повторить их поведение точь-в-точь. Нравится вам это, не нравится -- вы на это подписались. Точка.
> "Обновление sudo-rs 0.2.10 с исправлением двух уязвимостей"Но как же так, Холмс? Грозились что вулнов не будет а сами 2 CVE в актив записали. При том в sudo, Карл! Мелкой приблуде!
Эта музыка будет вечной!-- Ржавуны, ну как же так, вы опять хрeнь написали?!
-- А у нас memory safety, а больше мы вам ничего не обещали! У нас зато все ошибки -- это безопасные, святые, правильные ржавоошибки! И вообще, отцепитесь, у нас тут чекер боровов опять не дает проект собрать...
> ошибка, из-за которой не до конца введённый пароль выводился в стандартный входной поток и показывался в консолиТам что, реально вот так прям написано?
if (strlen(entered_password) < strlen(real_password)) {
printf("%s\n", real_password);
}А зачем такой код вообще написали? И у аудиторов не возникло вопросов?
PS. Это не то что смешно, это страшно.
Ты чё, попутал совсем, на Сях тут примеры пишет... Пeтушара тебя сейчас по IP вычестю, будешь у меня Раст жрать, безопасно.
Эта закладка делалась, чтобы пароль иногда случайно оседал во всяких логах, откуда его уже можно добыть разными методами.