En los sistemas GNU / Linux que se crean utilizando paquetes RPM, la utilidad rpmlint
se queja de los programas que no llaman a setgroups
antes de setuid
.
La idea es que antes de eliminar los privilegios, un proceso también debe eliminar la lista de ID de grupo suplementarios con setgroups(0, NULL)
.
Sin embargo, ¿esto es algo que siempre debe hacerse?
Supongamos que estamos ejecutando setuid root y tenemos una lista de ID de grupo suplementarios de nuestro contexto de seguridad original: los grupos asociados con el ID de usuario real.
Cuando regresamos a esa ID de usuario real, no necesariamente queremos perder esos grupos: el código que se ejecuta como el usuario original puede depender de que esas membresías suplementarias estén en su lugar, ¿no?
¿No deberíamos omitir setgroups(0, NULL)
en el código setuid antes de quitarle privilegios al usuario original?
(Por cierto, por supuesto, no eliminamos los privilegios con setuid
en Linux porque eso no funciona con el código que ejecuta setuid no root).