Dlaczego „AcceptEnv *” jest uważany za niepewny?

12

W /etc/ssh/sshd_configistnieje opcja nazywa AcceptEnvże klient ssh pozwala wysyłać zmienne środowiskowe. Muszę być w stanie wysłać dużą liczbę zmiennych środowiskowych. Zmieniają się one przy każdym połączeniu klienta, więc umieszczenie ich w skrypcie logowania na serwerze byłoby trudniejsze.

Przeczytałem, że "AcceptEnv *"to niepewne. Chciałbym zrozumieć, dlaczego zanim spróbuję uzyskać listę wszystkich zmiennych środowiskowych, które próbuję ustawić, aby tam umieścić.

Dlaczego uważa się to za niebezpieczne? Czy mogę dostać przykład?

TheDauthi
źródło

Odpowiedzi:

11

Włączenie przetwarzania środowiska może umożliwić użytkownikom ominięcie ograniczeń dostępu w niektórych konfiguracjach przy użyciu mechanizmów takich jak LD_PRELOAD.

Nie wszystkie wersje stron podręcznika dla sshd_config wspominają o tym. Jeśli zmienne środowiskowe zostaną wcześniej zmienione, a niektóre procesy uprzywilejowane zostaną wykonane z określonymi przez nie nowymi bibliotekami, mogą wystąpić problemy.

Spójrz na http://www.dankalia.com/tutor/01005/0100501004.htm i wyszukaj „LD_PRELOAD Exploit”. Przepraszamy, strona nie ma linków zakotwiczonych.

Zobacz także to pytanie StackOverflow: „ Co to jest sztuczka LD_PRELOAD?

Ustawienie zmiennych środowiskowych po połączeniu jest prawidłowe, ale gdy te zmienne są interpretowane przez demona ssh zgodnie z ustawieniem AcceptEnv, mogą wystąpić problemy.

Jeff Ferland
źródło
1
Czym różni się to od ręcznego ustawiania zmiennych po zalogowaniu?
Joseph Garvin
1
@JosephGarvin, niektóre systemy mają ograniczone powłoki lub zezwalają tylko na jedno konkretne polecenie, tak że „nie mogą ” . W związku z tym chodzi o zapewnienie środków, dzięki którym można ominąć takie środki bezpieczeństwa.
Charles Duffy
0

Nie akceptuj zmiennych środowiskowych:

Zobacz exploit Shellshock, który pojawił się ostatnio. Jeśli zaakceptujesz zmienne środowiskowe, otworzysz naprawdę paskudny exploit.

John Hunt
źródło
1
Rozpowszechniasz strach IMO. Jeśli tak się martwisz, dlaczego mają dostęp do SSH? A przy okazji nie można ich powstrzymać od ustawiania zmiennych środowiskowych, gdy znajdują się w powłoce, a nawet funkcjach. Exploit ten dotyczy nieautoryzowanego dostępu do powłoki poprzez rzeczy takie jak nginx, a nie autoryzowany dostęp do powłoki.
Jordon Bedwell
W każdym razie akceptujesz przynajmniej jedno środowisko. zmienna o nazwie TERM. Mogą istnieć uzasadnione potrzeby zaakceptowania innych zmiennych, takich jak DRUKARKA, EDYTOR, PAGER, ...
ibre5041
@JordonBedwell, nie każde połączenie SSH jest autoryzowane do dostępu do powłoki. Mam kilka systemów, w których istnieją konta, dla których jedynym uwierzytelnianiem jest klucz SSH, który pozwolił na uruchomienie tylko jednego, konkretnego polecenia (z tożsamością właściciela tego klucza i innymi szczegółami, wprowadzonymi).
Charles Duffy,
... powiedziawszy, zgadzam się, że od 2017 roku ShellShock jest tutaj bardzo przesadzony. Z obecnych implementacjach, generując eksportowanych funkcji wymaga kontrolę nie tylko nad zmienną środowiskową na wartości , ale także jego nazwę (a proces oceny eksportowanych funkcji podczas uruchamiania powłoki nie jest już sam w sobie jest podatna na ataki wtrysku).
Charles Duffy