the_open_door
café
ESEN
← Volver al índice

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 usuario

El 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 root

Ví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 elegida

Có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