Last updated on February 6, 2021 by Dan Nanni
sudo command, and I want to upgrade sudo to the latest version immediately to fix its vulnerability on my Linux system.  How can I update sudo version on [insert your Linux distro]?On Linux, the sudo command (short for "substitute user do" or "superuser do") is designed to allow a user to run a program with access capabilities of another user (most commonly the superuser "root").  sudo is commonly used to give selected users administrative control on a Linux system.  Although sudo has built-in mechanisms to prevent misuse (e.g., security policies, input/output logging), the potential impact of any vulnerability in sudo command is still extremely high.
For example, the latest heap buffer overflow vulnerability discovered in sudo (CVE-2021-3156) can trigger privilege escalation and allow any unprivileged user (those not in the sudoers list, or even nobody) to bypass password authentication and gain the root access.  This vulnerability can easily be exploited as the second-stage attack once a low-level service account gets breached via brute-force attacks.  
Since sudo is available on most Linux distributions by default, any vulnerability in sudo will most likely affect you directly.
sudo Has Vulnerability (CVE-2021-3156)Here I describe how to check if your sudo is vulnerable to the latest heap buffer overflow vulnerability (CVE-2021-3156).  While the instruction is very much specific to this vulnerability, it can be easily adjusted for any other sudo vulnerabilities based on corresponding CVE vulnerability disclosures.
sudo VersionYou can check the version of your sudo with the following command, and compare it against affected versions.
$ sudo --version
sudo affected by CVE-2021-3156:sudo from 1.8.2 to 1.8.31p2
sudo from 1.9.0 to 1.9.5p1
From the sudo version alone, you may not tell if sudo is vulnerable or not since the patch can be backported.  A more reliable method is to test the vulnerability directly.  To test if your sudo is affected by the heap buffer overflow vulnerability, you can use the following command line.
First log in to your Linux system as a non-root user, and then run:
$ sudoedit -s /
If your sudo is vulnerable, it will display an error message that says "sudoedit: /: not a regular file"
If your sudo is already patched, it will show a usage message starting with usage:
sudo Version on Supported Linux DistrosOnce you find that your sudo is affected by a known vulnerability, you should update sudo immediately.  The easiest way is of course to use the default package manager of your Linux system.  However, this method is only applicable if your Linux distro has not reached End-of-Life (EOL).  If your Linux distro is no longer maintained because its support lifecycle has expired, the repositories will not be updated with security patches. In this case, you cannot update sudo with a package manager, and you need to update it manually, as described next.
Here I assume that your Linux system is still supported.  Before updating sudo, an optional step is to check the changelog of the sudo package to confirm that the sudo package has been patched for a known vulnerability. In this example, the vulnerability under consideration is CVE-2021-3156.  You can skip checking the changelog if you are upgrading sudo as part of regular maintenance.
sudo on Ubuntu, Debian or Linux Mint:To check the vulnerability patch for sudo in the changelog of its DEB package:
$ sudo apt update; apt changelog sudo | grep CVE-2021-3156
    - debian/patches/CVE-2021-3156-pre1.patch: check lock record size in
    - debian/patches/CVE-2021-3156-pre2.patch: sanity check size when
    - debian/patches/CVE-2021-3156-1.patch: reset valid_flags to
    - debian/patches/CVE-2021-3156-2.patch: add sudoedit flag checks in
    - debian/patches/CVE-2021-3156-3.patch: fix potential buffer overflow
    - debian/patches/CVE-2021-3156-4.patch: fix the memset offset when
    - debian/patches/CVE-2021-3156-5.patch: don't assume that argv is
Once you confirm that the patch is available, go ahead and update sudo with:
$ sudo apt update; sudo apt --only-upgrade install sudo
Note that, even after a successful update, sudo version may remain the same or one of affected versions.  Rest assured. It is simply because often times a vulnerability patch is simply backported to an existing sudo version.  Thus, to verify the patch is successfully applied, it is recommended to test sudo against the vulnerability, as described previously.
sudo on Fedora or CentOS:To check the vulnerability patch for sudo in the changelog of its RPM package:
$ repoquery --changelog sudo | grep CVE-2021-3156
Fedora 33 openh264 (From Cisco) - x86_64 3.6 kB/s | 3.2 kB 00:00 Fedora Modular 33 - x86_64 952 kB/s | 1.5 MB 00:01 Fedora Modular 33 - x86_64 - Updates 1.5 MB/s | 1.5 MB 00:01 Fedora 33 - x86_64 - Updates 2.0 MB/s | 10 MB 00:05 Fedora 33 - x86_64 1.3 MB/s | 15 MB 00:10 RPM Fusion for Fedora 33 - Free - Updates 1.1 MB/s | 414 kB 00:00 RPM Fusion for Fedora 33 - Free 1.3 MB/s | 964 kB 00:00 - fixed CVE-2021-3156 sudo: Heap buffer overflow in argument parsing
Once you confirm that the patch exists, go ahead and update sudo with:
$ sudo dnf update sudo
Note that, even after a successful update, sudo version may remain the same or one of affected versions.  Rest assured. It is because often times a vulnerability patch is simply backported to an existing sudo version.  To double check on that, it is always a good idea to re-test sudo against the vulnerability, as described previously.
If your CentOS or Fedora system has reached EOL, you will need to manually update sudo as described next.
sudo Version on Unsupported Linux DistrosIf you are running an old Linux distribution which has reached EOL and is not supported (e.g., CentOS 6, Ubuntu 17.04), unfortunately you are on your own in regards to applying security patches. For some Linux distros, at least you can download the latest stable version of sudo binary package from the official website. For example, they provide an RPM package of the latest sudo for unsupported RHEL/CentOS 5 and 6.
If a pre-built binary package is not available, you can build the latest stable version (1.9.5p2 as of now) of sudo from the source, and manually install it.  You can also consider using CheckInstall to build a DEB/RPM package from the source.
The following describes how to manually build and install sudo from the source.
$ sudo apt install make gcc $ wget https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz $ tar -xf sudo-1.9.5p2.tar.gz $ cd sudo-1.9.5p2 $ ./configure --prefix=/usr $ make $ sudo make install
$ sudo dnf install make gcc $ wget https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz $ tar -xf sudo-1.9.5p2.tar.gz $ cd sudo-1.9.5p2 $ ./configure --prefix=/usr $ make $ sudo make install
After installation, verify that sudo is up-to-date:
$ sudo --version
Sudo version 1.9.5p2 Sudoers policy plugin version 1.9.5p2 Sudoers file grammar version 48 Sudoers I/O plugin version 1.9.5p2 Sudoers audit plugin version 1.9.5p2
This website is made possible by minimal ads and your gracious donation via PayPal or credit card
Please note that this article is published by Xmodulo.com under a Creative Commons Attribution-ShareAlike 3.0 Unported License. If you would like to use the whole or any part of this article, you need to cite this web page at Xmodulo.com as the original source.
Xmodulo © 2021 ‒ About ‒ Write for Us ‒ Feed ‒ Powered by DigitalOcean