Уязвимости в Please, альтернативе sudo, написанной на языке Rust

Маттиас Герстнер (Matthias Gerstner) из SUSE Security Team провёл аудит утилиты Please, развиваемой в качестве более безопасной альтернативы sudo, написанной на языке Rust и поддерживающей регулярные выражения. Утилита поставляется в репозиториях Debian Testing и Ubuntu 21.04 в пакете rust-pleaser. В ходе аудита была выявлена группа уязвимостей (CVE-2021-31153, CVE-2021-31154, CVE-2021-31155), приводящих к краху и не исключающих возможность создания эксплоитов для повышению привилегий в системе.

Уязвимости устранены в ветке Please 0.4 (обновления пакетов уже предложены для Ubuntu и Debian). Подробности о характере уязвимостей пока не сообщаются – доступен лишь один общий патч и краткое пояснение, какие из рекомендаций по устранению проблем с безопасностью применены.

Например, упомянут переход на использование fd при выполнении операции chmod и chown, разделение вызова do_environment, задействование вызовов seteuid/setguid, применение флага O_NOFOLLOW для отключения следования символическим ссылкам, ограничение каталогов определённым диапазоном значений, использование случайных символов в именах временных файлов и задание ограничения на размер файла с настройками.

Интересно, что после подготовки исправлений выяснилось, что после установки пакета на исполняемые файлы /usr/bin/please и /usr/bin/pleaseedit перестал выставляться флаг setuid, что потребовало принятия ещё одного патча, отключающего настройку “Rules-Requires-Root: no”.

Release. Ссылка here.