Writable /etc/passwd
/etc/passwd es el fichero que lista las cuentas del sistema. Cada línea tiene siete campos separados por ::
root:x:0:0:root:/root:/bin/bash
│ │ │ │ │ │ └ shell
│ │ │ │ │ └ directorio home
│ │ │ │ └ GECOS (descripcion)
│ │ │ └ GID
│ │ └ UID
│ └ contrasena ('x' = esta en /etc/shadow)
└ nombre de usuarioEl segundo campo es la clave. Una x significa "la contraseña (con hash) vive en /etc/shadow". Pero el formato admite poner el hash directamente ahí, y un campo vacío significa sin contraseña. Si un usuario sin privilegios puede escribir /etc/passwd, esto es root inmediato.
Vía 1: dejar root sin contraseña. Se borra la x de la entrada de root para vaciar el campo. A partir de ahí, su root no pide contraseña:
sed -i 's/^root:x:/root::/' /etc/passwd
su rootVía 2: añadir un usuario UID 0. Se genera un hash y se añade una cuenta nueva con UID 0 (equivalente a root):
openssl passwd -1 -salt x pwn # genera el hash
echo 'pwn:<hash>:0:0:root:/root:/bin/bash' >> /etc/passwd
su pwn # contrasena: la elegidaCómo encontrarlo (atacante). Herramientas como linpeas lo marcan explícitamente ("/etc/passwd is writable"). A mano, ls -l /etc/passwd revela el problema: el fichero debería ser root:root con permisos 644; si el propietario es un usuario o un grupo de servicio con permiso de escritura, es explotable.
Por qué importa. Es uno de los errores de permisos más directos: no requiere exploits ni condiciones de carrera, solo un editor de texto. Suele aparecer por un chmod/chown demasiado amplio o por un script de despliegue que deja mal los permisos.
Cómo detectarlo. La firma directa es una escritura sobre /etc/passwd por un proceso que no es de gestión de cuentas (auditd -w /etc/passwd -p wa), y el resultado en el fichero: una entrada con UID 0 distinta de root, o el campo de contraseña de root vaciado (root::). FIM sobre /etc/passwd alerta del cambio; y un su/login a root sin contraseña deja en /var/log/auth.log un session opened for user root inusual. Un openssl passwd/mkpasswd reciente en el historial refuerza el indicio.
Defensa. /etc/passwd debe ser propiedad de root:root con permisos 644, y /etc/shadow solo legible por root (640, grupo shadow). Auditar periódicamente los permisos de los ficheros sensibles del sistema. Relacionado con abuso de sudo y otras escaladas por configuración insegura.
Máquinas donde se aplica
- Cereal 1VulnHub
- DomainDockerLabs
- SnookumsProving Grounds Practice
- Vulnerable Lab (1 · 4 · 5)VulnHub