The OpenNET Project / Index page

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

Обновление sudo 1.9.17p2 с устранением ошибки, отправлявшей SIGHUP всем процессам

27.07.2025 07:11

Доступен новый выпуск утилиты sudo 1.9.17p2, используемой для организации выполнения команд от имени других пользователей. В новом выпуске устранена проблема, приводившая при определённом стечении обстоятельств к отправке сигнала SIGHUP (потеря связи с терминалом) не запущенному процессу, а всем процессам в системе.

Проблема проявляется начиная с выпуска sudo 1.9.16 и вызвана использованием в отдельных случаях функции killpg() вместо kill() для завершения дочернего процесса. В отличие от функции kill() функция killpg() отправляет сигнал группе процессов, но в качестве группы может обрабатывать значения больше или равные 0. При передаче отрицательного значения группы поведение не определено и в некоторых системах может приводить к отправке сигнала процессу с номером 1 (init) и завершению работы всех процессов в системе.

В sudo может возникнуть ситуация, когда при запуске команды в псевдотерминале (PTY) команда не может быть корректно запущена и вместо PID библиотечные функции возвращают код ошибки "-1". Для отзыва доступа к терминалу в sudo запускается функция revoke_pty, которая использует в качестве идентификатора группы PID процесса при вызове функции killpg без должного анализа возвращённого ранее кода ошибки, что приводит в итоге к выполнению "killpg(-1, SIGHUP)".

Кроме того, в sudo исправлена проблема, приводящая к сбою при перехвате и проверке запускаемых команд в конфигурациях, использующих опции intercept и intercept_verify в файле sudoers. В Linux-системах, поддерживающих функцию ptrace_readv_string(), наблюдалось аварийное завершение процессов, размер аргументов командной строки или переменных окружения у которых превышал размер страницы памяти (обычно 4096 байт).

  1. Главная ссылка к новости (https://github.com/sudo-projec...)
  2. OpenNews: Уязвимости в утилите sudo, позволяющие получить права root в системе
  3. OpenNews: В Ubuntu 25.10 решено задействовать аналог sudo, написанный на Rust
  4. OpenNews: Уязвимость в sudo, позволяющая изменить любой файл в системе
  5. OpenNews: Леннарт Поттеринг представил run0, замену sudo, интегрированную в systemd
  6. OpenNews: Использование SSH поверх UNIX-сокета вместо sudo для избавления от suid-файлов
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63633-sudo
Ключевые слова: sudo
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (35) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 08:07, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    > без должного анализа возвращённого ранее кода ошибки

    Виноват си, потому что не дает sum types. То, что разраб забыл проверить -- простительно, потому что мозг -- это мясо. Мы не можем от мяса требовать 100%-ного анализа кода. К счастью, есть язык, который автоматизирует проверки. Он бы это выявил на этапе компиляции и подсказал мясу: "тут может вернуться ошибка". Мясо бы кивнуло и поблагодарило чудо-язык за техническую помощь.

     
     
  • 2.3, onanim (?), 08:55, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    а gcc разве не выдаёт такие варнинги при компиляции?
    и использование статических анализаторов разве не является обязательным при разработке критически важного софта?
     
     
  • 3.10, Аноним (10), 10:01, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Использование костылей разве не является обязательным при ходьбе?
     
  • 3.11, вымя (?), 10:24, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Если вы откроете патч (https://github.com/sudo-project/sudo/commit/fb208d383af27a07abe9cb277a620ea34c), то обнаружите, что pgrp приезжает из ec->cmnd_pid, который устанавливается вообще в другом месте, кем попало, как попало, аж в трёх си-файлах, да и там либо явно (= -1), либо очень косвенно (= cstat.val, = sudo_debug_fork()), а не из результата выполнения стандартной библиотечной функции. Компиляторный угадав тут явно бесполезен, потому что ему никто никогда не подскажет, используется ли потом это поле структуры в другом месте без проверки или просто авторы с привычками времён 80486 опять экономят байты исполняемого кода, удачно переиспользуя -1 по своему усмотрению.

    И, да, Result/Either type тут действительно сэкономил бы время всем, потому что компилятор бы гавкнул на попытку использовать этот тип как аргумент kill(), и сделал бы это быстро и надёжно, в отличие от статических анализаторов, которым нужно проверить миллион инвариантов среди сотен функций из десятков файлов, не запутаться в них и не вылететь по исчерпанию памяти. Если, конечно, какой-то анализатор вообще надоумили проверить, что в kill() передаётся -1 (в чём я сомневаюсь, потому что отрицательные аргументы у kill легитимны и используются гораздо чаще, чем может показаться), потому что анализировать коды возвратов тут, похоже, бесполезно (см. выше).

     
     
  • 4.36, 1 (??), 17:10, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Они сейчас вставили проверку на -1. Ну ок, а если прилетит -2? С таким подходом ни какие расты не спасут.

    Их нельзя за это винить: Open Source отродясь был хобби для энтузиастов - где каждый волен галлюционировать как ему взимается. Проблему создали те, кто решил тащить создаваемый таким способом код в энтерпрайз.

     
     
  • 5.42, Аноним (42), 21:22, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Open Source отродясь был хобби для энтузиастов - где каждый волен галлюционировать как ему взимается.

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

     
     
  • 6.43, Аноним (43), 08:24, 28/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Больной здесь скорее тот, кто докопался до формального лпределения.
    И да, в корпаниях пишут код иначе - там есть проверяющие.
    В опенсорсе же таких часто нет. И да, опенсорц это хобби, даже Линус когда ядро писал был студентом и это был его хобби проект. Без интереса корпораций линукс был бы сейчас в лучшем случае где-то среди бздей, а в худшем - хурдом.
     
  • 2.8, Anonimm (?), 09:34, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • –5 +/
    А где же "миллионы глаз", которые пропустили эту ошибку ещё на этапе сборки?
     
     
  • 3.12, нейм (?), 10:28, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    У семи нянек дитя с CVE
     
  • 3.14, Аноним (14), 11:57, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    у sudo настолько огромная кодовая база что отдельному программисту практически невозможно проверить все
     
     
  • 4.15, Аноним (15), 12:17, 27/07/2025 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 4.17, Anonimm (?), 13:29, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Тогда получается, что надёжность Linux - это просто слова?
     
     
  • 5.26, Аноним (26), 15:14, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    О 100% надёжности Linux никогда не говорили.
     
     
  • 6.29, Anonimm (?), 15:57, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    О, как! А как же "Linux работает на N компьютеров, входящих в топ-500"? Неужели обманули? 😆
     
     
  • 7.31, Нононим (?), 16:01, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Работает. А надёжность то здесь причём?
     
     
  • 8.33, Anonimm (?), 16:05, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Так его пихают туда просто чтобы был Да уж, умственные способности вендоров пор... текст свёрнут, показать
     
  • 5.28, Аноним (28), 15:56, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ваша аппаратная архитектура байдезинг ненадежна, о чем речь вообще.
     
  • 4.34, 1 (??), 16:43, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Размер кодовой базы не причём. Налажал автор предыдущего изменения, а патч там был мелкий. В отладочном сообщении он прямо писал, что собирается вызвать killpg, но строчкой ниже вызывал kill. Если такие ошибки пропускают, значит с ревью изменений там на самом деле все плохо.
     
  • 3.37, Аноним (37), 20:04, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я своими двумя посмотрел и снёс этот ваш sudo из системы. Чтобы пакеты не выпендривались, сделал псевдопакет без судо.
     
  • 2.18, Аноним (18), 13:52, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    C не виноват в том, что люди не умеют докусентацию читать
     
     
  • 3.30, Anonimm (?), 15:59, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ниче, скоро ИИ её читать будет, новости о новом бэкдоре станут чаще здесь мелькать..
     
  • 2.25, Аноним (25), 15:01, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Виноват си, потому что не дает sum types

    в ядре это роскошь.

     
     
  • 3.38, Аноним (37), 20:08, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В нормальном языке типы не утекают в исполняемый код. А если именно это и надо, то пилите struct с интом в начале структуры и всеми необходимыми структурами в union ниже. Великолепно работает.
     

  • 1.5, Аноним (5), 09:17, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    killpg - это алиас для обычной остановки постгреса
     
  • 1.16, Карлос Сношайтилис (ok), 12:31, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > При передаче отрицательного значения группы поведение не определен

    Сишное мышление.

    Когда привык, что UB это неотъемлемая часть системы и переносишься это на уровень пользователя.

     
     
  • 2.39, Аноним (37), 20:12, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Если я вашу rust программу (без шизофренической проверки каждого аргумента для каждой функции) запущу и на следующий день другой компонент системы, который вы в rust не контролируете (структура или код ошибки из ядра, данные из файла, из прилинкованной библиотеки), то в вашем расте внезапно тоже появится UB, потому что *ТЫ* не проверил входные данные.
     

  • 1.19, Аноним (18), 13:55, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ни когда не понимал, зачем такую косую утилиту пихают почти во все дистры линукса
     
     
  • 2.24, Аноним (25), 14:58, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что пользователей GUI пугают терминалы? )
    Потому что он не в курсе привилегий и считает себя богом своей машинки, при этом ничего не понимая в плане безопасности надо принудительно разграничивать? )
     

  • 1.23, Аноним (25), 14:52, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >При передаче отрицательного значения группы поведение не определено

    Косяк killpg(). Они скажут, что тот кто использует killpg() должен контролировать что передает её. Но killpg() - часть системы, и приумножать хаос своей неопределенность не должна. Тем более проверка на входе для неё не критичная в плане производительности. Это все, может быть оставлено для костылей? Но ведь поведение кода не определено при таком фактическом значение!  

     
     
  • 2.27, вымя (?), 15:33, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Описание в новости не имеет отношения к реальности, кстати. В патче не подчищают за killpg(), а меняют kill() на killpg(), а у kill() поведение при отрицательном pid как раз-таки определено чётко. Что, конечно, не отменяет ногострельности интерфейса в современных руках.
     

  • 1.32, Anonimm (?), 16:03, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Хороши "миллионы глаз", нечего сказать. Уязвимость случайно (?) появилась в сентябре прошлого года и только сейчас заметили, что sudo неправильно обрабатывает запросы..
    Ниче, ИИ все эти "случайности" найдёт.. и добавит новые..
     
     
  • 2.35, 1 (??), 16:52, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На линуксах баг не воспроизводится. Проблему обнаружили на AIX, когда до них доехала эта версия. То что она приехала к ним через год, для энтерпрайзов это нормально.
     
     
  • 3.40, вымя (?), 20:39, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не «не воспроизводится», а «ещё не успели воспроизвести». Там же не только aix, но и огромная куча людей на сервере, например; давно вы такое видели на серверах? А /dev/pts у линукса тоже не резиновый, на секундочку.
     
  • 3.41, Аноним (41), 20:43, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Когда портируют ПО из Linux в BSD, необходимо всё проверять, т.к. многие самые обычные вещи работают по-разному. Всегда проверяю.
     

  • 1.44, Соль земли2 (?), 10:19, 28/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот поэтому и существует Debian stable с проверенными временем пакетами.
     

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



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

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