The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимости в snapd и Rust Сoreutils, позволяющие получить root-привилегии в Ubuntu

18.03.2026 15:21 (MSK)

Компания Qualys выявила уязвимость (CVE-2026-3888) в организации работы связки snap-confine и systemd-tmpfiles в Ubuntu, позволяющую непривилегированному пользователю получить root-доступ к системе. Проблема проявляется в Ubuntu в конфигурации по умолчанию начиная с выпуска 24.04. В Ubuntu 16.04-22.04 уязвимость может быть эксплуатирована в нестандартных конфигурациях, имитирующих поведение более новых версий дистрибутива. В Ubuntu исправление доступно во вчерашнем обновлении пакета snapd. В snapd проблема устранена в обновлении 2.75.

Уязвимость возникает из-за некорректного взаимодействия утилит snap-confine и systemd-tmpfiles, выполняемых с повышенными привилегиями. Утилита snap-confine формирует sandbox-окружение для выполнения snap-приложения, а systemd-tmpfiles осуществляет автоматическую очистку временных файлов и каталогов. По умолчанию утилита systemd-tmpfiles настроена на удаление всех старых файлов и каталогов в /tmp, что может использоваться атакующим для подмены каталога /tmp/.snap в момент после его удаления утилитой systemd-tmpfiles, но до пересоздания командой snap-confine.

Атака сводится к ожиданию запуска процесса очистки временных файлов, подмены каталога /tmp/.snap после его удаления и размещения модифицированной копии библиотек /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange. Атакующему может потребоваться несколько дней ожидания запуска systemd-tmpfiles, так как в Ubuntu 24.04 процесс очистки запускается раз в 10 дней, а в более новых выпусках - раз в 30 дней. После подмены каталога атакующий добивается инициализации нового sandbox-окружения при помощи snap-confine.

Во время формирования начинки sandbox-окружения во временном каталоге /tmp/.snap атакующий дожидается нужного момента и переименовывает /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange в /tmp/.snap/usr/lib/x86_64-linux-gnu, подменяя таким образом библиотеки и обеспечивая их bind-монтирование с правами root. Таким образом атакующий получает контроль над разделяемыми библиотеками и загрузчиком ld.so, запускаемыми в sandbox-окружении snap, и может добиться выполнения произвольного кода с правами root через запуск любой suid-программы, в которой применяется динамическое связывание.

Имея root-доступ в sandbox-окружении, изолированном через AppArmor и фильтр системных вызовов на базе seccomp, атакующий может скопировать /bin/bash в каталог /var/snap/$SNAP/common/ и выставить ему права "04755" (suid root). Несмотря на то, что права изменены внутри sandbox-окружения, файл с изменёнными правами доступен и в основной системе, поэтому для получения полного root доступа достаточно запустить /var/snap/<имя_snap_пакета>/common/bash обычным непривилегированным пользователем из штатного системного окружения.


Попутно была выявлена уязвимость в инструментарии uutils coreutils (Rust Coreutils), аналоге пакета GNU Coreutils, написанном на языке Rust. Уязвимость позволяет непривилегированному пользователю получить права root в системе. Проблема выявлена в процессе рецензирования изменений в Ubuntu 25.10 и устранена обходным путём до релиза Ubuntu 25.10 через поставку /usr/bin/gnurm вместо uutils rm. В пакете uutils проблема была устранена в выпуске uutils coreutils 0.3.0, без отметки в списке изменений об устранении уязвимости (было указано, что в rm, du, chmod и chgrp реализован безопасный метод обхода путей).

Проблема вызвана состоянием гонки в утилите "rm", позволяющем локальному пользователю подменить содержимое каталога на символическую ссылку во время удаления подконтрольного пользователю файла процессом "rm" с правами root. Среди прочего уязвимость может быть эксплуатирована при ежедневном запуске из cron скрипта /etc/cron.daily/apport, который запускается с правами root и рекурсивно удаляет содержимое каталога /var/crash, доступного на запись всем пользователям в системе.

При рекурсивном удалении каталогов утилита rm вначале проверяет все каталоги, а затем последовательно удаляет их в обратном порядке, вызывая функцию rmdir(). Если добиться подмены родительского каталога на символическую ссылку сразу после проверки этого каталога, но до проверки вложенных в него дочерних каталогов, операция приведёт к удалению каталога, на который указывает символическая ссылка. Таким образом можно добиться не только удаления любого файла в системе, но и повышения привилегий через удаление каталога /tmp/snap-private-tmp/$SNAP/tmp/.snap для подмены содержимого sandbox-окружения snap-пакета (метод получения root аналогичен первой уязвимости).

  1. Главная ссылка к новости (https://blog.qualys.com/vulner...)
  2. OpenNews: Уязвимости в AppArmor, позволяющие получить root-доступ в системе
  3. OpenNews: Уязвимости в PAM и libblockdev, позволяющие получить права root в системе
  4. OpenNews: Уязвимости в apport и systemd-coredump, позволяющие извлечь хэши паролей пользователей системы
  5. OpenNews: Выявлена возможность обхода ограничений доступа к "user namespace" в Ubuntu
  6. OpenNews: Уязвимости в утилите needrestart, позволяющие получить root-доступ в Ubuntu Server
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65014-snap
Ключевые слова: snap, ubuntu, coreutils, systemd
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 15:42, 18/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >В Ubuntu исправление доступно во вчерашнем обновлении пакета snapd. В snapd проблема устранена в обновлении 2.75.

    Думаю это надо как-то выделять, не все читают дальше заголовка.

     
  • 1.2, Аноним (-), 15:44, 18/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > написанном на языке Rust. Уязвимость позволяет
    > непривилегированному пользователю получить права root в системе

    Улучшение безопасности системы прощло успешно. Достойное дополнение к этому их visuedit'у и что там еще.

     
     
  • 2.6, Жироватт (ok), 15:48, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, перед инвесторами отчитались о внедрении очередной хайп-утилс, а дальше - хоть трава не расти.
    Типичные best prctices
     
  • 2.10, анон (?), 15:54, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    дак проблему нашли и исправили
     
     
  • 3.23, Аноним (23), 16:36, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А сколько ещё открытий чудных... Сколько ещё предстоит найти.
     

  • 1.3, Жироватт (ok), 15:45, 18/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    <здесь должен был быть иронично-едкий комментарий, но мне слишком влом его писать>
     
     
  • 2.7, Аноним (7), 15:49, 18/03/2026 Скрыто ботом-модератором     [к модератору]
  • –2 +/
     
  • 2.18, LaunchWiskey (ok), 16:14, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Как там в старом советском анекдоте про пикет с чистым плакатом: «А чего писать - и так всё ясно!»
     
     
  • 3.31, Аноним (31), 16:50, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    5 лет ИТЛ :)
     

  • 1.4, Аноним83 (?), 15:46, 18/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Чего раст то так облажался и не выдал тонну мата на пограмиста, допустил такое безобразие!!!
    Теперь получается програмист во всём виноват, а не плохой язык или железо или сосед.
     
     
  • 2.5, Аноним (5), 15:48, 18/03/2026 Скрыто ботом-модератором     [к модератору]
  • –3 +/
     
     
  • 3.9, Аноним (9), 15:52, 18/03/2026 Скрыто ботом-модератором     [к модератору]
  • –2 +/
     
  • 2.8, Аноним (8), 15:51, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Теперь получается програмист во всём виноват, а не плохой язык или железо или сосед.

    Именно так!
    В коде была логическая ошибка, на отсутствие которых раст гарантий не дает.
    Хорошо, что даже вы это понимаете))

     
     
  • 3.11, Аноним (11), 15:58, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Маленький секрет: _до_ проверки во время выполнения никаких гарантий быть не может.
     
  • 3.12, VVVVVV (?), 15:58, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Для сишников логическая ошибка и ошибка в работе с памятью это одно и тоже. Сишники раз за разом показывают свою профнепригодность
     
     
  • 4.14, Аноним (7), 16:01, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Учитывая кол-во ошибок в коде у дыpявых это скорее норма.
    Т.е для кодинга на СИ надо уметь овнокодить.

    И если вспомнить историю с unix4, где дырень написали в функции из 50 строк, то наверное при приеме на работу спрашивают "чем отличается логическая ошибка от ...?"
    И при правильном ответе сразу прощаются)

     
  • 3.15, Аноним (15), 16:02, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Зато дает гарантии в более замусоренном коде, который количество этих ошибок и увеличивает.
     
  • 3.22, Аноним (23), 16:33, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Вот ненадо тут теперь. Рaстолюбы неоднократно орали про то, что Раст не допустит гонок, в отличие от Сишки.
     
     
  • 4.30, Аноним (30), 16:50, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И про утечки памяти они так говорили, а теперь говорят что никогда такого не говорили.
     
  • 4.35, warlock66613 (ok), 16:55, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Не допустит (и действительно не допускает) гонок данных. Здесь другая гонка.
     
  • 4.38, Аноним (38), 17:02, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Раст не допустит гонок

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

     
  • 3.29, Аноним (30), 16:49, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну ок, логическая ошибка в расте. А почему фикс то - это замена rm из uutils на сишную rm из gnu? Типа, мы тут все на безопасном языке переписываем... ой, тут пока небезопасно - пользуйтесь rm из cioreutils.
     
  • 2.13, Аноним (13), 16:00, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    О, Иван83!
    Ой, т.е. Аноним83, простите.

    Рад что у вас все хорошо, а то что-то не видно вас было в недавних темах про "Уязвимости в AppArmor" и "10 уязвимостей в GStreamer". Подумал, не случилось ли у вас часом чего.
    Ведь вы пропустили такие прекрасные обсуждения.

     

  • 1.16, Аноним (7), 16:03, 18/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Как любят говорить СИшники "ну нашли и исправили! чего бухтеть" 🤣
    Сейчас поисправляют ошибки, которые не мог найти компилятор.
    Допишут тестов.

    Всё равно гнутые поделки возвращать не будут.

     
     
  • 2.20, Ананоним (?), 16:27, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Судя по моей практике компиляния пакетов для этого нашего Линукса, подавляющее большинство компилятся с огромной кучей предупреждений, которые вообще никто даже не пытается читать и исправлять. Похоже разработчики так рады от щасця что это их г... продукт вообще компилится, что забывают о предупреждениях компилера.
     
  • 2.28, Аноним (28), 16:47, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Допишут тестов.

    Вот это делать не надо. Допишут тестов и опять uutils не поддерживают четверть функционала coreutils.

     
     
  • 3.34, Аноним (34), 16:55, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > uutils не поддерживают четверть функционала coreutils.

    И?
    Если это какие-то древние функции, которые не нужны в убунте, то убунте пофиг.
    Если кому-то надо - садитесь и дописывайте.

     
     
  • 4.37, Аноним (28), 17:01, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Если кому-то надо - садитесь и дописывайте.

    Можно, а зачем? В coreutils все нужные функции есть.

     
  • 2.32, Аноним (30), 16:52, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > поставку /usr/bin/gnurm вместо uutils rm

    Разве? устранена обходным путём до релиза Ubuntu 25.10 через поставку /usr/bin/gnurm вместо uutils rm

     

  • 1.17, Аноним (17), 16:04, 18/03/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +2 +/
     
  • 1.19, Ананоним (?), 16:24, 18/03/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     
  • 1.21, Аноним (23), 16:28, 18/03/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.24, Сладкая булочка (?), 16:39, 18/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А чего это Qualsys взялись за убунту? Кто спонсор?
     
  • 1.25, Аноним (28), 16:40, 18/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Красота, это в очередной раз доказывает, что Rust небезопасен, как бы не пытались утверждать обратное.

    >Проблема вызвана состоянием гонки

    Но разве Rust не создавался в том числе для решения проблем работы с потоками?

     
     
  • 2.27, Аноним (38), 16:44, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Но разве Rust не создавался в том числе для решения проблем работы с потоками?

    Так это и не проблема с потоками.
    Это проблема изменения файлов на символическую ссылку внешним приложением.

     
     
  • 3.33, Аноним (30), 16:53, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Т.е. еще проще, чем состояние гонок в потоках.
     
     
  • 4.36, Аноним (38), 16:59, 18/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Т.е. еще проще, чем состояние гонок в потоках.

    Нет, кто сказал что проще?
    Состояние гонок в потоках только в твоем кода. Тут есть внешний фактор.

     

  • 1.26, Аноним (26), 16:44, 18/03/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру