Уязвимость в Pam_oath, позволяющая получить права Root в системе

В PAM-модуле pam_oath, входящем в состав пакета oath-toolkit и применяемого при двухфакторной аутентификации с использованием одноразовых паролей (OTP), выявлена уязвимость (CVE-2024-47191), позволяющая непривилегированному пользователю получить root-доступ в системе.

Модуль pam_oath выполняется с правами root и изначально был рассчитан на размещение OATH-ключей в файле /etc/users.oath, доступ к которому имеет только пользователь root. В версии oath-toolkit 2.6.7 была добавлена поддержка размещения файлов с ключами в домашних каталогах пользователей (~/.config/users.oath). Непривилегированные пользователи получили возможность изменения файлов со своими ключами, но pam_oath при обращении к этим файлам не сбрасывал привилегии и продолжил использование небезопасных методов работы с файлами, рассчитанные на то, что файлы размещены в каталоге, недоступном для изменения.

Уязвимость вызвана тем, что после каждой успешной аутентификации по одноразовому паролю, pam_oath выполнял перезапись файла с ключами чтобы не допустить использование одного пароля несколько раз. Операция перезаписи сводилась к созданию в том же каталоге lock-файла, записи нового содержимого в файл с расширением “.new” и замене старого файла на новый вариант. При этом файл с расширением “.new” создавался с теми же правами, что и целевой файл, но запись в него производилась процессом с правами root и без проверки существования файла.

Если файл размещался в системном каталоге проблем не возникало, но после появления поддержки размещения файлов с ключами в домашних каталогах, возникла легко эксплуатируемая уязвимость. Для атаки достаточно создать символическую ссылку “~/.config/oath.secrets.new” и направить её на любой системный файл, который будет перезаписан после успешной аутентификации.

Для получения доступа root можно направить символическую ссылку на файл /etc/shadow. В этом случае pam_oath запишет в /etc/shadow актуальный список ключей и синхронизирует владельца и права доступа с файлом users.oath. Так как файл users.oath принадлежит пользователю, то в качестве владельца /etc/shadow будет выставлен этот пользователь, после чего атакующий сможет отредактировать файл /etc/shadow и записать в него новые параметры входа для учётной записи root.

Уязвимость проявляется начиная с выпуска oath-toolkit 2.6.7 и устранена (1,2,3) в версии 2.6.12. Отследить устранение уязвимости в дистрибутивах можно на данных страницах: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch. Уязвимость затрагивает только конфигурации, в которых разрешено размещение файлов с ключами в домашних каталогах, например, при использовании в настройках PAM строки “auth [user_unknown=ignore success=ok] pam_oath.so usersfile=${HOME}/user.oath”.

Дополнительно можно упомянуть выявленную на днях уязвимость (CVE-2024-9313) в PAM-модуле из состава пакета Authd, развиваемого проектом Ubuntu. Уязвимость позволяет пользователю, управляемому через брокер Authd, выдать себя за любого другого пользователя, управляемого этим же брокером, и успешно пройти аутентификацию через su, sudo или ssh под другим пользователем. Проблема устранена в версии Authd 0.3.5.

Release. Ссылка here.