В пакетном менеджере Cargo, применяемом для управления пакетами и сборки проектов на языке Rust, выявлена уязвимость (CVE-2023-38497), вызванная отсутствием учёта значения umask в процессе извлечения файлов из пакетов на Unix-подобных системах, что приводит к установке для извлечённых файлов исходных прав доступа, указанных в архиве...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=59548
Это и уязвимостью то сложно назвать... На каждый баг новости будемс создавать?
Это же про раст. Надо было подкинуть топлива местным кекспертам.
А чому нет?
Макать фанатиков НЕВЕРОЯТНОСТНО БИЗАПАШСТНОГО языка всегда прельстиво и любовно
ну так раст и не защищает от оставшихся 30% ошибок, от (обзовём их, как тут любят) "логических" (хотя все ошибки от логики или ее отсутствия). С этим вам когда-нибудь в будущем ChatGPT42 поможет. Главное, чтобы он в процессе исключения ошибок не решил избавиться от элементов системы, постоянно совершающих ошибки по природе своей.
Ну вон эту ошибку можно было сделать и не логической
Но вот могли же в языке сделать для umask-а единственного владельца с контролем его жизни и учетом работы на всей цепочке вызовов данного кода (передача состояния начиная от разработчика, потом по сети до юзера, и наконец до запуска сборщиком), аналогично работе с указателями.
И не сделали
Ты еще скажи, чтобы "в языке" (операторами языка, его системой типов и т.д.) они котиков с ютуба качали и перекодировали в 30 форматов. В языке - нет, не могли. А в отдельной утилите обработать ситуацию - должны были. Потому и ошибка.
Забыли учесть umask. Как это зависит от языка, на котором это забыли?Это скорее бага в дизайне unix - по уму, umask следовало бы учитывать на уровне ОС. А так это просто "рекомендация", которую каждое приложение должно учитывать.
Сишники самое главное виноваты.
> Это и уязвимостью то сложно назвать... На каждый баг новости будемс создавать?Нарушение системы прав и выполнение левого кода благодаря недо-пакетнику - вполне себе вулн.
а че, карго куда-то не в хомяк распаковывает? У /home/$USER обычно 0700, так что $ANOTHER_USER будет кусать локти, а не "изменять код зависимости". и почему в архиве сохраняются пермишоны как есть, а не как в гите? (100755, 100644 и усё, остальные не поддерживается)
Как в гите на папку target? :^))))))))
Раст все равно самый классный язык, пусть в нем и есть дыры. Это прикольно. Раст даже наша порноактриса рекламировала. Вот она зачётная дырка.
А вот если бы писали на сишечке, то в комплекте к багу было бы еще несколько выходов за пределы буферов и всякие там use after free и обращения по неинициализированным указателям.
Я полагаю что её дырка заезженная.
Незачот =)
Давно неустраняемая уязвимость :)
Это не уязвимость а баг
Прочитай этимологию слова уязвимость
Прочитай слово "баг". Это несложно, там всего три буквы.
a tar разве не так же делает?
А tar - это пакетный менеджер безопасного языка?
> a tar разве не так же делает?Tar вообще не менеджер пакетов а архиватор.
Для tar есть ключ -p, который надо задавать явно для не суперпользователей.
> All Rust versions before 1.71.1 on UNIX-like systems (like macOS and Linux) are affected.Видно, когда MS разрабатывает. И ещё другие из-под винды.
Любопытно что в комментариях постоянно говорят про то как раст защищает от выхода за пределы буферов и массивов, делает память шелковой и безопасной, лечит баги, а сам раст в документации говорит что дает защиту только от double-free и use-after-free, и то только если в unsafe-коде не будет багов.
Каков реквест - таков и ответ.
Благодари растофанатиков, у которых раст был панацеей от всего.
А какое отношение отсутствие проверки umask имеет к работе с памятью?
время, сэкономленное на поиск проблем в работе с памятью, по идее должно было пойти на продумывание других вещей
Ну то есть#define rust(ptr) do { if (ptr) {free(ptr); ptr = NULL;} } while (0);
> Если в архиве имеются файлы с правами, разрешающими запись для всех пользователей, то они будут распакованы без очистки данных прав, что позволит любому локальному пользователю изменить код зависимостиЭто опеннет или лента.вру?
Для начала «локальный пользователь» должен получить доступ в хомяк.
> Это опеннет или лента.вру?
> Для начала «локальный пользователь» должен получить доступ в хомяк.А в чем проблемы то? На хомяки часто права в духе 755 по дефолту. Ну вот и перезаписать тому лопуху файл заодно, с такими пермишнами.
> На хомяки часто права в духе 755 по дефолтуЗачем тогда возиться с каким-то Растом? )
Что бы выполнить код от имени этого пользователя, очевидно же.
>> На хомяки часто права в духе 755 по дефолту
> Зачем тогда возиться с каким-то Растом? )1) С правами 755 на хомяк - хомяк пользователя можно браузить.
2) Однао файлы вон того пользователя "почему-то" не перезапишешь, вот так сразу. Если там правов не отсыпят.А хруст мало того что может, вот, правов на запись левым личностям отсыпать так еще и в том что может быть выполнено потом, очень удобно. Васян пропатчит сорц, юзер соберет, выполнит васянский код ничего не подозревая. И почему бы это не атака - черт бы его знает.
> На хомяки часто права в духе 755 по дефолтуГде именно? В твоих фантазиях или на серверах безруких админов? Конкретнее.
>> На хомяки часто права в духе 755 по дефолту
> Где именно? В твоих фантазиях или на серверах безруких админов? Конкретнее.В линуксных дистрах, по дефолту, чудак.
umask - это абсолютное legacy, нарушающее все принципы ООП, о существовании которого я узнал исключительно из этой новости.
С чего вдруг?Обычный фильтр.
Хочешь объектоности - сделай интерфейс (обвязку) для манипулирования объектным.
Будет смотреться как обычные фильтры реализованные через объекты, кривовато. Но это нормально.
Небольшой наброс на тему ненужности Раста: не нужен, т.к. есть флаги компиляции вида -Warray-bounds.
Стабильность так и прёт