LINUX.ORG.RU

В Rust Coreutils выявлено 113 уязвимостей. В Ubuntu 26.04 возвращены cp, mv и rm из GNU Coreutils

 , ,


1

5

Компания Canonical опубликовала предварительные итоги внешнего аудита безопасности инструментария uutils coreutils (Rust Coreutils), написанного на языке Rust и частично применяемого в Ubuntu вместо пакета GNU Coreutils. Аудит был выполнен компанией Zellic, имеющей опыт анализа уязвимостей в проектах на языке Rust. В ходе проверки было выявлено 113 проблем с безопасностью.

В настоящее время уже доступен отчёт с результатами первого этапа аудита, охватывающего наиболее важные утилиты из набора uutils. На первом этапе, который был проведён с декабря 2025 по январь 2026 года, было выявлено 73 уязвимости, из которых 7 отмечены как критические, 11 - опасные, 29 - средней опасности и 26 - неопасные.

Информация о всех выявленных проблемах уже передана разработчикам uutils и большая часть уязвимостей была устранена в выпусках uutils 0.5-0.8 без лишней огласки.

Пакет rust-coreutils был включён по умолчанию в осеннем выпуске Ubuntu 25.10, но с учётом выявленных в ходе аудита проблем в LTS-ветке Ubuntu 26.04 возвращены утилиты cp, mv и rm из набора GNU Coreutils. Отмечается, что по состоянию на 22 апреля в данных утилитах остаётся не исправлено 8 известных состояний гонки. Остальные утилиты задействованы из выпуска rust-coreutils 0.8.0. В Ubuntu 26.10 разработчики намерены полностью перейти на rust-coreutils.

Уязвимости в системных утилитах опасны тем, что они используется в скриптах, запускаемых с правами root. Например, устранённая в выпуске uutils coreutils 0.3.0 уязвимость в утилите rm могла быть эксплуатирована при ежедневном запуске из cron скрипта /etc/cron.daily/apport, который выполняется с правами root и рекурсивно удаляет содержимое каталога /var/crash, доступного на запись всем пользователям в системе.

Среди уязвимостей, помеченных в первом отчёте критическими:

  • Уязвимость в утилите chroot, вызванная обработкой опции --userspec после вызова chroot(), но до сброса привилегий. На системах с glibc резолвинг имён через функцию getpwnam() приводит к чтению файла /etc/nsswitch.conf, применяемого в NSS (Name Service Switch), и динамической загрузке указанных в нём библиотек с модулями NSS (libnss_*.so.2). Так как до обработки NSS выполяется вызов chroot() файл /etc/nsswitch.conf загружается относительно нового корня, но NSS-библиотеки загружаются до сброса привилегий. Если пользователь имеет доступ на запись к новому корню, то он может подставить свои NSS-библиотеки и добиться выполнения кода с правами root.
  • Изменение прав доступа к файлу после сбоя создания именованного канала (FIFO) утилитой mkfifo - если указать в качестве аргумента существующий файл, то mkfifo вернёт ошибку, но при этом аварийно не завершит работу, а выполнит вызов set_permissions() и изменит права доступа к существующему файлу. С учётом umask 022 уязвимость позволяет поменять права доступа к файлу на 644 (rw-r-r-) и получить доступ к файлам, для которых не было разрешено чтение.
  • Обход ограничений --preserve-root в утилите chmod, запрещающих выполнение рекурсивных операций относительно корня ФС. Уязвимость (CVE-2026-35338) вызвана тем, что в коде проверялось только точное совпадение пути с / и не выполнялась канонизация файлового пути. Для обхода проверки достаточно использовать путь вида /../ или символическую ссылку на корень. Уязвимость опасна тем, что при возможности подставить свой путь в системный скрипт вызывающий команду chmod, можно добиться рекурсивного изменения прав доступа для всех файлов в ФС.
  • В утилите rm допускалась обработка любых сокращений опции --no-preserve-root (--n, --no, --no-p, --no-pres и т.п.) для отключения защиты от выполнение рекурсивной операции с корнем (например, можно указать rm -rf --n / и удалить по ошибке все данные. В GNU Coreutils подобные сокращённые опции запрещены.
  • Обход ограничений --preserve-root в утилите rm, запрещающих выполнение рекурсивных операций относительно корня ФС, через подстановку символической ссылки на «/».
  • Отсутствие полноценной защиты от указания каталогов, начинающихся с точки. Например, при выполнении rm -rf . утилита выведет ошибку, но при указании rm -rf ./ или rm -rf ./// молча удалит текущий каталог.
  • Ошибка в коде разбора аргументов утилиты kill позволяет отправить сигнал всем процессам в системе при указании идентификатора процесса -1 (kill -1).

>>> Источник

★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)

Очередная демонстрация того факта, что основное предназначение Ubuntu — служить полигоном для испытаний опасных и вредных программ перед релизом в надёжные и стабильные дистры вроде Арча. Жаль только непритязательную публику, которая ввиду своей незрелой неразборчивости и инфантильного фанатизма не замечает эксплуатации.

В Rust Coreutils выявлено 113 уязвимостей

Сообщество Rust будет глубочайше благодарно за ваш самоотверженный труд.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 3)

Фу, какая гадость.

Жаль что вернули GNU утилиты, было бы весело наблюдать как с грохотом и стонами рассыпаются системы безопасно-расто адептов.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Как оказалось, помимо использования «безопасного» язычка, нужно еще иметь мозги. Вот это открытие у растофилов…

iron ★★★★★
()

By adopting Rust across the kernel, sudo, and core system utilities, Canonical is raising the security baseline for millions of enterprise users worldwide. The Rust Foundation is proud to support the language ecosystem that makes this kind of infrastructure work possible, and we look forward to seeing Ubuntu 26.04 LTS set a new standard for production-grade Linux.

Dr. Rebecca Rumbul, Executive Director & CEO, the Rust Foundation, поздравляет нас с выходом новой LTS (ubuntu.com).

thesis ★★★★★
()
Ответ на: комментарий от kaldeon

Жаль только непритязательную публику, которая ввиду своей незрелой неразборчивости и инфантильного фанатизма не замечает эксплуатации.

вот ты правда думаешь, что скучающие линуксоиды, которые от нечего делать обновляют дистр Линукса на своём локалхосте кем-то там эксплуатируются?

Ну а остальные иногда даже на 24.04 еще не перешли…

seiken ★★★★★
()
Ответ на: комментарий от iron

Как оказалось, помимо использования «безопасного» язычка, нужно еще иметь мозги. Вот это открытие у растофилов…

Примерно теми же словами тот же самый постулат я говорил в прошлой новости про баги в этих поделиях.

Zhbert ★★★★★
()
Ответ на: комментарий от kaldeon

Очередная демонстрация того факта, что основное предназначение Ubuntu — служить полигоном для испытаний опасных и вредных программ перед их выкидыванием в мусорку

Исправил, не благодари

wandrien ★★★★
()

в данных утилитах остаётся не исправлено 8 известных состояний гонки

Братцы, а ведь нам говорили, что если писать без unsafe, то гонок не будет.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от wandrien

Ну… Некоторые вроде прижились в итоге и даже просочились в другие дистрибутивы.

Zhbert ★★★★★
()

Какой-то тупняк. Зачем мне менять права через mkfifo, если я могу поменять права через chmod? У всех описанных утилит нет suid флага, а значит это всё просто баги, а не уязвимости.

vbr ★★★★★
()
Ответ на: комментарий от firkax

Баги в утилитах поправимы, уязвимости найдены и будут закрыты. А вот базовые косяки сишки не исправит уже ничто похоже. Заметь - не баги, не уязвимости, а косяки самого языка, котрые являются его особенностями и котрых нет у того же раста.

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

Заметь - не баги, не уязвимости, а косяки самого языка, котрые являются его особенностями и котрых нет у того же раста.

Зато у раста есть свои. Или раст это язык Бога?

scanner
()
Ответ на: комментарий от LightDiver

Так называемые «косяки Си», это не косяки языка, а косяки криворуких недовыпоротых горе-прогреммеров, которым дали язык программирования, который делает ровно то, что программист написал. если он написал криво и с ошибками, то и на выходе он получит багованную кривизну. И люлей от руководства. так что не надо перекидывать с больной головы недоучек на здоровый и гибкий язык. А то так можно дойти до того, что ассемблер - небезопасен. потому как язык Си и был написан в свое время (как и Си++) для облегчения написания программного оеспечения на ассемблере. По своей сути - э то системный язык программирования. И им надо уметь пользоваться и иметь мозги, а не смузи-субстанцию, как у подавляющего большинства нынешних горе-программеров.

DrRulez ★★★★★
()
Последнее исправление: DrRulez (всего исправлений: 1)
Ответ на: комментарий от scanner

А у кого их нет? Но раст хотя бы пытается их исправить.

LightDiver ★★★★★
()
Ответ на: комментарий от thesis

Мне кажется, CEO в будущем заменят роль комедиантов. Их уже сейчас можно слушать просто чтобы поржать.

kaldeon ★★
()

Да раст просто фору даёт этим вашим кривым сям, на которых даже если решето писать, получится дырявее, чем планировали. Иначе диды, у которых соотношение malloc к free никогда не получается равным единице, умрут с голоду в канаве.

apt_install_lrzsz ★★★★
()
Ответ на: комментарий от DrRulez

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

kaldeon ★★
()
Ответ на: комментарий от kaldeon

программисту приходится прилагать жертвенные усилия чуть ли не на каждом шагу, отвоёвывая каждую строчку безопасного кода

Этот процесс называется программирование, если усилия не прилагаются - быдлокодинг, чем с упоением занимаются любители rust.

Byers
()
Ответ на: комментарий от kaldeon

Ну в идее «сырой» работы с кодом, где язык просто выполняет то, что говорит ему программист, что то действительно есть. Понятно что это опасно, но сама возможность такого интересна.

Я конечно так писать не буду. Я уже попробовал. Но сама идея имеет место.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от kaldeon

Очередная демонстрация того факта, что основное предназначение Ubuntu — служить полигоном для испытаний опасных и вредных программ перед релизом

Очередная демонстрация того факта, что основное предназначение Ubuntu — служить полигоном для испытаний опасных и вредных программ перед их релизом

Исправил, не благодари. Напомните, какой дистр первым принял системдерьмо?

teod0r ★★★★★
()
Последнее исправление: teod0r (всего исправлений: 1)
Ответ на: комментарий от Byers

Я вижу к чему приводит этот стиль «каждый сам за себя» — к переусложнению и неуместному стремлению к корректности. Когда тот код, который полагается на систему для подъёма тяжёлых предметов, намного короче и надёжнее из-за исключения человеческого фактора ошибки.

kaldeon ★★
()

Интересно, много там нейрослопа в этих CVE? Или кожаные обошлись без ИИ на этот раз?

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Я думаю сейчас очень мало осталось разработчиков, пишущих код просто вручную. Они просто не выдержат скорости разработки. Оно незаметно потихоньку внедряется в использование. Сначала автодополнение, потом все больше больше автоматизации и вот ты уже по уши в ИИ.

А как тут не использовать, если даже для просмотра своего старого кода проще скормить его ИИшке и она точно скажет где у тебя что. Вместо того, чтобы вчитываться и вспоминать.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)

в коде проверялось только точное совпадение пути с / и не выполнялась канонизация файлового пути. Для обхода проверки достаточно использовать путь вида /../ или символическую ссылку на корень.

Это же растофильская классика же! :) Вот прям вся суть глубины мякотки этого «биЗаПаСнаГо» ЯП и вменяемости его адептов.

Не, этот ЯП - точно не жилец. И это прекрасно, ящетаю. :)

Stanson ★★★★★
()
Ответ на: комментарий от LightDiver

С этим я, конечно, спорить не буду, как и с чисто прагматическими соображениями: иногда на Си приходится писать, нравится это или нет. Но даже в таком случае это не только заслуга языка, но и влияние легаси (весь современный мир написан и продолжает писаться в том числе на Си).

Странно видеть, когда из Си делают философский идеал. Дескать только подход Си соответствует некой присущей природе реальности, которая открывается только философски-мыслящим людям, и якобы именно это объясняет его превосходство во всём.

kaldeon ★★
()

Более чем наглядная демонстрация причин массового перехода на Rust: все гарантии безопасности полностью себя оправдывают - ни одной уязвимости при работе с памятью.

Искренне надеюсь что https://rust-gcc.github.io/ доделают в обозримом будушем и проекты GNU смогут стать не хуже аналогов.

zabbal ★★★★☆
()
Ответ на: комментарий от kaldeon

Дедушки заучили инструмент. Им страшно изучать новое, да и вообще не хочется - это новый мир. Да и инструменты приходят и уходят, а сишку они учили всю жизнь.

LightDiver ★★★★★
()
Ответ на: комментарий от kaldeon

надёжные и стабильные дистры вроде Арча

LOL, в это убогое поделие до сих пор аналога update-alternatives не завезли поэтому оно рассыпается просто от неудачной установки\удаления пакета штатными средствами. Тут даже на Lean если всё переписать лучше не станет - отсутствие мозгов формальной верификацией не заменишь.

zabbal ★★★★☆
()
Ответ на: комментарий от LightDiver

Им страшно изучать новое, да и вообще не хочется

Если бы это новое давало хоть что-то полезное, изучить можно, но нет. Так что дедушкам не страшно и не лень, им это нафиг не надо.

Byers
()

Обычные детские ошибки. Ни одной руст-специфичной не видно. Всякий, кто перепишет coreutils пройдет по этим граблям. Очень хорошо, что процесс отладки кода идет.

usermod
()
Ответ на: комментарий от LightDiver

язык просто выполняет то, что говорит ему программист, что то действительно есть

Примерно как в солдате, которому нужно обязательно отдавать команду «снять штаны!» перед тем как он просрётся. Кому-то даже нравится, но я предпочитаю не заботиться об очевидных вещах только потому что мне достались интеллектуально-убогие инструменты.

Но сама идея имеет место.

Ага, unsafe называется.

zabbal ★★★★☆
()
Ответ на: комментарий от LightDiver

Дело не в том кто что и сколько учил. Дело в том, что любой инструмент нужно применять правильно и по адресу. Совершенно глупо писать на Си большой прикладной проект. Этот язык не для этого. Есть более удобные и мощные инструменты для прикладного программирования. А вот когда тебя нужен быстрый системный инструмент, который, не будь Си - пришлось бы писать на более низком ассемблере под каждую конкретную платформу то он (си) как раз к месту. Раст-же на данный момент, заменить Си не в состоянии. Как и по охвату платформ так и по своей сути. Он - более прикладной. Некоторый промежуточный продукт между системным и прикладным языком. Это не плохо и не нехорошо. Он - просто другой. А на данный момент еще и политизированно-модный. Он просто должен устояться. Ведь если посмотреть на последние лет 10-15 то подобных всплесков на модные яп было уже достаточно. И мне реально не совсем понятно стремление переписывать давно стабильно работающее ПО на нем исключительно сточки зрения так называемой «прогрессивности». И, если что, я не хаю этот язык, я в данном случае - просто в некотором недоумении.

Ну и кстати да «инструменты приходят и уходят», а Си как был так и продолжает использоваться :)

DrRulez ★★★★★
()
Ответ на: комментарий от DrRulez

пришлось бы писать на более низком ассемблере под каждую конкретную платформу

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

Раст-же на данный момент, заменить Си не в состоянии.

Это с чего ты взял? На нём уже пишут модуля ядра и системные утилиты с библиотеками. Он буквально заменяет С прямо на наших глазах, при том показывая отличные результаты: скорость та же, безопасность выше.

zabbal ★★★★☆
()
Ответ на: комментарий от kaldeon

Я думаю, и СЕО, и комедиантов в недалеком будущем легко заменит ИИ, выхлоп которого они и будут старательно озвучивать, старась не ляпнуть отсебятины.

thesis ★★★★★
()
Ответ на: комментарий от zabbal

Примерно как в солдате, которому нужно обязательно отдавать команду «снять штаны!»

Ну знаешь. если ты ассемблеру дашь команду сложить два регистра, предварительно не убедившись, что там именно то, что тебе надо, а не черт знает что, то результат будет примерно такой-же как пойти погадить и не снять штаны :)

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

Это называется «предварительное архитектурное решение» проекта.

DrRulez ★★★★★
()
Ответ на: комментарий от DrRulez

Меня больше печалит, что реально без си, плюсов, раста вообще обойтись нельзя. Раз за разом приходится возвращаться к кому то из них.

Вот нужно мне для чата сделать окошко, которое было бы поверх всех окон. В том числе полноэкранных игр - и все, тут нужно низкоуровневое рисование окон.

А так - идеальная жизнь на скриптовых языках. Там так хорошо - луа, js, ts. Вообще бы с них не выбирался. Все готовое есть, красиво, удобно, просто. А с приходом ts так такой кайф в целом.

LightDiver ★★★★★
()

Знаете что удивляет. Вот есть для FPGA/ASIC специальный инструментарий для исключения очень опасных ошибок и критических проблем, то почему для ключевых компонентов ОС не применяются жесткие стандарты кодирования, исключающие такое колоссальное число критических ошибок

Неужели нет какого то режима работы ПО, чтобы потенциальные опасности выявлялись? Типа запуск под каким то Valgrind/asan условно, и вдумчивое тестирование. А тут нате, ошибки дыры а разработка в стиле «я пишу первый калькулятор»

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от DrRulez

Си … язык программирования, который делает ровно то, что программист написал

Смешная шутка.

~ # cat test.c 
#include <stdio.h>

int main(int argc, char *argv) {
  int n1 = argc;
  int n2 = 2147483647;
  int n3 = n1 + n2;
  printf("%d", n1);
  if (n1 < n3) {
    printf(" < ");
  } else {
    printf(" >= ");
  }
  printf("%d", n3);
  printf("\n");
}
~ # gcc -O3 test.c && ./a.out 
1 < -2147483648
~ # gcc -O0 test.c && ./a.out 
1 >= -2147483648

vbr ★★★★★
()
Ответ на: комментарий от zabbal

У меня за всю жизнь ни разу не возникло ошибки установки/удаления пакета.

И я не понимаю как update-alternatives может добавить хоть какую-то корректность. Это же просто менеджер симлинков. Он сам по себе является потенциальной проблемой при неаккуратном обслуживании.

Мне кажется, дихотомии «иногда ломающаяся простота vs всегда корректное переусложнение» вообще не существует. Разница только в том, какие сценарии ошибки мы приемлем и какой уровень знаний ожидаем от пользователя.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от zabbal

аналога update-alternatives не завезли поэтому оно рассыпается просто от неудачной установки\удаления пакета штатными средствами

То ли дело debian :)

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от zabbal

в это убогое поделие до сих пор аналога update-alternatives не завезли

Мы за то арч и любим, что туда не тащат всякие шедевры костыльного неолитического хелоуворлдинга.

thesis ★★★★★
()
Ответ на: комментарий от scanner

Rust далеко не совершенный. Даже JavaScript гораздо лучше. А уж TypeScript - вот он будто преподнесён нам богами, спустившимися с Олимпа.

vbr ★★★★★
()
Ответ на: комментарий от DrRulez

Так называемые «косяки Си», это не косяки языка, а косяки криворуких недовыпоротых горе-прогреммеров, которым дали язык программирования, который делает ровно то, что программист написал. если он написал криво и с ошибками, то и на выходе он получит багованную кривизну.

Звучит приблизительно как «косяки лошади — косяки криворуких наездников» от отрицателей двигателей внутреннего сгорания.

Waterlaz ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.