Sudo Misconfigurations
Theory
On this page, we speak about specific SUDO misconfigurations that can be leveraged to subvert sudo's intended functionality and elevate our privileges.
Practice
NOPASSWD
The following sudo
configuration allow an user to execute some command with another user's privileges without knowing the password.
$ sudo -l
User demo may run the following commands on crashlab:
(root) NOPASSWD: /usr/bin/vim
LD_PRELOAD
LD_PRELOAD
is an optional environmental variable containing one or more paths to shared libraries, or shared objects, that the loader will load before any other shared library including the C runtime library (libc.so) This is called preloading a library.
If env_keep+=LD_PRELOAD
is explicitly defined in the sudo -l
output and you can call some command with sudo, you can escalate your privileges.
$ sudo -l
env_reset, env_keep+=LD_PRELOAD
User demo may run the following commands on crashlab:
(root) NOPASSWD: /usr/bin/find
LD_LIBRARY_PATH
the LD_LIBRARY_PATH
env variable controls the path where libraries are going to be searched.
If env_keep+=LD_LIBRARY_PATH
is explicitly defined in the sudo -l
output and you can call some command with sudo, you can escalate your privileges.
$ sudo -l
env_reset, env_keep+=LD_LIBRARY_PATH
User demo may run the following commands on crashlab:
(root) NOPASSWD: /usr/bin/find
SETENV
This SETENV
directive allows the user to set an environment variable while executing something:
#Setenv on an arbitrary binary/script
$ sudo -l
env_reset, env_file=/etc/sudoenv, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, listpw=always
User waldo may run the following commands on admirer:
(ALL) SETENV: /opt/scripts/admin_tasks.sh
#Setenv on binary/script without the full command path
$ sudo -l
env_reset, env_file=/etc/sudoenv, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, listpw=always
User waldo may run the following commands on admirer:
(ALL) SETENV: find
Command Path Hijacking
If we can execute some command as root but env_reset
and secure_path
are set, we cannot override the PATH environment variable.
Instead we need to check if we have permission to write each path if a the sudo binary is specified without the full command path.
$ sudo -l
env_reset, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User demo may run the following commands on crashlab:
(root) python /home/user/example.py
Bypassing paths - Wildcard & Symlink
If we can execute some command as root and it contains a wildcard. We may use symlinks, path traversal or multiple arguments to exploit it.
$ sudo -l
env_reset, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User demo may run the following commands on crashlab:
(root): /bin/less /var/log/*
References
Last updated
Was this helpful?