"LD_LIBRARY_PATH" è un rischio per la sicurezza?


8

Sappiamo che le ld.soricerche di librerie nelle directory specificate dalla variabile d'ambiente $LD_LIBRARY_PATH, ma gli utenti regolari potrebbero eseguire:

export LD_LIBRARY_PATH=dir1:dir2...

Possono salvare la libreria infetta in un percorso con priorità più alta rispetto a quella originale in modo tale da ld.sotrovare quella invece della libreria attendibile nel file ld.so.cache.

Questo è un rischio?
Come possiamo disabilitare la scrittura su questa variabile d'ambiente per un utente normale?


Grazie a @Byte Commander per la modifica. il mio inglese non è buono :)
Sinoosh,

Nessun problema, è meglio della media :)
Byte Commander

Risposte:


17

Questo non è affatto un rischio per la sicurezza, perché puoi sempre impostare solo variabili d'ambiente per il tuo ambiente attuale (es. Sessione Bash corrente) e, usando il exportcomando, i suoi ambienti figlio (script che avvii, sottotitoli, ecc.). È impossibile eseguire l'escalation di una variabile di ambiente creata o modificata nell'ambiente padre. Ciò include che è impossibile per gli utenti regolari apportare modifiche a livello di sistema, ovviamente.

Pertanto, l'unico ambiente che potrebbe essere interessato se si esegue export LD_LIBRARY_PATH=...è la shell corrente e eventuali sottotitoli che potrebbero essere generati in seguito. Supponiamo che modifichi il percorso di ricerca per includere le librerie infette all'inizio, ovvero con la massima priorità. Quindi esegui un eseguibile che carica una delle librerie infette senza nemmeno saperlo. Che succede ora?

Hai codice dannoso (dalla libreria infetta) in esecuzione con il tuo account utente con regolari privilegi di non amministratore. Potrebbe sembrare brutto, ma in realtà ... e allora? Funziona con privilegi utente regolari, il che significa che non può influenzare l'intero sistema. A proposito, eseguire direttamente un eseguibile con lo stesso codice dannoso sarebbe stato molto più semplice che modificare il percorso di ricerca della libreria e attendere che un normale eseguibile lo caricasse.

Conclusione: un utente normale può modificare solo il proprio percorso di ricerca delle librerie, il che significa che può anche caricare solo quelle librerie stesse nel proprio account utente normale con regolari privilegi non di sistema. Detto questo, non fa alcuna differenza se forzano il caricamento di una libreria infetta o eseguono direttamente un eseguibile infetto. Non otterresti assolutamente nulla se quella variabile di ambiente non potesse essere sovrascritta dagli utenti.

PS: Ci sono anche eseguibili che hanno il setuid o setgid flag impostato, il che significa che non funzioneranno come l'utente / gruppo di colui che li gestisce, ma di colui che li possiede . Ad esempio l' sudoeseguibile è di proprietà di root e ha il flag setuid impostato, il che significa che viene sempre eseguito come root quando eseguito. Per motivi di sicurezza, la $LD_LIBRARY_PATHvariabile viene ignorata dagli eseguibili con uno dei flag setuid / setgid impostati per assicurarsi che l'utente normale non possa eseguire un eseguibile in esecuzione con privilegi di root per caricare librerie arbitrarie.
(Grazie a @Rinzwind per averlo segnalato!)


Molte grazie ! Sto leggendo un libro che dice "LD_LIBRARY_PATH è considerato un rischio per la sicurezza perché potrebbe consentire ai programmi non autorizzati l'accesso accidentale alle librerie di sistema o altrimenti esporre percorsi di librerie di sistema a utenti non autorizzati." cosa significa?
Sinoosh,

1
@Sinoosh Non riesco davvero a pensare a un motivo per cui dovrebbe essere un problema di sicurezza se un'applicazione non attendibile conosce la posizione delle mie librerie di sistema. Se tutto è configurato correttamente e non hai incasinato le autorizzazioni, dovrebbero essere di proprietà di root e non scrivibili da nessun altro, il che significa che non vi è alcun rischio che vengano infettati o modificati in alcun modo (a meno che non si esegua l'applicazione non attendibile come root , ma non lo farai, vero?)
Byte comandante


@ Byte Commander, sono d'accordo con te non con l'autore :)
Sinoosh,

Questa risposta non è del tutto corretta. LD_LIBRARY_PATHè ovviamente un problema di sicurezza quando si carica una libreria dannosa in primo luogo e si modifica il comportamento di un binario.
heemayl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.