Sempre setgroup prima di setuid?

5

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.)

    
posta Kaz 02.05.2016 - 20:47
fonte

1 risposta

4

Questo dipende quasi interamente dal fatto che tu stia temporaneamente o definitivamente abbandonando i privilegi.

Nel caso di privilegi di rilascio temporaneo, è in realtà sconsigliabile chiamare setgroups con un singolo gruppo mentre si cancella l'elenco dei gruppi ancillari, rendendo potenzialmente impossibile (senza intervento esterno) ripristinare il processo torna al suo livello di privilegio originale.

Nel caso di privilegi permanenti, è importante cancellare l'elenco dei gruppi ancillari per rendere più difficile per un exploit ripristinare i privilegi dopo che sono stati eliminati. Il problema sorge quando si tenta di farlo nel modo sbagliato: se si setuid a un valore diverso da zero prima (significa che non si è più root), quindi chiama setgroups , l'uid effettivo del processo è ora non è più root, il che significa che la chiamata interna setgid fallisce. Farlo viceversa non ha questo problema perché chiamare prima setgid non modifica l'uid effettivo del processo, consentendo di chiamare setuid .

Maggiori informazioni possono essere trovate qui:

risposta data 02.05.2016 - 21:07
fonte

Leggi altre domande sui tag