Linux privilege escalation with 'sudo'

Published on

The sudo command allows users to run commands with root privileges, without being root.

In some cases, non-root users are given the ability to run certain commands with administrative privileges. For example, a website user might be configured on a server to run all commands necessary for hosting and managing a website. Some of these commands might have been given permission to run using sudo.

To find out which sudo commands the current user has access to, run the following:

sudo -l

If we are lucky, we might get output similar to the following:

User website may run the following commands on website-hosting-server:
    (ALL) NOPASSWD: /usr/bin/ruby

In this example, ruby has been configured to run using sudo for the website user. Now that we have this information, we can find a way to exploit it. GTFOBins is a great resource for finding such exploits.

Searching GTFOBins for ruby, and filtering by sudo, gives us the following command:

ruby -e 'exec "/bin/sh"'

Running this command as our example website user will start a new bash shell with root privileges! 🎉

Of course, sudo -l could return a plethora of different commands which run using sudo, so you will need research each individual command to find a working sudo exploit.

Closing thoughts

It's not guaranteed that all systems will have the same configuration described in this post, but it's worth checking sudo -l and GTFOBins, as it might enable privilege escalation.

This post was tagged: