Sui sistemi GNU / Linux creati utilizzando pacchetti RPM, l'utilità rpmlint
si lamenta dei programmi che non chiamano setgroups
prima di setuid
.
L'idea è che prima di eliminare i privilegi, un processo dovrebbe anche eliminare l'elenco di ID gruppo supplementare con setgroups(0, NULL)
.
Tuttavia, è qualcosa che dovrebbe sempre essere fatto?
Supponiamo che stiamo eseguendo setuid root e stiamo portando un elenco di ID di gruppo supplementari dal nostro contesto di sicurezza originale: i gruppi associati con l'ID utente reale.
Quando torniamo a quell'ID utente reale, non vogliamo necessariamente perdere quei gruppi: l'esecuzione del codice come l'utente originale può dipendere dal fatto che tali iscrizioni supplementari siano a posto, giusto?
Non dovremmo omettere setgroups(0, NULL)
nel codice setuid prima di rilasciare i privilegi all'utente originale?
(A proposito, ovviamente non rilasciamo i privilegi con setuid
su Linux perché non funziona per il codice che esegue setuid non-root.)