Запись повышения привилегий в / etc / passwd, но без разрешения SUID на su

Dec 16 2020

Это не упражнение, решения может быть нет.

Мы создаем образ Docker (на основе CentOS), который предназначен для выполнения пользователем без полномочий root. Однако этот пользователь имеет права записи в / etc / passwd, потому что он находится в «корневой» группе. Вот разрешения / etc / passwd:

-rw-rw-r-- 1 root root 692 Dec 16 14:35 /etc/passwd

Это критический недостаток, и предполагается, что он позволяет легко повышать привилегии. Я могу добавить пользователя в / etc / passwd.

Но я не могу переключиться на этого пользователя, потому что su не имеет разрешения SUID:

-rwxr-xr-x 1 root root 32128 Sep 30 17:46 /bin/su

В результате у пользователя недостаточно прав для успешного выполнения su:

su: cannot set groups: Operation not permitted

Как я понял, в большинстве Linux команда su настроена с разрешением SUID. Это означает, что тот, кто выполняет su, считается выполненным пользователем root. Другой альтернативой может быть игра с возможностями. Я полагаю, что требуются CAP_SETGID и CAP_SETUID и, возможно, некоторые другие. Если su был настроен с этими возможностями, разрешение SUID может не понадобиться. Но в нашем образе Docker у su нет никаких возможностей. Кажется, что только root может правильно выполнить su.

Кроме того, sudo не установлен и sshd / telnetd не запущен.

Итак, как я могу использовать учетные данные, добавленные в / etc / passwd? Curl доступен, если это может помочь.

Ответы

3 RoryMcCune Dec 16 2020 at 23:46

На стандартном хосте Linux (виртуальная машина или сервер), если у вас есть доступ /etc/passwdили /etc/shadowвы можете изменить или добавить учетные данные в учетные записи, что, очевидно, будет серьезной проблемой (подробности о последствиях разрешения изменения /etc/passwdв этом ответе

В контейнере Docker обычно не устанавливается программное обеспечение, использующее эти файлы, поэтому нет Linux PAM, SSHD или другого программного обеспечения, которое будет использовать базу данных аутентификации.

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

Конечно, если приложение, работающее в контейнере, использует его, /etc/passwdто его изменение может оказать влияние, но это будет ситуативно в зависимости от того, что делает контейнер.