sudo make: Makefile injection
Una regla de sudo que permite ejecutar make (o make install) como root es equivalente a ejecutar código arbitrario como root, porque make hace exactamente lo que diga el Makefile. Si controlamos el directorio del proyecto (o el propio Makefile), definimos qué comandos corre cada objetivo.
Vía A: envenenar un objetivo del Makefile
El patrón habitual es sudo make -C /ruta/proyecto <target>: basta con que el Makefile de esa ruta, o el objetivo invocado, contenga un comando bajo nuestro control. Un objetivo de make ejecuta sus recetas con la shell (cada línea de receta, con tabulador delante), así que se le puede colar un payload:
install-spx-ui-assets:
@chmod u+s /bin/bashsudo make install -C /home/<user>/<proyecto>
bash -p # euid=0 -> [[suid-abuse|shell con SUID]]Vía B: --eval sin tocar el Makefile (GTFOBins)
Si la regla deja pasar argumentos libres, make acepta inyectar una receta directamente con -f - o --eval, sin necesidad de editar ningún fichero. Es la forma que documenta GTFOBins:
sudo make -s --eval='x:;/bin/sh 1>&0' x
id # uid=0(root)Es primo hermano del sudo sobre script escribible: en ambos casos, sudo ejecuta con privilegio un fichero cuyo contenido controla el usuario. La diferencia es que aquí el "script" es un Makefile y el intérprete es make.
Requisitos
Una regla sudo sobre make ejecutable como root. Para la vía A, poder editar el Makefile alcanzado (o que el proyecto esté en un directorio escribible por nuestro usuario, para recrearlo); para la vía B, que la regla admita argumentos libres. Conviene leer el Makefile real antes: el objetivo que make install invoca es el que hay que envenenar.
Cómo detectarlo. El uso queda en /var/log/auth.log como sudo ... COMMAND=/usr/bin/make, y auditd capta el execve de make seguido de un hijo sh -c/chmod u+s//bin/sh corriendo como root: esa cadena make -> shell es la firma. Un make invocado con --eval/-f - desde una cuenta no administradora, o un /bin/bash que gana el bit SUID (comparar contra la base line de find / -perm -4000), delatan el abuso. Editar un Makefile en un directorio de proyecto justo antes del sudo make (Sysmon/auditd sobre escritura de ficheros) añade contexto.
Defensa. No conceder make por sudo; si un flujo de compilación lo necesita, fijar la ruta del proyecto a un directorio propiedad de root y no escribible, no permitir argumentos libres (nada de --eval/-f) y revisar que ningún objetivo alcanzable ejecute contenido editable por terceros.
Máquinas donde se aplica
- SPXProving Grounds Practice