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)
Ответ на: комментарий от BruteForce

Брось, я же серьёзно

И я. ;) :))

Ну в D есть флаг -betterC

Г'ад за них. :)

Но мне от этого никакой пользы... ;))

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

Увы, да, теперь это слово используют в плохом смысле, а другого то и нет.

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

Почему нельзя отдать первые 1-4-8 байт под хранение размера-то, как в паскале? Почему нельзя строки гонять структурами размер+указатель?

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

Ее нет в си.

Это же ложь! Я недавно постил новость о компиляторе Си, который даёт гарантии безопасности (настоящей, и без всяких «ансейф»). Даже дистрибутив люникса есть.

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

Это все сторонние кастомные продукты. Там много чего может быть, но о них никто особо не знает, ими никто особо не пользуется. А в стандарте нет нихрена. Потому что си это не продукт, а стандарт.

А раст это в первую очередь единый продукт и стандарт в одном.

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

Очень возможно, что свернут. Причем вероятность весьма велика - это минус, да.

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

В 17-м я видел только евры уже.

Печально. Фунты, конечно, тоже вторичные были, но кипреи их хоть как-то контролировали и могли своей экономикой хоть немного рулить.

У меня до сих пор где-то несколько бумажных кипрских фунтов лежат, и монетки всякие, кстати семиугольные есть, полфунта, что-ли. :) Реликвии теперь. :)

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

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

А кто знаком,расскажите или дайте ссылку. Давно-давно возбуждаюсь о чем-то таком

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

То есть надо набирать в фирмы крестовиков, но требовать продукты на нормальных ЯП?

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

получается, пока что, так себе :)

Если ты считаешь свой намёк на то, что я предположил и ошибся — оскорблением для меня, то ты ошибся в своём предположении.

Rust уже в ядре

Я знаю

какому-то анонимному балаболу

Это ложь

виднее что там и как будет с технологиями … разрабам ядра

  1. Ты споришь с чем? Я с тобой не спорил.

  2. Говорить о «разрабах ядра» как о чем-то цельном в этом вопросе бессмысленно.

https://www.reddit.com/r/linuxquestions/comments/1inmi3o/noob_here_whats_the_whole_drama_between_rust_and/

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

Вы программированием процессоров вообще занималась? представляете собе усложнение процесса? а возможности процессоров начала 70-х себе представляете?

вот ваши первые n байт сразу усложняют структуру и требуют дополнительных и действий и места для хранения.

возьмите посмотрите как это сделано для сей и для (например) паскаля и сразу разницу увидите в сложности и скорости.

сейчам это да, в основном некритично, хотя и не везде.

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

Это уже не Си

SQLite написан на Си?

UB это не свойство компилятора, это свойство языка

Так и я о том же.

Существует ли в gcc диалект Си, совсем лишенный UB?

Я не знаю

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

В safe блоках ты просто проверяешь логику, в unsafe блоках ты проверяешь логику и работу с памятью. В C/C++ ты вынужден каждую строку проверять на скрытое поведение.

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

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

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

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

https://github.com/Vladgobelen/NSQC3

Скажи мне как хранятся плитки для ломания квестов и механика того, что квесты нужно чинить.

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

Но я могу продолжить ее делать ну через минуту. Я мгновенно знаю где нужный код и могу сразу к нему перейти.

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

https://github.com/Vladgobelen/NSQC3

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

ИИшка все это напомнит сразу. Без раздумий. Укажет где нужный код сразу. Просто переходи к коду и работай с ним дальше даже после года остановки. А у меня как раз был где то год перерыва.

https://github.com/Vladgobelen/NSQC

А лучше посмотри ад, а котором я учился программированию в принципе. Вот тут я зашел в тупик окончательно, пока не дошел до работы ООП. Тут в принципе вручную разобраться с эвентами и цепочками невозможно. Нет, ну можно, но длительная поддержка уже бессмысленна. Потому что так писать просто нельзя. Но ИИшка мгновенно покажет нужное для переноса в нормальную структуру.

Особенно для эвентов, которые писал не только без особых знаний, но на интуиции: пишешь, просто на спинном мозге - главное чтобы работало. Кучи вызовов из разных мест без структуры. Чтобы найти части эвента и сделать нормально, это нужны часы вчитывания в разные части файлов. Если вручную.

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

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

Да, спасибо, потом прочитал далее комменты и всё понял.

Дальше можно насать рассуждать, что НЫНЕ надо добавить современное апи и т.д…

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

Ну это же остров, на своей машине туда не поедешь, так что в случае Кипра как раз пофиг. :)

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

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

Забавно

Факт! Ехали с коллегой одним вечером (он за рулем), и тут я замечаю, что нам на встречу едет машина, по встречке, получается. Ну я громко возмутился. Он тоже. Поняли ситуацию мы только на третьей машине.

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

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

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

Так где в Си мемори сейфети? В растовских uutils 0 ошибок с памятью, а в сишных даже в pwd умудрились накосячить, пофиксили в прошлом месяце. В теории-то да, все сишники умные и внимательные, а на расте можно в ансейфе накосячить, а по факту в сишных программах ошибка на ошибке с памятью.

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

Си - не продукт и не стандарт, а скорее открытая (всмысле, без исчерпывающего списка) классификация языков.

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

Сейчас или тогда?

Если сейчас, то для всех ли задач? «Очень медленно» — это «слишком медленно в большинстве случаев»?

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

Это никогда не было медленно. Просто памяти жалко.

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

Не, это я сам придумал. Там пути прописывать не надо было вручную. Сначала я сделал одну библиотеку там, потом все новое стал туда скидывать - автоматом подхватывалось.

Просто тут чтобы новые файлы в другое место добавть, надо полностью перезапускать игру. Это долго, муторно. А так скинул и пущай лежит. Тебе жалко чтоли?

Забавно что либу я потом переписал сам, сделав в 5-15 раз быстрее и удалил, а картинки и звуки остались по традиции.

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

Я на скале так постоянно делаю, на плюсах и бидоне 🤷🏼

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