SUID exploit e patch

1

Sto lavorando su una "app" binario radice SUID che esegue un comando system("ls -la /dir") . Sono riuscito a sfruttarlo scrivendo un sostituto malevolo ls che avvia una shell e ho modificato $PATH del mio utente tale che il% maligno% co_de viene eseguito anziché quello in ls .

Ho notato che eseguirlo come utente restituisce una shell di root mentre è in esecuzione con /bin usa il percorso di root e semplicemente elenca i file in dir. Per quanto ne so, setuid eredita i privilegi del proprietario (in questo caso root) per utente e sudo viene eseguito come root.

Come vengono chiamate tali vulnerabilità? In che modo lo sviluppatore di un'applicazione lo patch? C'è un modo in cui posso costringere gli utenti a usare sudo "./example" per eseguire un programma?

** il binario è un eseguibile linkato staticamente

    
posta Gian 12.05.2018 - 00:41
fonte

1 risposta

1

Trucking di un programma con più privilegi per fare qualcosa che il proprietario del programma non ha intenzione di chiamare è chiamato escalation di privilegi .

Quando un programma privilegiato legge i dati dall'esterno, dovrebbe verificare che questi dati siano innocui. Questo è chiamato sanitizzazione dei dati . Ad esempio, un programma setuid che esegue un programma esterno dovrebbe verificare che il programma che sta eseguendo sia quello desiderato. In questo caso il programma dipende sia dalla stringa comamnd ls -la /dir che dal valore della variabile d'ambiente PATH ¹. Gli unici valori sicuri per PATH sono quelli in cui la prima voce per ls e qualsiasi altro comando che il programma potrebbe eseguire è quella desiderata; in pratica ciò significa ignorare completamente le informazioni esterne (il valore di PATH nell'ambiente) e impostare PATH su un valore sicuro noto.

Sudo rimuove la maggior parte delle variabili d'ambiente, incluso PATH che imposta su un valore predefinito sicuro. Ciò semplifica la scrittura di componenti privilegiati sicuri utilizzando sudo anziché un programma setuid personalizzato per l'elevazione dei privilegi. Un programma eseguito attraverso sudo viene avviato con un valore sicuro per PATH . Puoi ancora sbagliare, naturalmente. Ad esempio, consentire a un utente di eseguire sudo ./example consente loro di eseguire ciò che vogliono poiché possono creare un eseguibile chiamato example nella directory di loro scelta.

¹ E LD_xxx variabili usate dal linker dinamico, ma il linker dinamico del programma setuid le cancella quando vede che il programma che sta collegando è setuid.

    
risposta data 12.05.2018 - 09:00
fonte

Leggi altre domande sui tag