rsync privilege escalation via sudo
rsync copia ficheros preservando metadatos, y ahí está el abuso cuando aparece en un sudo -l que lo deja ejecutar como root. Hay dos vías, según cuánta libertad dé la regla sobre los argumentos.
Vía A: shell directa con -e (GTFOBins)
Si la regla permite pasar argumentos libres, la opción -e de rsync (que define la "shell remota") ejecuta un comando arbitrario como root. Es la forma más limpia y la que documenta GTFOBins:
sudo rsync -e 'sh -c "sh 0<&2 1>&2"' 127.0.0.1:/dev/null
id # uid=0(root)Vía B: SUID por preservación de metadatos
Cuando la regla fija el origen con un comodín (sudo rsync -a /home/dev/app/* /opt/app/), se aprovecha que rsync corre como root y conserva permisos: se coloca en el origen (escribible por nosotros) una bash con bit SUID y se deja que el rsync privilegiado la copie al destino como root:root, manteniendo el SUID:
cp /bin/bash app/bash
chmod u+s app/bash
sudo /usr/bin/rsync -a --chown root:root /home/dev/app/* /opt/app/
/opt/app/bash -p # SUID root + -p mantiene el EUID: shell de rootLa clave es la combinación: el origen es escribible por nosotros, rsync corre como root y --chown (o el propio -a si el binario ya fuese de root) deja el fichero con dueño root y el SUID intacto. Luego bash -p no descarta los privilegios efectivos y obtenemos root.
Requisitos
Una regla sudo sobre rsync ejecutable como root. Para la vía A basta con poder pasar argumentos; para la vía B, que el origen sea un directorio escribible por nosotros y que la copia preserve permisos (-a/-p) o permita --chown.
Cómo detectarlo. El uso queda en /var/log/auth.log como un sudo ... COMMAND=/usr/bin/rsync, y auditd registra el execve con la línea de comando completa: un rsync con -e 'sh ...', o con destino en rutas sensibles (/opt, /usr/local, /etc) desde una cuenta no administradora, es la firma. Un binario SUID nuevo apareciendo tras la copia (comparar contra una línea base de find / -perm -4000) delata la vía B. Sysmon for Linux o auditd sobre execve con sh -c como hijo de rsync cierra la detección.
Defensa. Evitar sudo sobre rsync; si es imprescindible, fijar origen y destino exactos sin *, prohibir -e/--rsh con NOEXEC o una regla que no admita argumentos libres, y revisar periódicamente ficheros SUID inesperados. Es primo del resto de abusos de GTFOBins por sudo.
Máquinas donde se aplica
- YummyHackTheBox