Ogni programma con uno dei bit set-user / group-upon-execution 1 rappresenta un potenziale rischio per la sicurezza. Nell'esempio fornito in questa domanda 2 , le autorizzazioni dello script passaggio-permesso consentono l'esecuzione dello script e del programma passwd con i privilegi di root usando lo spazio dei nomi dell'ambiente copiato da altri utenti.
Il programma passwd è in esecuzione in modalità terminale, al contrario della modalità di input standard, e non vuole che il terminale faccia eco ai caratteri della password sul display. Chiama ttyname per ottenere il nome del terminale dalla variabile di ambiente TERM per disattivare l'eco e altrimenti indirizzare i / o.
Sostituendo una serie di comandi della shell citata per il valore di TERM, è possibile creare una shell senza restrizioni per gli utenti non root. Il singolo apice nel comando env assicura che la valutazione sia posticipata, almeno in alcune implementazioni di shell 3 , fino a quando la chiamata getenv non viene effettuata per TERM tramite ttyname.
L'ignaro membro dell'helpdesk del gruppo potrebbe aprire una porta sul retro dell'attaccante, semplicemente reimpostando la password di un cliente utilizzando il passaggio di sicurezza.
[1] Il comando ls -l lo mostra come una "s" nei codici di autorizzazione. È il '4' nei codici di comando chmod dell'esempio. Le versioni utente e di gruppo di questi bit sono SUID e SGID abbreviati.
[2] Questo stesso exploit è segnalato per essere efficace con la variabile di ambiente MAIL_CONFIG e l'eseguibile che lo acquisisce dall'ambiente, sudo, nello stesso modo. (Credito a @ adam-shostack per questo esempio alternativo.)
[3] Potrebbero esserci implementazioni che posticipano la valutazione TERM fino a quando non viene eseguita la copia dell'ambiente per il processo figlio, lo script passaggio-passaggio. È più probabile che POSIX o qualche altro standard regoli quando si verifica la valutazione e che rimanda sempre fino a quando non viene richiesto il valore.